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

5
CUDA编程指南指出:“带宽是性能的最重要限制因素之一。几乎所有代码更改都应在考虑其如何影响带宽的情况下进行。” 它继续计算理论带宽,这是每秒数百GB的数量级。我不明白读/写全局内存的字节数量如何反映内核优化的效果。
如果我的内核在共享内存和/或寄存器中存储的数据上进行密集计算,并且只有一个读取开始时和从全局内存写出的结束,那么有效带宽肯定会很小,而内核本身可能非常高效。
请问有人能进一步解释一下这种情况下的带宽吗?
谢谢。
3个回答

4

大多数复杂的计算核心,无论是在CPU还是GPU领域,都是受限于内存的。

GPU具有非常高的计算强度和吞吐量,但是访问主内存非常缓慢且延迟高,每次读/写需要几百个周期,而许多算术操作只需要四个周期。

听起来你的核心是计算受限的,所以你很幸运。但是你仍然必须注意共享内存冲突,这可能会意外地串行化代码的某些部分。


1

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

查看Advanced CUDA C演示文稿以获取更多信息,包括一些比较实际性能与理论性能的技巧。CUDA最佳实践指南也提供了一些很好的信息,它作为CUDA工具包的一部分提供(从NVIDIA网站下载)。


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接