● 回来吧,你是我的一部分
Larrabee是INTEL正式推出的第一个对应桌面级应用的独立显示构架。该构架的核心特点,就是通过多CPU核心并行互联,以及通用处理单元对特定操作的模拟来解决传统图形过程中的操作问题。
Larrabee在规划中由一个高度弹性的体系组成,先期发布的部分包含16至32枚核心X86核心,每个X86核心通过ringbus与其他核心、共享的L2 cache、Texture单元以及MC进行连接。除必要的材质操作以外,一切图形涉及的相关操作及处理,包括Setup,Geometry(几何过程,包括tranform以及各种culling操作等),Shader,Rasterization(光栅化过程),以及其他各种render操作,均由X86核心搭配compiler来完成。
Larrabee的X86核心采用类似P54C,也就是传统的奔腾处理器的设计思路,但对其结构进行了大幅的扩展,将传统的OoO(乱序)体系变成了更加节能的IO(顺序)体系,在保留Scalar设计的基础上添加了Thread Dispatch,更大的指令和数据cache,Vector Unit以及对应的寄存器,还有通过直达通道从共享中直接获取并可以接受统一管理的目录式256K L2 cache。常规的X86指令及其他低负荷整数指令通过传统的Scalar部分实现吞吐,而浮点数据及图形相关指令则通过全新的512bit Vector Unit进行吞吐。
Larrabee引入的全新的Vector Unit,也就是向量处理单元,在结构上与INTEL的AVX指令集非常类似,最大的区别为AVX指令集的SIMD过程单次吞吐8条32bit浮点指令,而Vector Unit达到了AVX的一倍,即16条32bit浮点指令,这使得Vector Unit在一般情况下拥有了超过AVX一倍的浮点吞吐能力。透过shader compiler的配合,Vector Unit在吞吐常规shader时不会出现太多效率方面的问题。
与此同时,在实际吞吐过程中Vector Unit还可以实现跨线程指令的吞吐操作,这就使得我们可以将Vector Unit与GPU中的warp或者wavefront进行对照。以线程粒度衡量,AMD的wavefront为64Thread,NVIDIA的warp则支持32Thread或者16Thread(half-warp),而INTEL的粒度则为16Thread。线程粒度与吞吐和延迟直接挂钩,更高的粒度会带来更大的吞吐,但也会带来更大的延迟,这种情况在分支频繁的场合尤其明显。在经历了多年的观察之后,INTEL选择了16Thread的线程粒度作为其Vector Unit的处理宽度,希望能够在吞吐及延迟间取得最佳的平衡。
线程粒度的选择(图片源自网络)
在处理常规图形过程时,Larrabee与几十年前CPU帝国全盛时期的传统手段类似,只不过将处理的过程从过去的单纯数据及指令环节延伸到了光栅化过程的每一个角落。而应用场合如果转移到了通用计算的领域时,Larrabee又可以被看作是一个多核心的常规X86处理器,程序可以将Vector Unit直接看做一个512bit的SIMD指令集并对其进行优化和使用。
CPU帝国的荣光,再一次照耀进了图形业界的领土。INTEL收复分离出去的GPU的领土的时机,已经尽在眼前了。