2011-07-06 139 views
1

我可以发现,对于“全局”内存访问,线程所需的内存地址的合并(邻近)是最佳事务的关键,而在“共享”内存中,发出的地址没有冲突通过线程是关键。我理解得好吗?共享和全局内存访问

+0

是的。煤碳内存访问对于有效的全局内存访问至关重要,避免银行冲突对高效的共享内存访问非常重要。 –

回答

1

从NVIDIA CUDA编程指南:

为了最大限度地提高全局内存吞吐量,最大限度地 通过合并是非常重要的:

  • 继基于节最优化的访问模式G.3.2和G.4.2,
  • 使用符合 第5.3.2.1.1节中详述的大小和对齐要求的数据类型,
  • 在某些情况下填充数据,例如,在访问第5.3.2.1.2节中描述的二维 数组时。

这是关系到存储器的访问,其聚结“填充”为一个或多个交易中的翘曲的线程。对于计算能力2.x的设备,此问题已放宽。

另一方面,对于共享内存访问,您需要了解如何实现此内存。

为了实现高带宽,共享内存被分成大小相同的内存模块,称为bank,可以同时访问。

如果两个或多个线程访问同一个银行,则传输被序列化,也就是银行冲突。

附录G.计算能力有关于架构的更多信息。

问候!

+0

@BehzadX顺便说一句,您理解得很好;) – pQB

+0

感谢您的详细回复。 – BehzadX

+2

不要忘记将其标记为已接受的答案! – jmsu