我有以下代码:
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
答案 0 :(得分:0)
我犯了一个可怕的错误!我没有正确计算我的代码,因此,我认为延迟是由于减少部分,而我之前执行的转换是罪魁祸首。