CUDA中Malloc函数的效率

xhe*_*he8 5 malloc cuda

我正在尝试将一些 CPU 代码移植到 CUDA 中。我的CUDA卡是基于Fermi架构的,因此我可以使用设备中的malloc()函数来动态分配内存,而不需要对原始代码进行大量更改。(我的代码中多次调用了 malloc() 函数。)我的问题是这个 malloc 函数是否足够高效,或者如果可能的话我们应该避免使用它。我在 CUDA 上运行代码时没有得到太多加速,我怀疑这是由于使用 malloc() 函数引起的。

如果您有任何建议或意见,请告诉我。我感谢您的帮助。

tal*_*ies 5

当前的设备 malloc 实现非常慢(已经发表了有关高效 CUDA 动态内存分配的论文,但该工作尚未出现在发布工具包中,AFAIK)。它分配的内存来自堆,堆里存放的是全局内存,而且速度也很慢。除非您有非常令人信服的理由这样做,否则我建议避免在内核中进行动态内存分配。这将对整体性能产生负面影响。它是否真的对您的代码有很大影响是一个完全独立的问题。

  • 本文所依据的论文可在[此处](https://www.ideals.illinois.edu/handle/2142/16137)获取。 (5认同)