超長(zhǎng)指令集架構(gòu)的前世今生:冷落多年后為何會(huì)在深度學(xué)習(xí)處理器中重獲青睞?
2020-01-08 13:07:04 MikesICroom深度學(xué)習(xí)加速器,更宏觀些應(yīng)該稱(chēng)為處理器,我認(rèn)為會(huì)是繼通用中央處理器之后的一次架構(gòu)性的革命。通用CPU在過(guò)去幾十年里取得了驚人的成功,不用說(shuō)服務(wù)器,桌面和手持設(shè)備CPU是關(guān)鍵性部件,以至于在以固定功能為主的芯片里也都包含一個(gè)甚至多個(gè)CPU,負(fù)責(zé)對(duì)功能單元的控制和調(diào)度。其中的關(guān)鍵因素是非常友好的軟件接口,包括易用性,可擴(kuò)展性,兼容性。同時(shí)處理器架構(gòu)的進(jìn)步引入了硬件并行機(jī)制和多層緩存機(jī)制,極大的增強(qiáng)了處理器的運(yùn)算能力,同時(shí)保持了對(duì)軟件的抽象層次,使工程師不必了解過(guò)多的硬件結(jié)構(gòu)來(lái)進(jìn)行軟件設(shè)計(jì)。而上述架構(gòu)又提高了處理器硬件的擴(kuò)展性,針對(duì)同樣的指令集可以設(shè)計(jì)出運(yùn)算能力不同的處理器系列,其編譯和軟件只需很少改動(dòng)甚至不需改動(dòng)就可以直接運(yùn)行在這些規(guī)模和算力差距很大的芯片上,并可以保持實(shí)際性能和硬件算力的線性關(guān)系。因此,盡管在深度學(xué)習(xí)加速器大規(guī)模爆發(fā)的今天,即使是其主攻的推理市場(chǎng),仍有超過(guò)半數(shù)的設(shè)備在使用經(jīng)SIMD加速的通用處理器。
深度學(xué)習(xí),或者廣泛的稱(chēng)為人工智能,相比傳統(tǒng)的軟件算法有其一定的domain specific的特征,比如非常高的數(shù)據(jù)算力的需求,弱化的控制,大數(shù)據(jù)帶寬等,同時(shí)在AI算法的內(nèi)部,又體現(xiàn)著一定的generality,如結(jié)構(gòu)差異的各種網(wǎng)絡(luò)結(jié)構(gòu)和算子特性。這些特征會(huì)引導(dǎo)對(duì)體系結(jié)構(gòu)的新一輪的探索。這也是我認(rèn)為目前已ASIC結(jié)構(gòu)為主的深度學(xué)習(xí)加速器可能只是AI發(fā)展的初級(jí)階段,是一種可以快速落地但應(yīng)用狹窄的產(chǎn)品,更多的意義是對(duì)當(dāng)前對(duì)火熱而快速的深度學(xué)習(xí)市場(chǎng)的一種響應(yīng)和匹配。
隨著AI算法的深入而廣泛的發(fā)展,對(duì)generality的需求會(huì)增加,從而推動(dòng)芯片設(shè)計(jì)向通用性方向移動(dòng)。在這一方面,英偉達(dá)的GPGPU和CUDA軟件仍然牢牢占據(jù)著優(yōu)勢(shì)地位。其他的潛在競(jìng)爭(zhēng)者們雖然不多,但也進(jìn)行了很多嘗試,比如寒武紀(jì),華為的達(dá)芬奇,燧原的DTU,habana的TPC等。
其中有一個(gè)很有意思的現(xiàn)象,可以稱(chēng)為考古,就是在最新的AI產(chǎn)品上出現(xiàn)了幾十年前就提出的一些“老結(jié)構(gòu)”,最典型的就是谷歌的TPU所使用的的“systolic”陣列,當(dāng)年基本上可以認(rèn)為失敗的思想?yún)s可以在今天換發(fā)新生。
這也證明了一點(diǎn),沒(méi)有最好的架構(gòu),只有最合適的架構(gòu)。當(dāng)時(shí)的“英雄無(wú)用武之地”可能只是沒(méi)有合適的應(yīng)用場(chǎng)景,而現(xiàn)在的AI設(shè)計(jì)正好能夠很好的匹配這種架構(gòu),因此發(fā)揮出其最大的實(shí)力。想到前幾天看的一篇文章,是介紹比特大陸在設(shè)計(jì)礦機(jī)中如何從80年代的動(dòng)態(tài)電路結(jié)構(gòu)中尋找靈感,設(shè)計(jì)中了一種面積較低的動(dòng)態(tài)觸發(fā)器用來(lái)替代傳統(tǒng)的靜態(tài)觸發(fā)器,同時(shí)針對(duì)挖礦算法的特性避免了動(dòng)態(tài)電路所需要的的刷新邏輯,從而控制住功耗。以此為基礎(chǔ)的礦機(jī)在成本上有很大的優(yōu)勢(shì),在一定程度上奠定了比特大陸的霸主地位。因此“以歷史為鑒”在芯片設(shè)計(jì)上也是一種很有效的思路。
超長(zhǎng)指令集(VLIW)前世今生
上邊談了最近研究的一些個(gè)人感想,接下來(lái)分析另一種在深度學(xué)習(xí)芯片上大放異彩的“考古”成果,就是超長(zhǎng)指令字:VLIW(Very-Large-Instruction-Width)。這個(gè)名詞甚至有些剛接觸處理器設(shè)計(jì)的都不熟悉,因?yàn)橐运鼮榇淼囊淮?a href="http://www.xebio.com.cn/cpu_soc" target="_blank" class="keylink">處理器已經(jīng)失敗的退出市場(chǎng),以至于在體系結(jié)構(gòu)的書(shū)中只占據(jù)了附錄的寥寥篇幅,似乎在宣稱(chēng)我曾經(jīng)存在過(guò)。不過(guò)相比其他徹底消失的架構(gòu),VLIW在另一個(gè)領(lǐng)域還是找到了自己的位置。
剛接觸DSP設(shè)計(jì)的人,都會(huì)對(duì)這種奇怪的流水線結(jié)構(gòu)和數(shù)據(jù)運(yùn)算方式留下很深的印象,是的,這就是VLIW。而現(xiàn)在,很多主攻云端推理和訓(xùn)練市場(chǎng)的產(chǎn)品,在提到基礎(chǔ)架構(gòu)時(shí)都會(huì)宣傳其自定義的矢量運(yùn)算指令集,大發(fā)射位寬,高度的并行執(zhí)行能力。這些名詞背后的底層結(jié)構(gòu)幾乎都是VLIW。前不久才被intel收購(gòu)的habana就大方宣稱(chēng)采用自定義的VLIW的指令集。
雖然VLIW結(jié)構(gòu)在之前的幾十年只能算是取得了“非常有限的成果“,但就目前的深度學(xué)習(xí)處理器架構(gòu)發(fā)展而言,重新回顧下VLIW的特征以及其成功和失敗的案例仍然是很有意義的,也許這也是AI設(shè)計(jì)的一種可能方向。
處理器設(shè)計(jì)有兩個(gè)核心問(wèn)題,并行性和存儲(chǔ)訪問(wèn)。針對(duì)前者工程師提出了多個(gè)層次的并行性提升方法,如指令級(jí)的并行,包括多發(fā)射,亂序執(zhí)行等;又如程序間并行,比如多線程,多核系統(tǒng)等。其中,多發(fā)射系統(tǒng)的發(fā)展對(duì)處理器結(jié)構(gòu)有這至關(guān)重要的影響,也是提升程序單線程性能的主要技術(shù)。
隨著指令并發(fā)數(shù)目的增加,需要更多的譯碼,更復(fù)雜的處理相互依賴(lài)性的邏輯,更高效的亂序調(diào)度能力,這些需求極大的增加了硬件設(shè)計(jì)復(fù)雜度,增大了面積,同時(shí)限制了處理器頻率的提升。由于傳統(tǒng)的多發(fā)射非常依賴(lài)于硬件動(dòng)態(tài)調(diào)度,從而引入復(fù)雜度,那么可不可以有另一個(gè)思路,就是將這個(gè)調(diào)度工作轉(zhuǎn)移給軟件,由編譯器在編譯過(guò)程中對(duì)程序進(jìn)行分析,從而進(jìn)行靜態(tài)調(diào)度,硬件只需要根據(jù)調(diào)度好的指令包直接執(zhí)行即可,甚至前后的依賴(lài)關(guān)系都可以由編譯器負(fù)責(zé)。這樣去掉了硬件動(dòng)態(tài)調(diào)度邏輯,處理器流水線的設(shè)計(jì)可以變得簡(jiǎn)單而直接,因?yàn)椴恍枰幚碇噶铋g的依賴(lài)性,可以實(shí)現(xiàn)更大寬度的指令包的譯碼和執(zhí)行,這樣就進(jìn)一步提高了指令級(jí)并行的能力。這就是VLIW思想的來(lái)源。
因此,VLIW相比傳統(tǒng)的多發(fā)射,主要有以下幾個(gè)優(yōu)點(diǎn):
其三,相比硬件動(dòng)態(tài)調(diào)度只能在幾十條至多一兩百條指令的范圍內(nèi)進(jìn)行調(diào)度,編譯器可以看到程序的全貌,其調(diào)度可以在數(shù)萬(wàn)條指令的范圍上進(jìn)行,并且處理硬件很難發(fā)現(xiàn)的一些并行特性,比如多層嵌套的循環(huán),這也是VLIW宣稱(chēng)的性能可以超過(guò)硬件調(diào)度的信心所在。
Intel IA-64 指令格式
當(dāng)年intel和hp的工程師研究出了VLIW的結(jié)構(gòu),都認(rèn)為這是未來(lái)處理器的發(fā)展方向,據(jù)此設(shè)計(jì)了intel的64位指令集IA-64,并開(kāi)始研發(fā)面向服務(wù)器領(lǐng)域的高性能處理器,在新的領(lǐng)域甩開(kāi)AMD緊跟的步伐,開(kāi)啟屬于intel的新時(shí)代。這個(gè)雄心勃勃的架構(gòu)被稱(chēng)為EPIC (Explicitly Parallel Instruction Computer) ,基本就是VLIW的改進(jìn)版。
基于EPIC的第一代處理器代號(hào)為Itanium,即“大名鼎鼎”的安騰。然而,理想很豐滿,現(xiàn)實(shí)很骨感。隨著安騰1代的不斷跳票,加之安騰2代性能也不達(dá)預(yù)期,同時(shí)IA-64不能在binary code上兼容x84指令集,導(dǎo)致各大廠商不斷退出對(duì)安騰的支持,最后只剩下intel和hp兩兄弟還在支撐。借此良機(jī),AMD推出了完全兼容x86的x64指令集,很快獲得了廠商和市場(chǎng)的認(rèn)可。面對(duì)如此窘境,intel也不得不低頭,選擇支持了AMD的x64指令集。隨著小型機(jī)在服務(wù)器領(lǐng)域的成功,x64指令集取得了絕對(duì)的領(lǐng)先地位,安騰越來(lái)越難以找到自己的位置。2019年初,intel宣布安騰系列進(jìn)入EOL(End-Of-Life,壽命結(jié)束)周期。經(jīng)過(guò)1/4個(gè)世紀(jì)的代價(jià)高昂的嘗試,VLIW架構(gòu)在通用處理器上終于畫(huà)上了早該結(jié)束的句號(hào)。
VLIW在深度學(xué)習(xí)領(lǐng)域大放異彩
既然VLIW有上述那些優(yōu)勢(shì),為什么還會(huì)在競(jìng)爭(zhēng)中失敗?有很多方面的因素,這里只從技術(shù)角度總結(jié)一下,算是馬后炮的分析。最主要的2個(gè)原因,第一,雖然編譯器可以調(diào)度的范圍更大,功能更強(qiáng),然而由于程序中很多數(shù)據(jù)只有在run-time執(zhí)行時(shí)才能獲得取值,尤其是一些控制流數(shù)據(jù),這樣在編譯器靜態(tài)調(diào)度是就不得不面臨信息缺失的問(wèn)題,從而只能采取比較保守的策略,這樣調(diào)度效率就大打折扣。因此,一定的硬件動(dòng)態(tài)調(diào)度能力又變得不可缺少,在安騰2代上,如branch prediction,renaming,fowwarding,OoO等機(jī)制又被拿了回來(lái)。這樣導(dǎo)致硬件邏輯非但沒(méi)有簡(jiǎn)單,反而由于引入了VLIW的一些支持而更復(fù)雜,頻率無(wú)法提高,能耗還上升了。第二,在當(dāng)前系統(tǒng)結(jié)構(gòu)中,cache被證明是一個(gè)性能強(qiáng)大而易于軟件使用的機(jī)制,在內(nèi)存模型中不可或缺。而引入cache所帶來(lái)的問(wèn)題就是存儲(chǔ)訪問(wèn)的時(shí)間不確定性,因?yàn)閏ache的缺失無(wú)法靜態(tài)預(yù)測(cè)。這樣編譯器在調(diào)度指令的時(shí)候無(wú)法確定存儲(chǔ)訪問(wèn)的周期,更難以將數(shù)據(jù)存取和計(jì)算在超長(zhǎng)指令package中合理排布。因此編譯器的設(shè)計(jì)非常復(fù)雜,同時(shí)面臨的上述困難更是無(wú)法克服。最終導(dǎo)致安騰在實(shí)際應(yīng)用的情況下,能耗都不及同等級(jí)的x64處理器。
除此之外,我認(rèn)為還有一個(gè)至關(guān)重要的原因,盡管跟VLIW無(wú)關(guān),但這一點(diǎn)值得在深度學(xué)習(xí)加速器中深入思考,就是軟件的兼容性。這一點(diǎn)是x86指令集成功的關(guān)鍵,intel一直保持著這個(gè)優(yōu)勢(shì)。然而在IA-64的設(shè)計(jì)上,為了切入基于RISC的VLIW的架構(gòu),intel自己拋棄了對(duì)x86的binary兼容,導(dǎo)致在64位指令集的競(jìng)爭(zhēng)中落敗。這一點(diǎn)在目前的深度學(xué)習(xí)加速器上可以說(shuō)是重災(zāi)區(qū),很多公司的加速器,甚至軟件框架,第一代和第二代可以說(shuō)是天壤之別,別說(shuō)binary兼容了,整個(gè)firmware和運(yùn)行庫(kù)都要重寫(xiě)。這當(dāng)然可以算是一種“快速試錯(cuò)和迭代”,然而對(duì)于很多應(yīng)用公司而言,一個(gè)系統(tǒng)的生命周期是以年計(jì)算的,尤其是工業(yè)相關(guān),甚至需要5~10年的穩(wěn)定期,這樣大幅度的變動(dòng)對(duì)很多企業(yè)而言是不可預(yù)知的風(fēng)險(xiǎn),難以想象今天才在生產(chǎn)線上安裝了設(shè)備,過(guò)幾天更好的算法發(fā)明了,該設(shè)備不支持,或者發(fā)布了下一代產(chǎn)品,之前開(kāi)發(fā)的軟件無(wú)法運(yùn)行。因此穩(wěn)定性和持續(xù)兼容的能力仍然很關(guān)鍵,如ARM這樣另起爐灶高的A64指令集,也增加了兼容以前指令集的32位模式。也是這個(gè)原因,盡管各家紛紛推出高效的AI推理加速器,市場(chǎng)占有率最高的仍然是基于通用處理器的產(chǎn)品。這一點(diǎn),值得AI工程師們仔細(xì)思考。
VLIW在通用處理器上的失敗,卻在DSP領(lǐng)域獲得了成功。根本原因是DSP特殊的應(yīng)用場(chǎng)景正好發(fā)揮了VLIW結(jié)構(gòu)的優(yōu)勢(shì),避開(kāi)了它的短處。由于數(shù)字信號(hào)處理領(lǐng)域的算法比較單一穩(wěn)定,同時(shí)是運(yùn)算密集型程序,并不需要通用場(chǎng)景下的實(shí)時(shí)控制。并且其程序運(yùn)行有嚴(yán)格的時(shí)間要求,cache這種不可控時(shí)間的結(jié)構(gòu)就不適合了,通常采用固定周期的TCM作為緩存,這樣內(nèi)存訪問(wèn)時(shí)間就固定了。有了上述的特征,靜態(tài)編譯在通用場(chǎng)合下面臨的那些困難就不存在了,而其更高效的并行運(yùn)算能力和簡(jiǎn)化的硬件結(jié)構(gòu)被完全發(fā)揮出來(lái)。
habana的Goya架構(gòu)
注意這些特點(diǎn):運(yùn)算密集,算法單一穩(wěn)定,固定時(shí)間內(nèi)存訪問(wèn),這不也正是深度學(xué)習(xí)的特征么。運(yùn)算密集不用說(shuō)了,都是T級(jí)別的;目前主力算子都是矩陣乘累加和卷積,有很明顯的運(yùn)算特點(diǎn);為了實(shí)現(xiàn)較大規(guī)模的運(yùn)算單元和功耗控制,需要簡(jiǎn)化內(nèi)存和總線結(jié)構(gòu),通常采取weight常駐,數(shù)據(jù)通過(guò)DMA搬運(yùn)的模式,使用TCM作為片上緩存,這樣也就具備了固定訪問(wèn)時(shí)間的特點(diǎn)。這樣VLIW結(jié)構(gòu)就可以很好的匹配深度學(xué)習(xí)算法的特點(diǎn)。同時(shí)由于基本算子的固定性,只需要向DSP那樣手動(dòng)實(shí)現(xiàn)各個(gè)運(yùn)算庫(kù)的支持,連編譯器靜態(tài)調(diào)度都可以做的簡(jiǎn)單。這樣一方面簡(jiǎn)化硬件,利于大規(guī)模的堆疊算力資源,一方面簡(jiǎn)化編譯設(shè)計(jì),縮短軟件開(kāi)發(fā)周期和難度。因此VLIW在深度學(xué)習(xí)領(lǐng)域大放異彩也就不難理解。
然而VLIW就一定是完美的了么?這個(gè)也不好說(shuō),畢竟以此為結(jié)構(gòu)的加速器才剛剛展露頭角,還沒(méi)有經(jīng)受大規(guī)模的實(shí)踐檢驗(yàn)。其中可能存在的幾個(gè)問(wèn)題也許會(huì)制約VLIW在AI領(lǐng)域的繼續(xù)發(fā)展。首先是軟件的靈活性,隨著AI的發(fā)展,需要支持的框架和算法也越來(lái)越多,這樣對(duì)靈活性和通用性的要求會(huì)提高,這對(duì)VLIW的通用性提出了挑戰(zhàn)。其次,VLIW通常在較大算力的芯片上能夠良好發(fā)揮,而對(duì)于一些小算力的應(yīng)用場(chǎng)景,其較大的位寬和執(zhí)行能力反倒受限于成本的壓力,而VLIW并不像傳統(tǒng)的亂序多發(fā)射結(jié)構(gòu),具有較好的可伸縮性。第三,對(duì)于稀疏鏈接的深度神經(jīng)網(wǎng)絡(luò),會(huì)出現(xiàn)很多run-time才能發(fā)現(xiàn)的0值,如何跳過(guò)0值進(jìn)行運(yùn)算壓縮一直是一個(gè)探索方向,而VLIW的靜態(tài)編譯無(wú)法發(fā)現(xiàn)這一點(diǎn),因此需要硬件動(dòng)態(tài)調(diào)度,而這樣會(huì)對(duì)已經(jīng)排布好的指令包的依賴(lài)關(guān)系造成影響,導(dǎo)致無(wú)法全流水執(zhí)行,同時(shí)又會(huì)回到安騰的兩難境地。因此目前的VLIW結(jié)構(gòu)多面向稠密運(yùn)算。針對(duì)這些問(wèn)題,還需要進(jìn)一步的架構(gòu)探索。
參考文獻(xiàn):
【1】https://baijiahao.baidu.com/s?id=1624408534896307195&wfr=spider&for=pc
【2】https://www.anandtech.com/show/14760/hot-chips-31-live-blogs-habanas-approach-to-ai-scaling
【3】Computer Architecture A Quantitative Approach (6th Edition)
本文為:MikesICroom 公眾號(hào)原創(chuàng),有興趣的朋友可以關(guān)注該公眾號(hào)。后臺(tái)回復(fù)“課程”獲取斯坦福大學(xué)AI加速器課程資料。
關(guān)鍵詞: 深度學(xué)習(xí)
EETOP 官方微信
創(chuàng)芯大講堂 在線教育
半導(dǎo)體創(chuàng)芯網(wǎng) 快訊
相關(guān)文章