一个小小的CUDA难题

Ade*_*ick 4 cuda

我有数组A[0...N]double和阵列B[0...N]int.每个B[i]变化都有[0...P].我只需要计算数组C[0...P]:

C[j] = SUM( A[i] : B[i] = j)
Run Code Online (Sandbox Code Playgroud)

据我所知,我不能使用N具有atomicAdd()函数的线程,因为它不支持double.使用P线程的直接实现非常不同.有没有更好的办法?

tal*_*ies 5

如果我理解正确,你试图A通过保持的整数键对双精度数组求和B.该推力模板库包含reduce_by_key进行此项操作.的总和的行例子展示了如何使用reduce_by_key用于类似的应用,尽管它使用计数迭代生成密钥而不是使用用户提供的密钥矢量.根据您的需要修改它应该是微不足道的.