Optimization CUDA中带宽的含义及其重要性

Optimization CUDA中带宽的含义及其重要性,optimization,memory,cuda,bandwidth,Optimization,Memory,Cuda,Bandwidth,CUDA编程指南指出: “带宽是影响性能的最重要的门控因素之一。对代码的几乎所有更改都应根据它们对带宽的影响程度进行。” 它接着计算出理论上的带宽,即每秒数百千兆字节。我不明白为什么一个人可以读/写到全局内存的字节数反映了内核的优化程度 如果我有一个内核,它对存储在共享内存和/或寄存器中的数据进行密集计算,在开始时只有一次从全局内存读取,在结束时从全局内存写入,那么有效带宽肯定会很小,而内核本身可能非常高效 有人能在这方面进一步解释带宽吗 感谢通常,内核非常小且简单,并且对大量数据执行相同的操作

CUDA编程指南指出:

“带宽是影响性能的最重要的门控因素之一。对代码的几乎所有更改都应根据它们对带宽的影响程度进行。”

它接着计算出理论上的带宽,即每秒数百千兆字节。我不明白为什么一个人可以读/写到全局内存的字节数反映了内核的优化程度

如果我有一个内核,它对存储在共享内存和/或寄存器中的数据进行密集计算,在开始时只有一次从全局内存读取,在结束时从全局内存写入,那么有效带宽肯定会很小,而内核本身可能非常高效

有人能在这方面进一步解释带宽吗


感谢

通常,内核非常小且简单,并且对大量数据执行相同的操作。您可能有一堆内核,您可以按顺序调用这些内核来执行一些更复杂的操作(将其视为一个处理管道)。显然,流水线的吞吐量将取决于内核的效率,以及您是否受到内存带宽的任何限制。

大多数非平凡的计算内核,在CPU和GPU领域,内存受限。 GPU具有非常高的计算强度和吞吐量,但对主存的访问速度非常慢,并且具有很高的延迟,每个读取/存储只有几百个周期,而大多数算术运算只有四个周期


听起来您的内核是受计算限制的,所以祝您好运。但是,您仍然必须注意共享内存库冲突,这可能会意外地序列化部分代码。

大多数内核都是内存受限的,因此最大化内存吞吐量至关重要。如果您有幸拥有一个计算绑定内核,那么为计算进行优化通常会更容易。您确实需要注意差异,并且仍然应该确保有足够的线程来隐藏内存延迟

查看演示文稿了解更多信息,包括如何将您的实际绩效与理论绩效进行比较的一些提示。CUDA最佳实践Gude也有一些很好的信息,可以作为CUDA工具包的一部分(从下载)