● 交通决定物流,缓冲决定效率
构建一个高效的物流网络,其中的分拣站以及路径的设计是极其重要的。合理的分拣站和路径设计可以帮助物流过程最大限度的避开著名的“邮差问题”的困扰,以便将货物有计划的高效送达目的地。
GPU本身实际上就可以被看作是一个物流网络,其中的ALU就是最终用户,指令就是需要被送达的货物,而缓冲存储体系则可以被看做是分拣站以及物流路径。当ALU空闲的时候,指令能够快速的被送达并得以执行,当ALU需要缓冲的时候,路径能够允许ALU方便的调用最近的缓冲资源,当指令执行完毕之后,新的结果成为新的货物被送达其他需要的单元。在寄存器资源充足的前提下,现代ALU的执行效率其实基本上是相当的,所以在不发生寄存器溢出以及发射端资源严重不足的情况下,影响灵活shader指令的执行效率的最重要因素就成了物流,也就是缓冲存储体系。
在G80/GT200时代,NVIDIA构架开始广泛使用shared作为缓冲存储体系,shared虽然不可操作,但本身可以被用来临时释放结果并且允许单个SP单元直接访问。而AMD方的缓冲存储体系设计则要糟糕得多,R600/RV670仅具备最基本的GDS单元,而且只能以VLIW或者说5个ALU团簇为单位进行访问,不论操作方式还是可用资源总量都远低于竞争对手。当构架发展到RV770之后情况有所改善,存储体系中加入了对LDS的支持,但整体操作方式以及可调用存储资源的路径方向性单一的问题依旧没有得到解决,构架访问缓存体系和主存永远只有一条单一方向的不可回头的路径可供选择。
这两张图片精确的反映出了AMD和NVIDIA在各自构架发展过程中缓冲存储体系的变迁。当双方进入到GF100/RV870这个阶段之后,对比差异变得更加明显。GF100除了维持了前面构架的shared体系以及可回溯的路径之外,还引入了具备一致性的可共享多级cache体系,这部分cache面向全部ALU甚至是Tex cache开放。GF100中的ALU可以和过去一样访问shared,可以访问L1 cache,可以透过L1 cache进一步访问L2 cache,甚至还可以透过cache和统一定址直接访问主存,cache也可以在寄存器溢出缓冲、shared、cache甚至是Tex cache之间随意变换。异常灵活的操作路径和充足的空间为GF100的ALU提供了充裕的缓冲资源,这对于实现灵活的图形shader以及通用计算代码都至关重要。反观RV870则只是在多次修补之后总算达到了对手在GT200阶段所能够达成的缓存环境和路径操作方式,ALU所面对的唯一可用临时缓冲 空间依旧是老旧的LDS和GDS,虽然无论LDS和GDS的空间都获得了一定的提升,但这种提升更多的是为了对应暴涨的ALU总规模以及应付微软在DirectX 11中提出的硬性规定而已。
这就是所谓代差的由来。我们说过,秉承CBS之眼的原则,我们只会向您展现真相。
至此,关于图形的处理部分已经基本完成了,剩下的就只有在ROP单元完成像素和纹理的混合以及光栅化的其他步骤比如采样然后输出图像了。ROP单元的设计上双方一直处在此消彼长的状态,比如某方的某代输出效率或者采样手法领先了对手,下一代中对手必定会予以弥补甚至是超越。由于不像其他单元尤其是纹理和像素部分那样具备问题的延伸性和持续性,与本文所要表达的事实又没有很直接的联系,所以我们决定不再专门针对ROP单元进行介绍。