2014-02-13 2 views
2

Возможно ли оставить возвращаемое значение тяги: уменьшить операцию в памяти, выделенной устройством? В случае, если это так же просто, как присвоение значения области cudaMalloc'ed, или я должен использовать thrust :: device_ptr?результат уменьшения тяги в памяти устройства

ответ

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; 
} 
+0

Хороший ответ, если вы действительно хотите использовать сокращение и вернуть результат в память устройства, вы можете либо использовать библиотеку cuda npp, либо самостоятельно создать сокращение, посмотрите на сокращение на примере cuda. – TripleS

3

Да, это должно быть возможно с помощью тяги :: reduce_by_key вместо с упорным :: кон stant_iterator для ключей.