“cudaMallocManaged”比“cudaMalloc”慢吗?
Posted
技术标签:
【中文标题】“cudaMallocManaged”比“cudaMalloc”慢吗?【英文标题】:Is "cudaMallocManaged" slower than "cudaMalloc"? 【发布时间】:2014-03-26 01:02:52 【问题描述】:我下载了 CUDA 6.0 RC 并在我的应用程序中使用“cudaMallocManaged”测试了新的统一内存。但是,我发现这个内核变慢了。
与 cudaMallocManaged (~0.63) 相比,使用 cudaMalloc 后跟 cudaMemcpy 更快 (~0.56)。这是预期的吗?
website 中的一个声称 cudaMallocManged 用于“更快的 cuda 内核原型设计”,所以我想知道在性能方面哪个应用程序更好?
谢谢。
【问题讨论】:
如果主机内存被固定,是的,它应该比托管内存快。 但我没有使用任何固定内存。 如何分配主机内存? 我复制了上面的内核调用部分和分配部分供参考。 谢谢,但是如何分配主机内存(*.data
)?
【参考方案1】:
cudaMallocManaged()
不是关于加快您的应用程序的(除了一些例外或极端情况,下面建议了一些)。
今天统一内存和cudaMallocManaged
的实现将不会比熟练的 CUDA 程序员编写的智能编写的代码更快来做同样的事情。机器(cuda 运行时)并不比程序员聪明。 cudaMallocManaged
不会神奇地使 PCIE 总线或一般机器架构限制消失。
快速原型是指您编写代码所花费的时间,而不是代码的速度。
cudaMallocManaged
在以下情况下可能会引起精通 cuda 程序员的兴趣:
-
您有兴趣快速组装原型 - 即你不在乎最后一盎司的表现。
您正在处理一个不常使用的复杂数据结构(例如双向链表),否则移植到 CUDA 会很麻烦(因为使用普通 CUDA 代码的深拷贝往往很麻烦)。它是您的应用程序运行所必需的,但不是性能路径的一部分。
您通常会使用零拷贝。在某些情况下,使用
cudaMallocManaged
可能比简单或低效的零拷贝方法更快。
cudaMallocManaged
可能会引起非精通 CUDA 程序员的兴趣,因为它允许您沿着可能更简单的学习曲线开始使用 CUDA。 (但是,请注意,幼稚地使用 cudaMallocManaged
可能会导致 CUDA 内核运行速度低于预期,请参阅 here 和 here。)
尽管 cmets 中提到了 Maxwell,但 CUDA UM 将在某些设置中为某些 GPU 提供 Pascal 一代 GPU 的主要新功能。特别是这些设置中的Unified Memory将不再局限于可用的GPU设备内存,即使在内核运行时内存处理粒度也会下降到页面级别。你可以阅读更多关于它的信息here。
【讨论】:
感谢您的详细回复。我想在我的情况下 cudamalloc 更适合。非常感谢.... 如果我没记错的话,Maxwell 架构应该为统一内存提供硬件支持,因此cudaMallocManaged()
可以在该架构上提供更好的性能。
我的陈述主要是为了反映统一记忆今天会做什么。可以合理地假设 UM 的未来发展将:1. 在 GPU 和主机上利用更新的硬件架构,以及 2. 进一步模糊界限在熟练的 CUDA 程序员可以或应该处理的事情与可以或应该留给机器(CUDA 运行时)完成的事情之间。
同意 100%。因为你的回答没有提到麦克斯韦,所以只是做个笔记。以上是关于“cudaMallocManaged”比“cudaMalloc”慢吗?的主要内容,如果未能解决你的问题,请参考以下文章