Можно ли оставить возвращаемое значение операции Thrust::Reduce в памяти, выделенной устройством? Если это так, это так же просто, как присвоить значение области cudaMalloc, или мне следует использовать тягу::device_ptr?
результат снижения тяги в памяти устройства
Ответы (2)
Можно ли оставить возвращаемое значение операции Thrust::Reduce в памяти, выделенной устройством?
Короткий ответ: нет.
thrust reduce возвращает количество, результат редукции. Это количество должно быть помещено в резидентную переменную хоста. :
Возьмем, к примеру, сокращение, которое является синхронным и всегда возвращает результат ЦП:
template<typename Iterator, typename T>
T reduce(Iterator first, Iterator last, T init);
Как только результат операции будет возвращен в ЦП, вы можете скопировать его в ГП, если хотите:
#include <iostream>
#include <thrust/device_vector.h>
#include <thrust/reduce.h>
int main(){
thrust::device_vector<int> data(256, 1);
thrust::device_vector<int> result(1);
result[0] = thrust::reduce(data.begin(), data.end());
std::cout << "result = " << result[0] << std::endl;
return 0;
}
Другой возможной альтернативой является использование thrust::reduce_by_key
, которое вернет результат сокращения в память устройства, а не скопирует его в память хоста. Если вы используете один ключ для всего массива, конечным результатом будет один вывод, аналогичный thrust::reduce
Да, это должно быть возможно, если вместо этого использовать тягу::reduce_by_key с помощью тяги::constant_iterator для ключей.