在最近几年中,我们在许多64位项目中使用CUDA处理时间关键任务。几天前,我更新了我的开发系统上的Nvidia驱动程序,结果发现与CUDA相关的算法出现了灾难性的减速。经过一番调查,发现多次顺序调用cudaMalloc会导致延迟增加(每次调用都会增加)。
这段代码在Nvidia驱动版本285之前运行大约4秒,但是自从驱动版本285后,执行这段代码需要超过8分钟(慢了120倍)。测试结果基于不同的x64系统,包括GeForce GTX 560Ti、GeForce GTX 460和Quadro FX4600。问题在于:这是新驱动程序的一个错误吗?还是一种尝试通过更复杂的分配方式处理内存碎片化和改进CUDA中的内存管理的方法?或者是其他原因导致的?更新:我已向Nvidia报告了这个问题,并收到回复说他们能够重现它并对其进行了调查。
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报告了这个问题,并收到回复说他们能够重现它并对其进行了调查。