algorithm - CUDA 流压缩 : understanding the concept

标签 algorithm cuda gpu thrust cudpp

我正在使用 CUDA/Thrust/CUDPP。据我了解,在 Stream 压缩中,数组中的某些项目被标记为无效,然后被“删除”。

现在“移除”在这里的真正含义是什么?假设原始数组 A 的长度为 6。如果 2 个元素无效(无论我们提供什么条件),则

  1. 系统是否在 GPU 内存中创建一个大小为 4 的数组来存储有效元素以获得最终结果?

  2. 或者它是否从内存中物理移除无效元素并缩小原始数组 缩小到 4 号只保留有效元素?

对于这两种情况,这是否意味着动态内存分配是在后台进行的? 但我听说在 CUDA 世界中动态内存分配是不可能的。

最佳答案

首先,在 Compute Capability 2.0 和更高版本的设备上,CUDA 中可以进行动态内存分配。 CUDA 运行时库支持 __device__ 函数中的 malloc/free 和 new/delete。但这与答案无关,真的。

通常提供足够大的输出数组(预先分配,通常与输入数组大小相同)并将输出写入其中。不需要动态分配,但可能存在存储浪费。这就是 CUDPP 和推力所做的。另一种方法是先对有效元素进行计数,然后使用从主机 CPU 调用的 cudaMalloc 动态分配输出 GPU 内存。

关于algorithm - CUDA 流压缩 : understanding the concept,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8388125/

相关文章:

algorithm - 线组之间的距离

algorithm - 在跳过列表中查找第 k 个元素 - 需要解释

c++ - 在AVX2中有效实现log2(__ m256d)

cuda - 是否可以一次包含所有 Thrust header ?

c++ - 使用 Nvidia 的 Thrust 库规范化一堆 vector

time - cudamemcpy 设备->主机时间在迭代之间发生变化

algorithm - 在不考虑词序的情况下执行模糊匹配的良好度量

GTX 590 上的 CUDA Parallel Nsight 本地调试

c - 如何在内核中动态分配数组?

algorithm - GPU 上的高效全对集交集