从版本 285 开始,nvidia 驱动程序中 cudaMalloc 的灾难性减速

Posted

技术标签:

【中文标题】从版本 285 开始,nvidia 驱动程序中 cudaMalloc 的灾难性减速【英文标题】:a disastrous slowdown of cudaMalloc in nvidia drivers from version 285 【发布时间】:2012-05-06 10:14:34 【问题描述】:

近年来,我们在许多 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 报告了这个问题,并得到答复,他们能够重现它并已将其分配给调查。

【问题讨论】:

我认为这是由于更智能(更多开销)的内存管理。 @Anycorn 如果是这样的话很好......但是会降级 120 倍......通往地狱的道路是用善意铺成的? =)) 你可以分配内存吗?字节?我倾向于对小块这样做。 这不应该是给 NVIDIA 的错误报告而不是 Stack Overflow 问题吗? 请提交错误报告并提供重现问题的代码,我们的 QA 团队将进行调查。 【参考方案1】:

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

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

【讨论】:

以上是关于从版本 285 开始,nvidia 驱动程序中 cudaMalloc 的灾难性减速的主要内容,如果未能解决你的问题,请参考以下文章

哪个 CUDA Toolkit 版本适用于较旧的 NVIDIA 驱动程序

Linux下 NVIDIA显卡驱动 + CUDA + Anaconda 安装配置全流程(记录深度学习服务器环境从零开始搭建)

Ubuntu18.04安装 NVIDIA驱动

如何安装NVIDIA GeForce GT 720M 显卡驱动

Ubuntu16.04安装Nvidia驱动cuda,cudnn和tensorflow-gpu

Ubuntu16.04安装Nvidia驱动cuda,cudnn和tensorflow-gpu