cuda - 一个小小的 CUDA 难题

标签 cuda

我有数组 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/

相关文章:

cuda - 将 cuda 数组传递给 Thrust::inclusive_scan

c - 使用 CUBLAS 批量 QR 分解

memory - 两个进程可以共享相同的 GPU 内存吗? (CUDA)

cuda - 如何将 Thrust::host_vector<char> 复制到 char*

cuda - atomicAdd()用于在GPU上加倍

nvidia - Cuda 内核代码驻留在 nvidia GPU 上的什么位置?

c++ - 为什么cuda内核可以访问主机内存?

c++ - 修改 CUDA 和 cpp Makefile

CUDA代码问题

multithreading - 如何管理来自多个 CPU 线程的相同 CUDA 内核调用?