自从2006年底至今超过十年的“通用运算导向”GPU,包含NVIDIA G80、AMD GCN、Intel HD Graphis Gen9、PowerVR Series 6、ARM Bifrost后的“SIMT (Single Instruction, Multiple Thread)”徒子徒孙,其独树一帜的运算架构,究竟应该如何从传统的计算机系统结构去定义,一直众说纷纭,这乱象从诸多“资深技术编辑”遍布各家媒体的鸡同鸭讲,即可略见一斑。
一般来说,常见三种论点:
- 纯MIMD:这是NVIDIA刚发表G80时的主流观点,反正也不必分什么Vertex Shader和Pixel Shader,也不用管“颜色 (RGB三原色 + Alpha半透明通道)”或“位置 (XYZ + W远近参数)”的四笔资料长的怎样,就打散全部运算工作,通通丢给一大堆独立的纯量 (Scalar) 处理器“塞好塞满”,所以近似传统多处理器的MIMD。
- 其实“拆散运算,分而治之”是充分理解SIMT前很重要的认知,但这观点却忽略了“如何简化软件开发”与“充分利用运算单元”的因素,更丝毫看不见多执行绪的影子。如果GPU只是货真价实的MIMD,那CUDA也不可能享有今日的成功,所以绝对是不及格的,也无法充分解释为何GPU没有传统汎用CPU的快取资料一致性需求。
- 纯SIMD:拜某本重量级计算机结构教科书的第五版,将GPU与向量电脑、SIMD指令集相提并论之所赐,“软件开发者可延续既有循序性思考,亦可借由资料阶层平行化,提升运算效能”并“可单指令启动多笔资料运算,比起每道运算都需要执行一道指令的MIMD享有更多潜在的能量效率”的SIMD就变成思考GPU本质和优势的出发点,而由“由数个多执行绪架构的SIMD处理器,所组成的MIMD多处理器环境”,只是一层无足轻重的外皮。
- 至于该如何厘清“如纺纱机般千丝万缕的执行绪”如何被有效的执行,全部推给硬件执行绪排程器,就一句话打死了,根本看不出SIMT和被“外挂”同时多执行绪的SIMD有什么差别。
- 讲白了,扛出这种“正统计算机结构”观点的文章作者,只是大脑发懒随便东施效颦教科书观点就随便打发读者骗骗稿费罢了,可能还会被朋友酸“你写出来的东西根本就是Intel IBM眼中的GPU” (为何笔者现在觉得脸肿肿der)。
- GPU宗教狂信者:我那管那些有字天书般的基本学理,反正这年头的高效能处理器,只要挂上GPGPU甚至“人工智能芯片”之名,就可超越一切物理限制和技术瓶颈,升华成藐视“落伍”CPU的至高存在。被问到道理之所在?万变不离其宗那101句“GPU就是生而高平行化所以天下无敌呀”。下面呢?就像纪晓岚碰到太监,下面没有了。
- GPU的“得道”,造就了“鸡犬升天”的不学无术光华牌工程师等级“超时代计算机结构理论大师”,甚至从未听闻一般大学计算机组织结构和计算机图学使用的英文教科书,你跟他堂堂正正陈述正确的基本观念,他们不但完全听不懂,搞不好还会呛你在蓄意卖弄学问。
- 很不幸的,资讯媒体圈一直不乏这种“大师”,他们的鼎鼎大名,也随着网络媒体普及间接导致传统电脑杂志市场的崩盘,消逝于搜索引擎的尽头。
那SIMT究竟是什么?在抽丝剥茧之前,我们先从SIMD的缺点谈起。
以NVIDIA的CUDA为例,代表画面上一块小方格、最多由32执行绪组成的“Warp”,是其GPU的基本运算单位,同一个Warp内的执行绪,共用同一个程式计数器 (Program Counter),执行相同的程式码,但处理不同的资料。此外,如一个Warp因某些因素被迫停滞 (如等待内存存取),就会切换执行另一个Warp,确保GPU的执行单元被塞好塞满。
而排山倒海的执行绪浪潮用以掩盖运算延迟这件事就更不用提了,G80的Streaming Processor (SP) 的最低运算延迟是4 Cycle,意谓著8个SP要被塞32执行绪的Warp才有可能喂饱,一切都是套招套好的。
假使硬塞一沱执行绪给传统“一个萝卜一个坑”的SIMD执行单元,惨剧就发生了:很容易发生执行单元空转的状态,还不如整个打散,采取类似MIMD的纯量执行单元结构。讲的更精确一点,SIMT寄望程式开发模型却维持现有的简单形式,让SIMD享有接近MIMD的自由度,企图兼具两者的优点。
但要如何控制庞大执行绪的运行,特别是当进行条件判断,决定执行哪些程式码,“锁存 (Lock Step)”哪些不予执行,这时候以前曾经在分析Apple自家处理器为何如此强大中提及的“引述码 (Predication)”就派上用场了。
单一执行绪逻辑上可分成三个部分:引述码、指令、暂存器编号,引述码先跟执行单元演算器输出的条件码 (Condition Code) 进行比对,判定是否执行后继的指令,与存取指定的暂存器,这精神上与向量电脑用以指定有效运算字段的遮罩暂存器,颇有异曲同工之妙。
也因此,用以下这段话总结近代GPU,也许会比较贴切:GPU是由数个兼备SIMD简易性与MIMD高弹性的“单指令多执行绪 (SIMT)”核心,所组成的单芯片多处理器,利于密集处理大量先天具有高平行度且高度同质性的运算工作。
后面我们再回顾GPU从纯绘图应用迈向通用运算这十年里程碑,各位科科敬请期待。






























