标量ALU
CU的第二点改进是标量ALU,RDNA4给标量ALU添加了简单的浮点指令支持,这个改进其实在RDNA3.5中就已经有了。硬件线程中通常包含了很多条软件线程,但是多个软件线程也有时会共用一组数据,这时候用SIMD来计算就不太划算了,所以AMD在GCN时期就引入了一个由四个SIMD共享的标量ALU,用于一些简单的整数计算和控制逻辑。RDNA时代,变成了一组SIMD一组标量ALU,标量ALU比例变高之后,利用率自然下去了,所以这次加入浮点指令,也是为了进一步提高标量ALU的适用场景。
标量ALU的浮点指令支持大部分简单浮点操作,但像除法,超越函数之类的并不支持。浮点操作的延迟基本为4周期,与标量ALU的整数指令相比高了一倍,但相对于SIMD来说还是低了1周期,并且可以和SIMD并行,提高性能。标量ALU的并行表现比较怪异,指令级并行并不能完全掩盖它的延迟,同样线程级并行也不能。多条无依赖的标量SALU指令并发时,平均延迟下降也并不线性,之后有时间再继续研究。
标量ALU的另一个显而易见的好处是功耗。这里我简单测试一下:

RDNA3

RDNA4
再各自理想的工作状态下,RDNA4使用SALU,在更高的频率下仅仅使用84w就接近了RDNA3在150w下才能达成的吞吐率。