我正在尝试将一些CPU代码移植到CUDA中。我的CUDA卡基于Fermi架构,因此我可以使用设备中的malloc()函数来动态分配内存,而不需要经常更改原始代码。 (在我的代码中多次调用malloc()函数。)我的问题是这个malloc函数是否足够高效,或者我们应该尽可能避免使用它。我没有在CUDA上运行我的代码加速,我怀疑这是由于使用malloc()函数引起的。
如果您有任何建议或意见,请与我们联系。感谢您的帮助。
答案 0 :(得分:4)
当前的设备malloc实现非常缓慢(已发表有关高效CUDA动态内存分配的论文,但该工作尚未出现在发布工具包AFAIK中)。它分配的内存来自堆,它是存储的全局内存,而且速度也很慢。除非你有非常令人信服的理由这样做,否则我建议避免在内核动态内存分配中使用。它会对整体表现产生负面影响。它是否实际上对您的代码产生了很大影响是一个完全独立的问题。