推力降低结果在设备存储器上

时间:2014-02-13 17:34:20

标签: cuda reduce thrust

是否可以在设备分配的内存中保留thrust :: reduce操作的返回值?如果它是,它是否像将值分配给cudaMalloc的区域一样容易,或者我应该使用thrust :: device_ptr?

2 个答案:

答案 0 :(得分:4)

  

是否可以在设备分配的内存中保留thrust :: reduce操作的返回值?

简短的回答是否定的。

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,您可以根据需要将其复制到GPU:

#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

答案 1 :(得分:4)

是的,应该可以使用thrust :: reduce_by_key而不是为keys提供的thrust :: constant_iterator。