【问题标题】:Meaning of bandwidth in CUDA and why it is importantCUDA 中带宽的含义及其重要性
【发布时间】:2011-01-23 18:59:56
【问题描述】:
CUDA 编程指南指出
“带宽是影响性能的最重要的控制因素之一。几乎所有对代码的更改都应该在它们如何影响带宽的情况下进行。”
它继续计算大约每秒数百 GB 的理论带宽。我不知道为什么一个可以读取/写入全局内存的字节数反映了内核的优化程度。
如果我有一个内核,它对存储在共享内存和/或寄存器中的数据进行密集计算,在开始时只有一次读取,最后从全局内存中写入,那么有效带宽肯定会很小,而内核本身可能非常高效。
谁能在这种情况下进一步解释带宽?
谢谢
【问题讨论】:
标签:
optimization
memory
cuda
bandwidth
【解决方案1】:
大多数内核都受内存限制,因此最大化内存吞吐量至关重要。如果你有幸拥有一个计算绑定内核,那么优化计算通常会更容易。您确实需要注意分歧,并且仍应确保有足够的线程来隐藏内存延迟。
查看Advanced CUDA C 演示文稿以获取更多信息,包括一些关于如何将您的实际表现与理论表现进行比较的提示。 CUDA 最佳实践指南也有一些很好的信息,它作为 CUDA 工具包的一部分提供(从NVIDIA site 下载)。
【解决方案2】:
大多数非平凡的计算内核,在 CPU 和 GPU 领域,内存受限。
GPU 具有非常高的计算强度和吞吐量,但对主内存的访问速度非常慢并且延迟很高,每次读取/存储几百个周期,而许多算术运算需要四个周期。
听起来你的内核受计算限制,所以你的运气。但是,您仍然需要注意共享内存库冲突,这可能会意外地序列化部分代码。
【解决方案3】:
通常,内核相当小且简单,并且对大量数据执行相同的操作。您可能会按顺序调用一堆内核来执行一些更复杂的操作(将其视为处理管道)。显然,您的管道的吞吐量将取决于您的内核的效率以及您是否受到内存带宽的任何限制。