因此,最近,AMD 在其新的 Navi GPU 系列中推出了名为 rDNA 的新 GPU 架构。在阅读了某些架构深度文章和视频后,我的理解是这样的(如果我错了,请随时纠正):
需要类似指令才能执行的小型工作负载称为“线程”。
然后调度程序将一堆需要相同指令的线程安排在一起。特别是在 AMD GPU 的情况下,GCN 和 rDNA 被设计为分别处理 64 和 32 个线程。
SIMD 然后处理那些集群线程。但不同的是,AMD GCN 使用 SIMD16,意味着一次可以处理 16 个线程,而 AMD rDNA 使用 SIMD32,意味着一次可以处理 32 个线程。
如果 GPU 需要执行所有 64 个线程,事情应该可以完美运行,但如果它只需要执行 1 个线程,那就太麻烦了。所以只有 1 个 SIMD16 矢量单元实际上在做一些富有成效的事情,而其他三个基本上只是令人不寒而栗。
架构的改变意味着,有了 SIMD32,GPU 可以消除潜在的瓶颈。
然而,这些消息来源中的每一个都在说“SIMD16 设计更适合计算工作负载”......这让我提出了一些问题:
1)SIMD32设计在SIMD16中不是在各个方面都更好吗?如果不是,那么 SIMD16 在计算工作中的优势到底是什么?
2)对于每64个线程,4个SIMD16是同时还是串行做处理工作?我问它的原因是来自Engadget的视频将这个过程描述为序列化,而来自Linus Tech Tips的视频似乎暗示它是并行的。这让我很困惑。
如果一切都是串行的,那么为什么 AMD 不只是选择 SIMD64 或其他东西?
如果一切都是平行的,那么老实说,我根本看不到 SIMD 的优势。在 GCN 上,你有 4 个 SIMD16,在 rDNA 上,你有 2 个 SIMD32。如果您使用 SIMD16 在 GCN 上处理 1 个线程,则运行 1 个 SIMD16 的时间应该等于运行 4 个 SIMD16 的时间,因为它们再次是并行的。跳转到 2 SIMD32,您处理 1 SIMD32 的时间应该等于您处理其中 2 个 SIMD32 的时间。在这两种情况下,您仍然可能有 63 个未使用的线程。那么有什么意义呢。
我知道我的理解在某些时候一定有缺陷,所以我希望得到一些深入的解释。谢谢。