NVIDIA官方并没有公布Maxwell架构CUDA Core相比Kepler架构的具体改变细节,不过我们依旧可以通过对比分析来粗略推测。当然基于技术原理的推测不可能做到100%准确,但至少能够反映出两代架构演变的部分内容。
底层猜测不是架构对比,考虑到如GM204和GK104这种规格的核心已经相对复杂,除了CUDA Core还有大量的周边辅助模块干扰,不容易对比。因此在这里使用结构比较简单的GM107和GK107来对比分析。同为Maxwell架构,GM107和GM204有逻辑层的调整,但底层CUDA Core应该没有变化。GK107与GK104同理,因此该对比有极高代表性。
GM204、GK104架构图对比。宏观上GM204是4(GPC)×4(SMM)×4(SM)的结构,比GK104上4(GPC)×2(SMX)多出一个细分的SM控制层(红框所示)。
先来看晶体管密度:GK107是1100万个/平方毫米,GM107是1250万个/平方毫米,GM107大约增加13.6%。相比之下,GK104的晶体管密度是1190万个/平方毫米,GM204是1360万个/平方毫米,GM204增加了大约14%。从这里可以看出,早期的28nm工艺下的Kepler产品,晶体管密度普遍相比目前较成熟的28nm工艺下的Maxwell产品低大约14%,说明TSMC的工艺还是有一定程度的改进。
接下来看两代产品,GK107有384个CUDA Core、核心面积118平方毫米、晶体管总数13亿个,512KB L2缓存。GM107是640个CUDA Core,核心面积为148平方毫米,晶体管总数18.5亿,L2缓存数量为2MB。GM107比GK107多了5.5亿晶体管,增幅42%,这多出来的晶体管主要用在了更多的CUDA Core和更多的缓存上。相比GK107,GM107的缓存大约多用了1.5亿晶体管左右。在这里假设所有周边控制单元的晶体管面积都和CUDA Core数量正比相关),那么Maxwell的GM107除去多增加的缓存后,剩余的部分大约占据了140平方毫米的面积(模糊估计值,包含了ROP、显存控制器等)。在不考虑其他干扰因素的情况下,算得Maxwell GM107的每个CUDA Core的面积为0.2平方毫米(140/640),而Kepler GK104的每个CUDA Core面积为0.3平方毫米(118/384)。这样粗略估计显示,Maxwell每个CUDA Core的面积只有Kepler每个CUDA Core面积的大约60%。但考虑到工艺进步的14%,这个数据可能被放大至70%,但极限应该不会超过75%。用一个体积只有原来产品70%的CUDA Core,获得原来产品90%以上的性能,这设计也应该算是老黄的“黑科技”了。
GK104的SMX结构中(右),一个控制结构要承担192个CUDA Core的调动任务,而GM204的SMM(左)中,依靠细分SM层(红框所示),一个控制结构只需负责32个CUDA Core。这更能提高单个CUDA Core的效率,还能提升整个GPC结构的并行处理能力。
再来看GM204,此前GK104仅为每个SMX设计了传统的、只读的共享L1缓存,而GM204的SMM中,设计了一个96KB的全功能可读写L1缓存,除了诸如CUDA Core这样的计算单元或调度单元可以使用L1缓存外,纹理单元也能划分一部分内容用作纹理缓存。每个SMM配96KB L1,GM204共计16个SMM,总计1.5MB可读写L1,比之前的Kepler更强、更实用。再加上2MB的L2缓存,整个GM204的缓存体系可谓大幅度加强,这使得GPU内数据存储更为方便,也大幅度降低了内部计算单元的等待延迟;降低了核心通过显存控制器访问显存的次数,降低了显存控制器的工作压力。因此大幅度提升了数据命中率,显著提升了CUDA Core的效率。也正因为此,在实际计算的过程中,Maxwell CUDA Core在指令控制、数据等待、存储等环节的等待时间大幅缩短,让CUDA Core一直处于高效状态,借此大幅提高了计算效率。所以我们看到另一组官方数据显示“Maxwell每个CUDA Core在游戏中的实际性能大约是Kepler架构CUDA Core的1.4倍”。这看似和之前架构特性中的介绍矛盾,其实是将CUDA Core分离和融合进整体架构后的两种不同表述,玩家们心里有数了吗?