CudaMalLocManaged"比&cudaMalloc"慢吗?

人气:1,064 发布:2022-10-16 标签: nvidia cuda gpgpu hpc

问题描述

我下载了CUDA 6.0 RC,并在我的应用程序中使用cudaMalLocManaged测试了新的统一内存。但我发现这个内核变慢了。

使用cudaMalloc后跟cudaMemcpy比使用cudaMallocManaged(~0.63)更快(~0.56)。这是预期的吗?

其中一位website声称cudaMallocManged是为了"更快地对Cuda内核进行原型设计",所以我在想,从性能上看,哪个应用程序更好?

谢谢。

推荐答案

cudaMallocManaged()不是关于加速您的应用程序(以下建议使用少数例外情况或边角情况)。

今天实施的统一内存和cudaMallocManaged不会比熟练的CUDA程序员智能编写的代码更快来做同样的事情。机器(Cuda运行时)并不比您作为程序员更聪明。cudaMallocManaged不会神奇地使PCIe总线或通用机器体系结构的限制消失。

快速原型是指编写代码所需的时间,而不是代码的速度。

cudaMallocManaged熟练的Cuda程序员在以下情况下可能会感兴趣:

您感兴趣的是快速获得原型--即你不在乎最后一分钱的表现。 您正在处理的是一个很少使用的复杂数据结构(例如,双向链表),否则移植到CUDA将是一件苦差事(因为使用普通CUDA代码的深层副本往往是一件苦差事)。这是您的应用程序工作所必需的,但不是性能路径的一部分。 您通常会使用零复制。在某些情况下,使用cudaMallocManaged可能比简单或低效的零拷贝方法更快。

cudaMallocManaged不熟练的CUDA程序员可能会感兴趣,因为它允许您沿着可能更简单的学习曲线接触CUDA。(但是,请注意,简单使用cudaMallocManaged可能会导致CUDA内核运行速度慢于预期,请参阅here和here。)

虽然在评论中提到了Maxwell,但CUDA UM将在某些情况下为某些GPU提供Pascal代GPU的主要新功能。特别是,这些设置中的统一内存将不再局限于可用的GPU设备内存,即使在内核运行时,内存处理粒度也将下降到页级。您可以阅读有关它的更多信息here。

645