Parallel processing SIMD-16和SIMD-32的优势/劣势?

Parallel processing SIMD-16和SIMD-32的优势/劣势?,parallel-processing,gpu,cpu-architecture,simd,amd-gcn,Parallel Processing,Gpu,Cpu Architecture,Simd,Amd Gcn,因此,最近,AMD在其新的Navi GPU系列中推出了名为rDNA的新GPU体系结构。在阅读了某些和之后,我的理解是(如果我错了,请随意更正): 需要类似指令才能执行的小工作负载称为“线程” 然后,调度程序将一组需要相同指令的线程安排在一起。特别是在AMD GPU的情况下,GCN和rDNA被设计为分别处理64和32个线程 然后,SIMD处理这些集群线程。但区别在于AMD GCN使用SIMD16,这意味着16个线程可以一次处理,而AMD rDNA使用SIMD32,这意味着32个线程可以一次处理

因此,最近,AMD在其新的Navi GPU系列中推出了名为rDNA的新GPU体系结构。在阅读了某些和之后,我的理解是(如果我错了,请随意更正):

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

  • 然后,调度程序将一组需要相同指令的线程安排在一起。特别是在AMD GPU的情况下,GCN和rDNA被设计为分别处理64和32个线程

  • 然后,SIMD处理这些集群线程。但区别在于AMD GCN使用SIMD16,这意味着16个线程可以一次处理,而AMD rDNA使用SIMD32,这意味着32个线程可以一次处理

  • 如果GPU有全部64个线程要执行,那么事情应该是完美的,但是如果它只需要执行一个线程,那将是一件痛苦的事情。因此,只有一个SIMD16向量单元实际上在做一些有成效的事情,而其他三个基本上是令人不寒而栗的

  • 架构的变化意味着,使用SIMD32,GPU可以消除潜在的瓶颈

Hoever,所有这些消息来源都在说“SIMD16设计更适合计算工作量”。。。这给我提出了一些问题:

1) SIMD32设计在SIMD16中不是在各个方面都比它更好吗?如果不是,那么SIMD16在计算工作中到底有什么优势

2) 对于每64个线程,4个SIMD16同时或串行执行处理工作?我问它的原因是来自的视频描述了序列化的过程,而来自的视频似乎暗示了它是并行的。这把我弄糊涂了

  • 如果一切都是串行的,那么为什么AMD不选择SIMD64或其他产品呢

  • 如果一切都是平行的,那么老实说,我根本看不到SIMD的优势。在GCN上有4个SIMD16,在rDNA上有2个SIMD32。如果使用SIMD16在GCN上处理1个线程,则运行1个SIMD16的时间应等于运行4个SIMD16的时间,因为它们也是并行的。跳转到2 SIMD32,处理1 SIMD32的时间应等于处理其中2个SIMD32的时间。在这两种情况下,您仍然可能有63个未使用的线程。那么重点是什么呢

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

只是一个很长的评论

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

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

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

进入线程级并行,无论是否具备上述优势,它都比gcn更快地完成相同的波前。这降低了寄存器压力。更少的寄存器压力可以为飞行中的更多线程提供空间。与gcn的256个线程相比,每个向量1024个寄存器的性能得到了进一步提升。每个通道有更多的线程,更快的通道,更好的缓存系统,等等,它会变得更快、更高效

体系结构的可扩展性必须使它们停在32个车道上,而不是64 128等或更小的车道上,如16 8 4。也许拥有64个宽向量无法从缓存中获得足够的带宽?我不知道。但也有预算。要获得更宽的simd,您将在哪里进行裁剪?缓存意味着更少或更慢的缓存以及每个管道更少或更慢的缓存。我也不会裁剪标量单位。也许纹理单位和ROP,但玩家也会购买它。市场渗透

它们似乎在线程级并行性方面做得很好,并且可能不需要在同一个向量上添加更多的物理线程。两个矢量上的80个波前(当它们一起工作时)对于tlp来说已经是可怕的了,通过这一点,ilp上更多的问题现在就不再是问题了。在同一区域生成16或8个宽向量需要每个管道有160个线程。每个管道是否有160个独特的操作?我不知道。即使是80个独特的操作对我来说也太难了。这就像同时使用rdna的所有数学和内存特性一样。只是猜测而已

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


在gcn中,在飞行中,每条管道最多有40个线程。英伟达甚至不像32岁或16岁。现在rdna中有80个,速度更快。绝对更好。但当nbody算法中只有2560个粒子时,情况可能并非如此。由于这个原因,您要求的64+simd宽度对于粒子数较少(可能)可能会更好。但随着粒子数的增加,tlp越大,效果越好,因此,在相同晶体管数下,每个计算单元的宽度越小

我认为更好的解释是“SIMD32需要32个“线程”组成的组在lockstep中同时做相同的事情”,而SIMD16允许将工作分配到内核的粒度更细,或者“分支”,我不做很多GPU的事情,所以我可能会误解。