4

近年来,我们在许多 64 位项目中将 CUDA 用于时间关键型任务。几天前,我更新了我的开发系统上的 nvidia 驱动程序,发现与 CUDA 相关的算法出现了灾难性的减速。经过一番挖掘,很明显 cudaMalloc 的许多连续调用会导致延迟增加(每次下一个调用):

void *p[65000];
for (int n = 0; 65000 > n; n++)
   cudaMalloc(&p[n], 256);

此代码在最高版本 285 的 nvidia 驱动程序上运行大约 4 秒,但从驱动程序版本 285 开始执行此代码需要 8 分钟以上(慢 120 倍)。在不同 x64 系统上的 GeForce GTX 560Ti、GeForce GTX 460 和 Quadro FX4600 上进行了测试。

好吧,问题是:这是新驱动程序的错误吗?或者,也许是某种尝试处理碎片和改进 CUDA 中的内存管理(通过更复杂的分配)?或者是其他东西?

更新:我已经向 nvidia 报告了这个问题,并得到答复,他们能够重现它并已将其分配给调查。

4

1 回答 1

3

我根据 OP 的错误报告对此进行了跟踪。原来这是一个已经报告的已知问题,并且已在 CUDA 5.0 中修复。如果您下载 CUDA 5.0预览版(可供注册的 CUDA 开发人员使用)Release Candidate 或更高版本,您应该会看到改进。

编辑:修复将在 CUDA 5 RC 中,而不是在预览中。因此,截至本次编辑(2012 年 5 月 31 日),该修复程序尚不可用。

于 2012-05-30T00:23:07.507 回答