"cudaMallocManaged"比"cudaMalloc"慢吗?

Gen*_*tek 5 cuda hpc gpgpu nvidia

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

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

其中一个网站声称cudaMallocManged用于"更快的cuda内核原型",所以我想知道哪个应用程序在性能方面更好?

谢谢.

Rob*_*lla 25

cudaMallocManaged()不是关于加快您的应用程序(也有少数例外或角的情况下,一些在下面的建议).

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

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

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

  1. 你有兴趣快速获得一个原型 - 你不关心最后一盎司的性能.
  2. 您正在处理一个不经常使用的复杂数据结构(例如双链表),否则这将是移植到CUDA的繁琐工作(因为使用普通CUDA代码的深拷贝往往是一件苦差事).您的应用程序必须工作,但不是性能路径的一部分.
  3. 你通常会使用零拷贝.可能存在使用cudaMallocManaged可能比天真或低效的零拷贝方法更快的情况.

cudaMallocManaged可能对非熟练的 CUDA程序员感兴趣,因为它允许你沿着可能更简单的学习曲线弄清楚CUDA.

虽然评论中提到了Maxwell,但CUDA UM将在一些设置中为某些GPU提供Pascal生成的GPU的主要新功能.特别是,这些设置中的统一内存将不再局限于可用的GPU设备内存,即使内核正在运行,内存处理粒度也将降至页面级别.你可以在这里阅读更多相关信息.