CUDA流压缩:理解概念

时间:2011-12-05 16:01:29

标签: algorithm cuda gpu thrust cudpp

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

现在“删除”究竟意味着什么?假设原始数组A并且长度为6.如果2个元素无效(无论我们提供什么条件)那么

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

  2. OR是否从内存中物理删除无效元素并缩小原始数组 低至4只保留有效元素?

  3. 对于任何一种情况,这是否意味着动态内存分配正在引擎盖下? 但我听说在CUDA世界中不可能进行动态内存分配。

1 个答案:

答案 0 :(得分:4)

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

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