推力:reduce_by_key比预期慢

时间:2015-02-22 15:22:05

标签: performance cuda parallel-processing gpgpu thrust

我有以下代码:

   thrust::device_vector<int> unique_idxs(N);
   thrust::device_vector<int> sizes(N);
   thrust::pair<thrust::device_vector<int>::iterator, thrust::device_vector<int>::iterator> new_end = reduce_by_key(idxs.begin(), idxs.end(),thrust::make_constant_iterator(1),unique_idxs.begin(),sizes.begin());        
   int unique_elems=new_end.first-unique_idxs.begin();
   sizes.erase(new_end.second, sizes.end());

其中idxs是索引的有序设备向量,unique_idxs是唯一索引,sizes是每个索引的频率。

计划我的程序我发现与其他处理相同或更多数据的操作相比,此操作需要很长时间......有没有办法加快它的速度?

事实上,当idxs的大小超过500k元素时,此部分也会导致NVIDIA内核模式崩溃。

修改

我发现了关于Thrust的这个演示文稿,我认为我正在完成它在第38页所描述的内容,它应该在毫秒内运行,即使是10M点也是如此。我正在演示中在GTX 480上测试我的代码。 http://thrust.googlecode.com/files/GTC%202010%20%28Part%202%29%20-%20Thrust%20By%20Example.pdf

1 个答案:

答案 0 :(得分:0)

我犯了一个可怕的错误!我没有正确计算我的代码,因此,我认为延迟是由于减少部分,而我之前执行的转换是罪魁祸首。