从版本285开始,NVIDIA驱动程序中的cudaMalloc速度急剧下降。

4
在最近几年中,我们在许多64位项目中使用CUDA处理时间关键任务。几天前,我更新了我的开发系统上的Nvidia驱动程序,结果发现与CUDA相关的算法出现了灾难性的减速。经过一番调查,发现多次顺序调用cudaMalloc会导致延迟增加(每次调用都会增加)。
void *p[65000];
for (int n = 0; 65000 > n; n++)
   cudaMalloc(&p[n], 256);

这段代码在Nvidia驱动版本285之前运行大约4秒,但是自从驱动版本285后,执行这段代码需要超过8分钟(慢了120倍)。测试结果基于不同的x64系统,包括GeForce GTX 560Ti、GeForce GTX 460和Quadro FX4600。问题在于:这是新驱动程序的一个错误吗?还是一种尝试通过更复杂的分配方式处理内存碎片化和改进CUDA中的内存管理的方法?或者是其他原因导致的?更新:我已向Nvidia报告了这个问题,并收到回复说他们能够重现它并对其进行了调查。

我认为这是由于更智能(更高开销)的内存管理。 - Anycorn
@Anycorn 如果是这样就太好了...但是降低了120倍...好意铺成地狱之路?=)) - listar
1
你可以将内存分配为连续的字节吗?对于小块,我倾向于这样做。 - Anycorn
3
请提交一个错误报告,并提供能复现问题的代码,我们的QA团队将进行调查。 - harrism
@Listar,你知道这个错误是否已经被修复了吗?我们正在运行的当前版本显示了你描述的相同行为,我想知道是否可以通过升级到更近期的Cuda/Drivers版本来解决这个问题... - JorenHeit
显示剩余8条评论
1个回答

3
我根据原帖中的错误报告进行了追踪。结果发现这是一个已知的问题,已经报告并且在CUDA 5.0中已经修复。如果您下载CUDA 5.0 Release Candidate或更高版本,您应该会看到改进。

编辑:修复将包含在CUDA 5 RC中,而不是预览版中。因此,在此编辑(2012年5月31日)之前,修复程序尚未可用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接