【问题标题】:Is local memory slower than shared memory in CUDA?本地内存是否比 CUDA 中的共享内存慢?
【发布时间】:2011-11-06 15:37:04
【问题描述】:

我只发现了一个说法,本地内存比寄存器内存慢,每线程两个类型。

共享内存应该很快,但它是否比[线程的]本地内存快?

我想要做的是一种中值过滤器,但使用给定的百分位数而不是中值。因此,我需要获取列表中的大块,对它们进行排序,然后选择一个合适的。但是我无法开始对共享内存列表进行排序,否则会出错。仅复制到本地内存会损失很多性能吗?

【问题讨论】:

  • 这与编程无关,是吗?我也没有看到 Mathematica 标签的强链接。
  • @Sjoerd C. de Vries:在 CUDA 的上下文中,这是一个与编程相关的问题——架构具有非统一的内存空间,程序员必须明确选择应该使用哪些内存类型和访问方法在他或她编写的任何代码中使用。这是 CUDA 编程的基本原则。
  • @talonmies 我明白这一点,但这个问题仍然不是关于以编程方式选择内存、API 的差异、编程寄存器与编程共享内存等。它基本上是关于哪种内存类型更快。这是一个硬件问题。我觉得 OP 应该改写这个问题,例如他的问题是在 CUDA 中使用共享内存找到某个百分比的数据。
  • 嗯,我在mathematica 中通过其出色的cudalink 功能执行此操作,该功能可让您将cuda 直接写入mathmatica,这是一项非常常见的使用mathematica 的任务,但可以肯定。

标签: c cuda gpu gpu-shared-memory gpu-local-memory


【解决方案1】:

本地内存只是线程本地全局内存。它比寄存器或共享内存慢得多(在带宽和延迟方面)。它还消耗原本可用于全局内存事务的内存控制器带宽。溢出或故意使用本地内存对性能的影响可能从轻微到严重,具体取决于您使用的硬件以及本地内存的使用方式。

根据 Vasily Volkov 的研究 - 请参阅 Better performance at lower occupancy (pdf) - 共享内存和 Fermi GPU 上的寄存器之间的有效带宽差异约为 8 倍(共享内存约为 1000 Gb/s,8000 Gb/s 用于寄存器)。这在某种程度上与 CUDA 文档相矛盾,这意味着共享内存在速度上与寄存器相当。

【讨论】:

  • 是的,谢谢 talonmies,进一步详细说明我支持此信息的实验结果:在本地内存中处理我的问题确实慢了几个数量级。由于我的程序已经在每个块的硬件共享内存大小的限制下工作,我无法使用共享内存进行重新计算,所以我不得不使用一些不太智能的寄存器内存算法来查找我的百分位数,结果证明这非常快无论如何。
猜你喜欢
  • 2012-07-01
  • 1970-01-01
  • 2011-06-29
  • 2013-01-03
  • 1970-01-01
  • 2015-11-06
  • 2012-06-11
  • 2018-05-18
  • 2012-07-01
相关资源
最近更新 更多