开普勒之核心:SMX与SM的改动细节
全新的Kepler相比上代的Fermi架构改变了什么,看架构图就很清楚了:
GK104相比GF110,整体架构没有大的改变,GPU(图形处理器集群)维持4个,显存控制器从6个64bit(384bit)减至4个64bit(256bit),总线接口升级至PCIE 3.0。剩下的就是SM方面的改变了:
这里之所以要把GF104这颗中端核心的SM架构图也列出来,是因为GF104相比高端的GF100核心做了一些细小的改动,这些改动也被沿用到了GK104当中。另外从核心代号上来看,GK104其实就是用来取代GF104的,而取代GF100的核心另有他人。
NVIDIA把GK104的SM(不可分割的流处理器集群)称为SMX,原因就是暴增的CUDA核心数量。但实际上其结构与上代的SM没有本质区别,不同的只是各部分单元的数量和比例而已。具体的区别逐个列出来进行对比:
1. NVIDIA现在把流处理器称为CUDA核心;
2. SFU(Special Function Units,特殊功能单元)是比CUDA核心更强的额外运算单元,可用于执行抽象的指令,例如正弦、余弦、倒数和平方根,图形插值指令也在SFU上执行;
3. Warp是并行线程调度器,每一个Warp都可以调度SM内部的所有CUDA核心或者SFU;
4. Dispatch Unit是指令分派单元,分则将Warp线程中的指令按照顺序和相关性分配给不同的CUDA核心或SFU处理;
5. LD/ST就是载入/存储单元,可以为每个线程存储运算源地址与路径,方便随时随地的从缓存或显存中存取数据;
6. TMU是纹理单元,用来处理纹理和阴影贴图、屏幕空间环境光遮蔽等图形后期处理;
通过以上数据对比不难看出,GK104暴力增加CUDA核心数量的同时,SFU和TMU这两个与图形或计算息息相关处理单元也同比增加,但是指令分配单元 和线程调度器还有载入/存储单元的占比都减半了。这也就是前文中提到过的削减逻辑控制单元的策略,此时如何保证把指令和线程填满一个CUDA核心,将是一 个难题。