我有数组 A[0...N]
的 double
和数组 B[0...N]
的 int
.每B[i]
变化在 [0...P]
.我只需要计算数组 C[0...P]
:
C[j] = SUM( A[i] : B[i] = j)
我不能用
N
线程与 atomicAdd()
功能,因为它不支持 double
, 据我所知。使用 P
的简单实现线程是高度发散的。有没有更好的办法?
最佳答案
如果我理解正确,您正在尝试对 double 数组进行求和减少 A
通过 B
中保存的整数键. Thrust模板库包含 reduce_by_key为此操作。 sum rows示例展示了如何将 reduce_by_key 用于类似的应用程序,尽管它使用计数迭代器来生成 key ,而不是使用用户提供的 key 向量。根据您的需要修改它应该是微不足道的。
关于cuda - 一个小小的 CUDA 难题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7900395/