2

因此,最近,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 个未使用的线程。那么有什么意义呢。

我知道我的理解在某些时候一定有缺陷,所以我希望得到一些深入的解释。谢谢。

4

1 回答 1

0

只是一个长评论。

在 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 看起来更好,因此,相同晶体管数量上每个计算单元的宽度更小。

于 2019-08-22T01:42:16.707 回答