5

如果i是像下面这样的随机游走(每个索引不是唯一的),并且有一个A用零填充的设备向量。

{0, 1, 0, 2, 3, 3,  ....}

是否有可能推力可以A[i]自动增加,操作后A可能看起来像

//2 means appears count of 0's
//1 means appears count of 1's
//1 means appears count of 2's
//2 means appears count of 3's
{2, 1, 1, 2}

我尝试了几种情况,但是这些情况只有在A宿主向量时才能正常工作,我猜是因为推力是并行的,所以以前的结果不会影响新的,结果可能看起来像 //only count once no无论索引出现多少次 {1, 1, 1, 1}

推力可以通过设备向量 A 和随机游走索引向量实现我的目标吗?

4

1 回答 1

3

如果您正在通过 Thrust 寻求直方图计算,那么您可能希望注意有一个Thrust 文档示例提供了两种不同的算法:

  1. 密集直方图sort用于对数组进行排序,然后upper_bound用于确定累积直方图,最后adjacent_difference用于计算直方图;
  2. 稀疏直方图sort用于对数组进行排序,然后reduce_by_key,正如@Eric 在他的评论中提到的那样。

从这两个线程

我想说,以上是使用 Thrust 实现直方图的仅有的两种方法。我已经对 Kepler K20c 卡上的两种方法进行了计时,这些都是计时:

  • N=1024*16; # bins= 16*16; 密集 = 2.0ms; 稀疏 = 2.4ms;
  • N=1024*128; # bins= 16*128; 密集 = 3.4ms; 稀疏 = 3.1ms;

考虑到时间确实取决于输入数组这一事实,我想说结果似乎并没有太大的不同。

需要注意的是,CUDA 样本提供了一个直方图计算示例,但它针对64or 256bins 进行了优化,因此与上述推力代码不齐。

于 2014-03-21T18:49:39.937 回答