问题描述
我下载了CUDA 6.0 RC,并在我的应用程序中使用cudaMalLocManaged测试了新的统一内存。但我发现这个内核变慢了。
使用cudaMalloc后跟cudaMemcpy比使用cudaMallocManaged(~0.63)更快(~0.56)。这是预期的吗?
其中一位website声称cudaMallocManged是为了"更快地对Cuda内核进行原型设计",所以我在想,从性能上看,哪个应用程序更好?
谢谢。
推荐答案
cudaMallocManaged()
不是关于加速您的应用程序(以下建议使用少数例外情况或边角情况)。
今天实施的统一内存和cudaMallocManaged
不会比熟练的CUDA程序员智能编写的代码更快来做同样的事情。机器(Cuda运行时)并不比您作为程序员更聪明。cudaMallocManaged
不会神奇地使PCIe总线或通用机器体系结构的限制消失。
快速原型是指编写代码所需的时间,而不是代码的速度。
cudaMallocManaged
熟练的Cuda程序员在以下情况下可能会感兴趣:
cudaMallocManaged
可能比简单或低效的零拷贝方法更快。
cudaMallocManaged
不熟练的CUDA程序员可能会感兴趣,因为它允许您沿着可能更简单的学习曲线接触CUDA。(但是,请注意,简单使用cudaMallocManaged
可能会导致CUDA内核运行速度慢于预期,请参阅here和here。)
虽然在评论中提到了Maxwell,但CUDA UM将在某些情况下为某些GPU提供Pascal代GPU的主要新功能。特别是,这些设置中的统一内存将不再局限于可用的GPU设备内存,即使在内核运行时,内存处理粒度也将下降到页级。您可以阅读有关它的更多信息here。