我下载了CUDA 6.0 RC,并在应用程序中使用“cudaMallocManaged”测试了新的统一内存。但是,我发现该内核的运行速度变慢了。
与cudaMallocManaged(〜0.63)相比,使用cudaMalloc和cudaMemcpy更快(〜0.56)。
website之一声称cudaMallocManged是为了“更快地创建cuda内核原型(prototype)”,所以我想知道从性能角度来看,哪个应用程序是更好的选择?
谢谢。
最佳答案
cudaMallocManaged()
并不是要加快您的应用程序的速度(有一些异常(exception)情况或特殊情况,下面建议一些异常(exception)情况)。
如今,统一内存和cudaMallocManaged
的实现不会比熟练的CUDA程序员以智能方式编写的代码更快。机器(CUDA运行时)并不比您作为程序员聪明。 cudaMallocManaged
不会神奇地使PCIE总线或通用计算机体系结构限制消失。
快速原型(prototype)指的是您编写代码所花费的时间,而不是代码的速度。
在以下情况下,熟练的cuda程序员可能会对cudaMallocManaged
感兴趣:
cudaMallocManaged
可能比幼稚或效率低下的零复制方法更快。 不熟练的CUDA程序员可能会对
cudaMallocManaged
感兴趣,因为它使您可以沿着可能更简单的学习曲线与CUDA接触。 (但是,请注意cudaMallocManaged
的天真使用可能会导致CUDA内核的运行速度比预期的慢,请参阅here和here。)尽管在评论中提到了Maxwell,但CUDA UM将在某些设置中为某些GPU提供Pascal一代GPU的主要新功能。特别是,这些设置中的统一内存将不再仅限于可用的GPU设备内存,并且即使内核正在运行,内存处理粒度也将降至页面级别。您可以阅读有关它的更多信息here。
关于cuda - "cudaMallocManaged"是否比 "cudaMalloc"慢?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21986542/