Возможно ли оставить возвращаемое значение тяги: уменьшить операцию в памяти, выделенной устройством? В случае, если это так же просто, как присвоение значения области cudaMalloc'ed, или я должен использовать thrust :: device_ptr?результат уменьшения тяги в памяти устройства
2
A
ответ
3
Возможно ли оставить возвращаемое значение тяги :: уменьшить операцию в памяти, выделенной устройством?
Короткий ответ - нет.
thrust reduce возвращает количество, результат сокращения. Это quantity must be deposited in a host resident variable:
Возьмите, например, уменьшить, который является синхронным и всегда возвращает результат в CPU:
template<typename Iterator, typename T>
T reduce(Iterator first, Iterator last, T init);
После того, как результат операции был возвращен к CPU, вы может скопировать его в ГПУ, если вам нравится:
#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;
}
3
Да, это должно быть возможно с помощью тяги :: reduce_by_key вместо с упорным :: кон stant_iterator для ключей.
Хороший ответ, если вы действительно хотите использовать сокращение и вернуть результат в память устройства, вы можете либо использовать библиотеку cuda npp, либо самостоятельно создать сокращение, посмотрите на сокращение на примере cuda. – TripleS