【问题标题】:SIMD-16 and SIMD-32 advantage/disadvantage?SIMD-16 和 SIMD-32 的优势/劣势?
【发布时间】:2019-12-23 08:36:50
【问题描述】:

最近,AMD 在其新的 Navi GPU 系列中推出了名为 rDNA 的新 GPU 架构。在阅读了某些architecture deep-dive articlevideo之后,我的理解是这样的(如果我错了,请随时纠正):

  • 需要类似指令才能执行的小型工作负载称为“线程”。

  • 然后调度程序将一堆需要相同指令的线程安排在一起。特别是在 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


【解决方案1】:

只是一个长评论。

在 gcn 中,每 4 个向量(16 个长度)只有 1 个标量单元。但在 rdna 中,每 1 个向量(32 个长度)有 2 个标量单元。对于对标量单元加压的复杂算法,这一定是一个重要的优势。那个标量单位是更新的不是吗?因此,这是一个很好的单线程问题解决方案,而不是期望开发人员提供完全优化的计算工作负载。现在树遍历可以更好吗?

在gcn中,每个16wide向量在一个周期内发布,整个gcn在4个周期内发布。每 64 个流水线 4 个周期。但在 rdna 中,它是每 32 个管道 1 个周期,因此它是并行的。这再次意味着,对于一些延迟问题来说,这是非常好的优势。当 2 个单元一起工作时,它仍然是每 64 个流水线 1 个周期,因为它们是独立的两个 32 宽向量。

到目前为止,我们有 4 倍的“问题”性能噱头和 8 倍“标量”工作负载的噱头。

进入线程级并行性,无论是否具有上述优势,它都比 gcn 更快地完成相同的波前。这减少了套准压力。较小的套准压力可以为更多线程在飞行中留出空间。与 gcn 的 256 个线程相比,每个向量有 1024 个寄存器,这进一步提高了这一点。每个通道更多的线程,更快的通道,更好的缓存系统等,它变得更快更高效。

架构的可扩展性必须使它们停止在 32 通道而不是 64 128 等或更小,如 16 8 4。也许拥有 64 宽向量无法从缓存中获得足够的带宽?我不知道。但是有晶体管预算。你会在哪里裁剪,以获得更广泛的 simd?缓存意味着更少或更慢的缓存和更少或更慢的每个管道的缓存。我也不会裁剪标量单位。也许纹理单元和rops,但游戏玩家也会购买它。市场渗透率。

他们似乎很好地发挥了线程级并行性,他们可能不需要在同一个向量上添加更多的物理线程。两个向量上的 80 个波前(当它们一起工作时)对于 tlp 来说已经很棒了,因此,现在 ilp 上的更多问题将不再是问题。在同一区域制作 16 或 8 个宽向量需要每个管道有 160 个线程在运行。每个管道是否有 160 个独特的操作?我不知道。甚至 80 种独特的操作对我来说都显得太过分了。就像同时使用 rdna 的所有数学和记忆功能一样。只是猜测。

目前,80 个波前限制意味着如果存在 ilp 或其他问题,您可以尝试在算法中使用多达 80 x 2560 个工作项。可能在简单的算法(如 naive nbody)中没有那么有用,但在混合精度 int 浮点字符串之类的东西中很有用,所有内容都在同一指令窗口中计算。也许这就是为什么他们说 16wide 更好。

在 gcn 中,每个管道最多有 40 个线程在运行。 Nvidia 更不像 32 或 16。现在 rdna 有 80 并且速度更快。绝对更好。但是当你在 nbody 算法中只有 2560 个粒子时可能不是这样。由于这个原因,您要求的 64+ simd 宽度对于更少的粒子(也许)可能会更好。但是随着粒子的增加,更多的 tlp 看起来更好,因此,相同晶体管数量上每个计算单元的宽度更小。

【讨论】:

    猜你喜欢
    • 2015-10-23
    • 2011-02-08
    • 2011-11-06
    • 1970-01-01
    • 2013-01-08
    • 2011-03-25
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多