2011-09-19 122 views
4

我试图将一些CPU代码移植到CUDA中。我的CUDA卡基于Fermi架构,因此我可以在设备中使用malloc()函数来动态分配内存,并且不需要更改很多原始代码。 (malloc()函数在我的代码中多次调用。)我的问题是这个malloc函数是否足够高效,或者我们应该避免在可能的情况下使用它。我在CUDA上运行我的代码的速度并不快,我怀疑这是由使用malloc()函数引起的。CUDA中Malloc函数的效率

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

回答

4

当前的设备malloc实现非常缓慢(已经有关于高效的CUDA动态内存分配的论文发表,但该工作尚未出现在发布工具包AFAIK中)。它分配的内存来自堆,它存储在全局内存中,而且它也很慢。除非你有一个非常有说服力的理由,否则我会建议避免在内核动态内存分配中。这会对整体表现产生负面影响。无论它对实际上有多大影响,您的代码是一个完全独立的问题。

+0

谢谢你的回答。你能指出我的文章链接吗? – xhe8

+5

该论文所依据的论文可以在这里找到(https://www.ideals.illinois.edu/handle/2142/16137)。 – talonmies