【问题标题】:Is "cudaMallocManaged" slower than "cudaMalloc"?“cudaMallocManaged”比“cudaMalloc”慢吗?
【发布时间】:2014-03-26 01:02:52
【问题描述】:

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

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

website 中的一个声称 cudaMallocManged 用于“更快的 cuda 内核原型设计”,所以我想知道在性能方面哪个应用程序更好?

谢谢。

【问题讨论】:

  • 如果主机内存被固定,是的,它应该比托管内存快。
  • 但我没有使用任何固定内存。
  • 如何分配主机内存?
  • 我复制了上面的内核调用部分和分配部分供参考。
  • 谢谢,但是如何分配主机内存(*.data)?

标签: cuda gpgpu nvidia hpc


【解决方案1】:

cudaMallocManaged()不是关于加快您的应用程序的(除了一些例外或极端情况,下面建议了一些)。

今天统一内存和cudaMallocManaged 的实现将不会比熟练的 CUDA 程序员编写的智能编写的代码更快来做同样的事情。机器(cuda 运行时)并不比程序员聪明。 cudaMallocManaged 不会神奇地使 PCIE 总线或一般机器架构限制消失。

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

cudaMallocManaged 在以下情况下可能会引起精通 cuda 程序员的兴趣:

  1. 您有兴趣快速组装原型 - 即你不在乎最后一盎司的表现。
  2. 您正在处理一个不常使用的复杂数据结构(例如双向链表),否则移植到 CUDA 会很麻烦(因为使用普通 CUDA 代码的深拷贝往往很麻烦)。它是您的应用程序运行所必需的,但不是性能路径的一部分。
  3. 您通常会使用零拷贝。在某些情况下,使用 cudaMallocManaged 可能比简单或低效的零拷贝方法更快。

cudaMallocManaged 可能会引起非精通 CUDA 程序员的兴趣,因为它允许您沿着可能更简单的学习曲线开始使用 CUDA。 (但是,请注意,幼稚地使用 cudaMallocManaged 可能会导致 CUDA 内核运行速度低于预期,请参阅 herehere。)

尽管 cmets 中提到了 Maxwell,但 CUDA UM 将在某些设置中为某些 GPU 提供 Pascal 一代 GPU 的主要新功能。特别是这些设置中的Unified Memory将不再局限于可用的GPU设备内存,即使在内核运行时内存处理粒度也会下降到页面级别。你可以阅读更多关于它的信息here

【讨论】:

  • 感谢您的详细回复。我想在我的情况下 cudamalloc 更适合。非常感谢....
  • 如果我没记错的话,Maxwell 架构应该为统一内存提供硬件支持,因此 cudaMallocManaged() 可以在该架构上提供更好的性能。
  • 我的陈述主要是为了反映统一记忆今天会做什么。可以合理地假设 UM 的未来发展将:1. 在 GPU 和主机上利用更新的硬件架构,以及 2. 进一步模糊界限在熟练的 CUDA 程序员可以或应该处理的事情与可以或应该留给机器(CUDA 运行时)完成的事情之间。
  • 同意 100%。因为你的回答没有提到麦克斯韦,所以只是做个笔记。
猜你喜欢
  • 1970-01-01
  • 2016-05-28
  • 2017-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多