在gf100(gtx480)发售前夕,也就是2010年左右,英伟达的gpu事业部总经理在接受采访曾毫不吝啬自己对gtx480的赞美,并将其称为是地球上最强的gpu。然而,gtx480虽然性能强悍,但论性价比却不敌amd的hd 5000系列,a卡也迅速推出了性能更强大的hd5870的极限版本作为竞品,a卡与n卡的在这一次的博弈中胜者是谁也显而易见。

问题出在哪儿?Gtx580给出了答案。Gtx580在芯片架构一反之前的MIMD,转向了SIMT模式,Gtx580最终被证明是成功的。

MIMD是什么?SIMT是什么?在此之前我想通过几个问题讲讲我对于并行计算的理解。
1.什么并行计算?简单来讲,并行计算就是同时使用多个计算资源来解决一个计算问题。不同的数据可以分散由不同处理器同时进行,不同的指令也可以分散由不同处理器同时进行。这种计算方式就叫做并行计算。
2.为什么要并行计算?与并行计算相对的串行计算,单处理器进行。而单处理器的性能速度提升会逐渐缓慢(晶体管的密度确实在增加,但能耗也在增加,并以热能的形式散失,当集成电路太热时,电路会不稳定)
3.为什么还要提高性能?超级计算机对于气候研究,生物研究,药物研究和数据处理都有极大的性能需求,未来也会有更多问题出现。我们需要更大的计算能力去解决这些问题。
4.如何编写并行程序?并行分为任务并行和数据并行,任务并行是指不同核心处理不同的任务,数据并行是指不同核心任务相同但数据不同,我们要写并行程序,算法便是以以上两种思想展开。事实上,通常程序里既有任务并行也有数据并行。

SIMD便是并行程序里一个经典的模型系统,SIMD全称为single instruction,multiple data。单指令流单数据流。具体实现则为这样:simd系统可以看作有一个控制单元和多个ALU寄存器,一条指令从控制单元发给多个ALU,多个ALU便同时执行这条指令的内容。这显而易见是数据并行。SIMD可以运用的gpu上面,原因是处理单个图像需要大量数据,而着色函数通常是很简单的,对相邻的色素块用SIMD并行可以轻松优化性能。

MIMD则相对来说比较复杂。MIMD全称为multiple instruction multiple data。多指令多数据流系统。在这种系统下,所有处理器都以它们自己的节奏运行,具体可分为共享内存系统和分布式内存系统。共享内存系统中每个处理器通过互联网络与内存相连,具体又可再分为uma系统和numa系统,这里不展开讲了。而分布式内存系统则是每个处理器都有自己的内存空间,它们通过互连网络相互通信。

基础知识讲完了,回到文章开头,为什么英伟达要将MIMD的芯片架构转向SIMT呢?SIMT与SIMD又有什么区别?为了更深入的回答这个问题,在此之前我还想讲一下gpu的基本硬件层面上的主要构成(以fermi架构为例)
GPC是Graphics Processing Cluster图形处理集群的缩写,属于GPU的次级单来位,一个GPU包含有几组GPC,GPU的架构源和代号不同,GPC相应的数量也不同,比如NVIDIA的GTX680的核心GK104具有四个GPC,每个GPC下面还包含2组SM(知Streaming Multiprocessor的缩写)计算集群,在GP100里,每一个SM有两个SM Processing Block(SMP),每个smp中有很多的CUDA core,CUDA core也叫Streaming Processor(SP),sp也就是所谓的流处理器。

在gtx580之前,虽然NVIDIA的GPU在效能方面占尽优势,但也不是完美无缺的——NVIDIA最大的劣势就是流处理器数量较少,导致理论浮点运算能力较低。当然这只是表面现象,其背后的本质则是MIMD(多指令多数据流)的架构,相当一部分比例的晶体管消耗在了其他部分(指令发射端和控制逻辑单元)上面,所以流处理器数量始终低于对手。

为了保证gtx480做出突破,nvidia就强行堆晶体管数量,最终在40nm的工艺下堆出了30多亿的晶体管,最终导致核心不完整且功耗巨大。如此一来,NVIDIA原有的架构严重受制于制造工艺,这并非可持续发展之路。

那为什么amd不会遇到这样的问题呢?因为Amd与英伟达不同,一直用的是SIMD架构,在这个架构下的gpu流处理器数量可以保证大于对手。
为此,NVIDIA将芯片架构逐步转向了SIMT的模式,即Single Instruction Multiple Threads(单指令多线程),SIMT有别与AMD的SIMD,从架构上可以说是SIMD的升级版。一个主要的不同就是,SIMD要求所有的向量元素在一个统一的组里同步的执行,而SIMT允许线程们在一个warp中独立的执行。
SIMT作为英伟达所做出的一次创新,毫无疑问,最终被证明是成功的。通过转换并行计算的系统,就能做出如此大的改变,这让人不禁感叹:并行计算的实现虽然艰巨,但影响力也是巨大的 !
这里看 simt和simd的详细区别 这是我加入超级计算机竞赛之前,用学习了几个小时的超算知识所写的内容。写它的目的是用此文申请加入超算竞赛校队,内容偏科普向,(硬核的我也不看不懂),我觉得这篇文章最棒的是我能将现学的知识和商业中的实际产品相结合,并在查找资料后延伸出更多内容。这点让我得到了不小的成就感。