×
×

超長指令集架構的前世今生:冷落多年后為何會在深度學習處理器中重獲青睞?

2020-01-08 13:07:04 來源:MikesICroom
“老瓶裝新酒”深度學習加速器的新進展

深度學習加速器,更宏觀些應該稱為處理器,我認為會是繼通用中央處理器之后的一次架構性的革命。通用CPU在過去幾十年里取得了驚人的成功,不用說服務器,桌面和手持設備CPU是關鍵性部件,以至于在以固定功能為主的芯片里也都包含一個甚至多個CPU,負責對功能單元的控制和調度。其中的關鍵因素是非常友好的軟件接口,包括易用性,可擴展性,兼容性。同時處理器架構的進步引入了硬件并行機制和多層緩存機制,極大的增強了處理器的運算能力,同時保持了對軟件的抽象層次,使工程師不必了解過多的硬件結構來進行軟件設計。而上述架構又提高了處理器硬件的擴展性,針對同樣的指令集可以設計出運算能力不同的處理器系列,其編譯和軟件只需很少改動甚至不需改動就可以直接運行在這些規模和算力差距很大的芯片上,并可以保持實際性能和硬件算力的線性關系。因此,盡管在深度學習加速器大規模爆發的今天,即使是其主攻的推理市場,仍有超過半數的設備在使用經SIMD加速的通用處理器。

深度學習,或者廣泛的稱為人工智能,相比傳統的軟件算法有其一定的domain specific的特征,比如非常高的數據算力的需求,弱化的控制,大數據帶寬等,同時在AI算法的內部,又體現著一定的generality,如結構差異的各種網絡結構和算子特性。這些特征會引導對體系結構的新一輪的探索。這也是我認為目前已ASIC結構為主的深度學習加速器可能只是AI發展的初級階段,是一種可以快速落地但應用狹窄的產品,更多的意義是對當前對火熱而快速的深度學習市場的一種響應和匹配。

隨著AI算法的深入而廣泛的發展,對generality的需求會增加,從而推動芯片設計向通用性方向移動。在這一方面,英偉達的GPGPU和CUDA軟件仍然牢牢占據著優勢地位。其他的潛在競爭者們雖然不多,但也進行了很多嘗試,比如寒武紀,華為的達芬奇,燧原的DTU,habana的TPC等。

其中有一個很有意思的現象,可以稱為考古,就是在最新的AI產品上出現了幾十年前就提出的一些“老結構”,最典型的就是谷歌的TPU所使用的的“systolic”陣列,當年基本上可以認為失敗的思想卻可以在今天換發新生。

這也證明了一點,沒有最好的架構,只有最合適的架構。當時的“英雄無用武之地”可能只是沒有合適的應用場景,而現在的AI設計正好能夠很好的匹配這種架構,因此發揮出其最大的實力。想到前幾天看的一篇文章,是介紹比特大陸在設計礦機中如何從80年代的動態電路結構中尋找靈感,設計中了一種面積較低的動態觸發器用來替代傳統的靜態觸發器,同時針對挖礦算法的特性避免了動態電路所需要的的刷新邏輯,從而控制住功耗。以此為基礎的礦機在成本上有很大的優勢,在一定程度上奠定了比特大陸的霸主地位。因此“以歷史為鑒”在芯片設計上也是一種很有效的思路。

超長指令集(VLIW)前世今生

上邊談了最近研究的一些個人感想,接下來分析另一種在深度學習芯片上大放異彩的“考古”成果,就是超長指令字:VLIW(Very-Large-Instruction-Width)。這個名詞甚至有些剛接觸處理器設計的都不熟悉,因為以它為代表的一代處理器已經失敗的退出市場,以至于在體系結構的書中只占據了附錄的寥寥篇幅,似乎在宣稱我曾經存在過。不過相比其他徹底消失的架構,VLIW在另一個領域還是找到了自己的位置。

剛接觸DSP設計的人,都會對這種奇怪的流水線結構和數據運算方式留下很深的印象,是的,這就是VLIW。而現在,很多主攻云端推理和訓練市場的產品,在提到基礎架構時都會宣傳其自定義的矢量運算指令集,大發射位寬,高度的并行執行能力。這些名詞背后的底層結構幾乎都是VLIW。前不久才被intel收購的habana就大方宣稱采用自定義的VLIW的指令集。

雖然VLIW結構在之前的幾十年只能算是取得了“非常有限的成果“,但就目前的深度學習處理器架構發展而言,重新回顧下VLIW的特征以及其成功和失敗的案例仍然是很有意義的,也許這也是AI設計的一種可能方向。

處理器設計有兩個核心問題,并行性和存儲訪問。針對前者工程師提出了多個層次的并行性提升方法,如指令級的并行,包括多發射,亂序執行等;又如程序間并行,比如多線程,多核系統等。其中,多發射系統的發展對處理器結構有這至關重要的影響,也是提升程序單線程性能的主要技術。

隨著指令并發數目的增加,需要更多的譯碼,更復雜的處理相互依賴性的邏輯,更高效的亂序調度能力,這些需求極大的增加了硬件設計復雜度,增大了面積,同時限制了處理器頻率的提升。由于傳統的多發射非常依賴于硬件動態調度,從而引入復雜度,那么可不可以有另一個思路,就是將這個調度工作轉移給軟件,由編譯器在編譯過程中對程序進行分析,從而進行靜態調度,硬件只需要根據調度好的指令包直接執行即可,甚至前后的依賴關系都可以由編譯器負責。這樣去掉了硬件動態調度邏輯,處理器流水線的設計可以變得簡單而直接,因為不需要處理指令間的依賴性,可以實現更大寬度的指令包的譯碼和執行,這樣就進一步提高了指令級并行的能力。這就是VLIW思想的來源。

因此,VLIW相比傳統的多發射,主要有以下幾個優點:

其一,簡化的硬件結構,可以加速芯片上市時間和減少潛在bug,將復雜度留給軟件后續迭代;
其二,VLIW的大位寬執行并不會以犧牲性能和頻率為代價,能夠保持發射寬度和性能的線性關系,而不像傳統的多發射加硬件動態調度,其性能的增幅是明顯遞減的;

其三,相比硬件動態調度只能在幾十條至多一兩百條指令的范圍內進行調度,編譯器可以看到程序的全貌,其調度可以在數萬條指令的范圍上進行,并且處理硬件很難發現的一些并行特性,比如多層嵌套的循環,這也是VLIW宣稱的性能可以超過硬件調度的信心所在。

VLIW架構在通用處理器徹底失敗

Intel IA-64 指令格式

當年intel和hp的工程師研究出了VLIW的結構,都認為這是未來處理器的發展方向,據此設計了intel的64位指令集IA-64,并開始研發面向服務器領域的高性能處理器,在新的領域甩開AMD緊跟的步伐,開啟屬于intel的新時代。這個雄心勃勃的架構被稱為EPIC (Explicitly Parallel Instruction Computer) ,基本就是VLIW的改進版。

基于EPIC的第一代處理器代號為Itanium,即“大名鼎鼎”的安騰。然而,理想很豐滿,現實很骨感。隨著安騰1代的不斷跳票,加之安騰2代性能也不達預期,同時IA-64不能在binary code上兼容x84指令集,導致各大廠商不斷退出對安騰的支持,最后只剩下intel和hp兩兄弟還在支撐。借此良機,AMD推出了完全兼容x86的x64指令集,很快獲得了廠商和市場的認可。面對如此窘境,intel也不得不低頭,選擇支持了AMD的x64指令集。隨著小型機在服務器領域的成功,x64指令集取得了絕對的領先地位,安騰越來越難以找到自己的位置。2019年初,intel宣布安騰系列進入EOL(End-Of-Life,壽命結束)周期。經過1/4個世紀的代價高昂的嘗試,VLIW架構在通用處理器上終于畫上了早該結束的句號。

VLIW在深度學習領域大放異彩

既然VLIW有上述那些優勢,為什么還會在競爭中失???有很多方面的因素,這里只從技術角度總結一下,算是馬后炮的分析。最主要的2個原因,第一,雖然編譯器可以調度的范圍更大,功能更強,然而由于程序中很多數據只有在run-time執行時才能獲得取值,尤其是一些控制流數據,這樣在編譯器靜態調度是就不得不面臨信息缺失的問題,從而只能采取比較保守的策略,這樣調度效率就大打折扣。因此,一定的硬件動態調度能力又變得不可缺少,在安騰2代上,如branch prediction,renaming,fowwarding,OoO等機制又被拿了回來。這樣導致硬件邏輯非但沒有簡單,反而由于引入了VLIW的一些支持而更復雜,頻率無法提高,能耗還上升了。第二,在當前系統結構中,cache被證明是一個性能強大而易于軟件使用的機制,在內存模型中不可或缺。而引入cache所帶來的問題就是存儲訪問的時間不確定性,因為cache的缺失無法靜態預測。這樣編譯器在調度指令的時候無法確定存儲訪問的周期,更難以將數據存取和計算在超長指令package中合理排布。因此編譯器的設計非常復雜,同時面臨的上述困難更是無法克服。最終導致安騰在實際應用的情況下,能耗都不及同等級的x64處理器。

除此之外,我認為還有一個至關重要的原因,盡管跟VLIW無關,但這一點值得在深度學習加速器中深入思考,就是軟件的兼容性。這一點是x86指令集成功的關鍵,intel一直保持著這個優勢。然而在IA-64的設計上,為了切入基于RISC的VLIW的架構,intel自己拋棄了對x86的binary兼容,導致在64位指令集的競爭中落敗。這一點在目前的深度學習加速器上可以說是重災區,很多公司的加速器,甚至軟件框架,第一代和第二代可以說是天壤之別,別說binary兼容了,整個firmware和運行庫都要重寫。這當然可以算是一種“快速試錯和迭代”,然而對于很多應用公司而言,一個系統的生命周期是以年計算的,尤其是工業相關,甚至需要5~10年的穩定期,這樣大幅度的變動對很多企業而言是不可預知的風險,難以想象今天才在生產線上安裝了設備,過幾天更好的算法發明了,該設備不支持,或者發布了下一代產品,之前開發的軟件無法運行。因此穩定性和持續兼容的能力仍然很關鍵,如ARM這樣另起爐灶高的A64指令集,也增加了兼容以前指令集的32位模式。也是這個原因,盡管各家紛紛推出高效的AI推理加速器,市場占有率最高的仍然是基于通用處理器的產品。這一點,值得AI工程師們仔細思考。

VLIW在通用處理器上的失敗,卻在DSP領域獲得了成功。根本原因是DSP特殊的應用場景正好發揮了VLIW結構的優勢,避開了它的短處。由于數字信號處理領域的算法比較單一穩定,同時是運算密集型程序,并不需要通用場景下的實時控制。并且其程序運行有嚴格的時間要求,cache這種不可控時間的結構就不適合了,通常采用固定周期的TCM作為緩存,這樣內存訪問時間就固定了。有了上述的特征,靜態編譯在通用場合下面臨的那些困難就不存在了,而其更高效的并行運算能力和簡化的硬件結構被完全發揮出來。

habana的Goya架構

注意這些特點:運算密集,算法單一穩定,固定時間內存訪問,這不也正是深度學習的特征么。運算密集不用說了,都是T級別的;目前主力算子都是矩陣乘累加和卷積,有很明顯的運算特點;為了實現較大規模的運算單元和功耗控制,需要簡化內存和總線結構,通常采取weight常駐,數據通過DMA搬運的模式,使用TCM作為片上緩存,這樣也就具備了固定訪問時間的特點。這樣VLIW結構就可以很好的匹配深度學習算法的特點。同時由于基本算子的固定性,只需要向DSP那樣手動實現各個運算庫的支持,連編譯器靜態調度都可以做的簡單。這樣一方面簡化硬件,利于大規模的堆疊算力資源,一方面簡化編譯設計,縮短軟件開發周期和難度。因此VLIW在深度學習領域大放異彩也就不難理解。

然而VLIW就一定是完美的了么?這個也不好說,畢竟以此為結構的加速器才剛剛展露頭角,還沒有經受大規模的實踐檢驗。其中可能存在的幾個問題也許會制約VLIW在AI領域的繼續發展。首先是軟件的靈活性,隨著AI的發展,需要支持的框架和算法也越來越多,這樣對靈活性和通用性的要求會提高,這對VLIW的通用性提出了挑戰。其次,VLIW通常在較大算力的芯片上能夠良好發揮,而對于一些小算力的應用場景,其較大的位寬和執行能力反倒受限于成本的壓力,而VLIW并不像傳統的亂序多發射結構,具有較好的可伸縮性。第三,對于稀疏鏈接的深度神經網絡,會出現很多run-time才能發現的0值,如何跳過0值進行運算壓縮一直是一個探索方向,而VLIW的靜態編譯無法發現這一點,因此需要硬件動態調度,而這樣會對已經排布好的指令包的依賴關系造成影響,導致無法全流水執行,同時又會回到安騰的兩難境地。因此目前的VLIW結構多面向稠密運算。針對這些問題,還需要進一步的架構探索。

參考文獻:

【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 公眾號原創,有興趣的朋友可以關注該公眾號。后臺回復“課程”獲取斯坦福大學AI加速器課程資料。

  1. EETOP 官方微信

  2. 創芯大講堂 在線教育

  3. 創芯老字號 半導體快訊

相關文章

全部評論

  • 最新資訊
  • 最熱資訊
电子游戏网站1277 福彩江西快3开奖结果 安徽11选五开奖结果 体彩扑克牌开奖结果 云南11选五5前三开奖走势图 七星彩开奖中奖规则 福州在线配资首选鑫配网 福彩30选5开奖结果 7乐彩开奖号码 天成配资 新浪福建22选5走势图