5

CUDA 编程指南指出

“带宽是影响性能的最重要的门控因素之一。几乎所有对代码的更改都应该在它们如何影响带宽的背景下进行。”

它继续计算每秒数百 GB 的理论带宽。我不知道为什么一个可以读取/写入全局内存的字节数反映了内核的优化程度。

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

有人可以在这种情况下进一步解释带宽吗?

谢谢

4

3 回答 3

4

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

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

于 2010-03-04T19:47:11.990 回答
1

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

查看高级 CUDA C演示文稿以获取更多信息,包括一些关于如何将您的实际性能与理论性能进行比较的提示。CUDA 最佳实践指南也有一些很好的信息,它作为 CUDA 工具包的一部分提供(从NVIDIA 网站下载)。

于 2010-03-05T08:25:22.950 回答
0

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

于 2010-03-04T17:52:06.970 回答