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