意义,为什么它是重要的

问题描述:

CUDA编程指南指出意义,为什么它是重要的

“带宽是最重要的门控因素表现之一,几乎到代码的所有改变应该在的情况下进行它们如何影响带宽。“

它继续计算理论带宽,其数量级为每秒几百GB。我很遗憾,为什么一个人可以读/写全局内存的字节数反映了内核的优化程度。

如果我有一个内核对存储在共享内存和/或寄存器中的数据进行密集计算,只需要在开始时读取一次数据,并在最后从全局内存写出数据,当然有效带宽将是小,而内核本身可能非常有效。

在这种情况下,任何人都可以进一步解释带宽吗?

由于

大多数所有非平凡的计算内核,在CPU和GPU领域,内存边界。 GPU具有非常高的计算强度和吞吐量,但对主存储器的访问非常缓慢且具有高延迟,每个读/存储器只有几百个周期,而对于mmany算术运算则只有四个周期。

这听起来像你的内核是计算绑定,所以你的运气。但是,您仍然需要注意共享内存银行冲突,这可能会意外地对部分代码进行序列化。

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

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

查看Advanced CUDA C演示文稿以获取更多信息,包括有关如何将实现的性能与理论性能进行比较的一些技巧。 CUDA最佳实践Gude也有一些很好的信息,它可作为CUDA工具包的一部分(从NVIDIA site下载)。