【发布时间】:2019-12-23 08:36:50
【问题描述】:
最近,AMD 在其新的 Navi GPU 系列中推出了名为 rDNA 的新 GPU 架构。在阅读了某些architecture deep-dive article和video之后,我的理解是这样的(如果我错了,请随时纠正):
需要类似指令才能执行的小型工作负载称为“线程”。
然后调度程序将一堆需要相同指令的线程安排在一起。特别是在 AMD GPU 的情况下,GCN 和 rDNA 被设计为分别处理 64 和 32 个线程。
然后 SIMD 处理这些集群线程。但不同的是,AMD GCN 使用 SIMD16,即一次可处理 16 个线程,而 AMD rDNA 使用 SIMD32,即一次可处理 32 个线程。
如果 GPU 有全部 64 个线程要执行,事情应该可以完美运行,但如果它只需要执行 1 个线程,那就太麻烦了。所以只有 1 个 SIMD16 Vector Unit 实际上在做一些富有成效的事情,而其他三个基本上只是令人不寒而栗。
架构的变化意味着,借助 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 个未使用的线程。那么这有什么意义呢。
我知道我的理解在某些时候一定是有缺陷的,所以我希望得到一些深入的解释。谢谢你。
【问题讨论】:
-
我认为更好的解释是“SIMD32 要求 32个'线程'组以同步执行相同的操作”,而 SIMD16 允许更精细的调度工作粒度到核心,或“分支”我不做很多 GPU 的东西,所以我可能会误解。
标签: parallel-processing gpu cpu-architecture simd amd-gcn