近年來多核心CPU的發展勢頭非常迅猛,在消費級PC市場上4-8核心處理器產品已成為很常見的產品,同時再加上像超線程這類新技術的出現與幫助,使得普通用戶就能享受到8~16 CPU線程同時運算的快感,處理器的多線程計算性能得到極大的提升。然而另一方面則是CPU單線程性能長時間的“毫無作為”,雖然CPU單線程性能也在進步,但與多線程性能的進步幅度相比則可謂不值一提。同時很多消費級軟件對CPU單線程的依賴,如大量游戲、PhotoShop圖片處理等也使得用戶深感CPU單線程性能的不足。為此,廣大用戶非??是驝PU的單線程性能也能獲得大幅升級,甚至在去年很多人為Skylake處理器“幻想”出了一個可以聯合多個CPU線程,用于執行單一任務的“逆向超線程”新技術。
而令人興奮的是,從本刊在2015年10月下刊《解析CPU逆向超線程技術可行性》一文中的分析,可以看到要想大幅提升CPU單線程性能并非不可能,逆向超線程技術并非完全虛構,很多科技人員早就在從事這項研究。而近期一家名為SoftMachines的公司更拿出了切實的解決方案,號稱能實現IPC倍增式的提高,接下來就讓我們走進CPU單線程性能的提升利器――VISC CPU架構。
不簡單的“新人”Soft Machines和VISC
IPC倍增式的提高,這樣的豪言壯語究竟出自何方神圣?可能很多人是頭―次聽說Soft Machines公司的大名。這是一家位于硅谷的創業公司,在2006、2007年左右成立。一般來說初創階段的公司會刻意在相當長的一段時間里保持低調,也就是所謂的“秘密階段”(Stealth mode),在具有一定成果了之后,突然釋放出爆炸性消息來吸引關注,當年設計超長指令字結構+動態二進制翻譯的全美達公司也曾玩過這個手段,其公司網站曾在兩年半的時間里面只掛著一句話“網頁還沒建好”(This web page is not yet here.),然而私下里卻簽署了超過2000份保密協議來確保公司的技術和商業目標不被泄露。從這點上來說,Soft Machines選擇了和當年全美達類似的路線,直到2014年才脫離“秘密創業階段”(Stealth mode),走向前臺。這家公司迄今為止收到了一億多美元的投資,投資者包括三星、GlobalFoundries、AMD,擁有75項專利,大約250名雇員,包括前Intel、AMD、高通公司的工程師。Soft Machines試圖通過推動CPU單線程性能的增長,使用全新的結構(被稱為VISC)來達到IPC倍增。
這一目標不可不謂宏大,加之先前的刻意保密形成的助推,Soft Machines公司剛剛走入公眾視線就是大紅大紫的狀態,特別是IPC倍增的高調聲明尤為吸引眼球。日前該公司召開了一次媒體發布會,公布了一些可供玩味的資料,使得我們可以窺探其結構內部的細節、初步分析該技術的前景。
變化不大 指令翻譯依賴軟件層
讓我們先來分析一下Soft Machines提出VISC的技術背景,一個要讓IPC倍增的結構應該長成什么樣子?這是不是在吹牛?
無數歷史經驗表明,一個全新的結構如果想要獲取軟件層面的支持,修改指令集層面是需要慎之又慎的,指令集保持不變才能最大限度地兼容現有的種種軟件,包括操作系統和普通應用程序。所以在VISC的結構框架里,所有的軟件線程需要原封不動地在整個系統棧中向下傳遞,這是Soft Machines唯一的選擇,不出意外地,我們最終看到Soft Machines設計的VISC也的確是原封不動地接受上層軟件的代碼。但是這樣一來就限制了后繼優化的發揮,如何從這些原封不動的軟件線程中抽取指令級并行度呢?
包括全美達在內的一批上世紀90年代的先驅者們已經探索出一條路線:指令翻譯層。在VISC的執行框架中,既有指令集的指令會被一個中間翻譯層翻譯為VlSC硬件特有的硬件指令格式。目前Soft Machines確認支持將兩種上層指令集翻譯成VISC專屬的硬件格式,其中之一是ARMv8,另外一個坊間傳聞可能是x86,但是Soft Machines未予確認。這個軟件翻譯層會帶來多大的翻譯開銷是一個對性能至關重要的問題,但此次并未在公開資料中提及。
這個中間翻譯層和Intel的 ClSC x86指令轉RlSC uops指令格式不同,Intel的翻譯是完全基于硬件完成,優勢是翻譯速度,缺點是喪失了靈活性。也就是說如果翻譯部分需要更新,就需要修改硬件,只能等待下一代芯片,而全美達和VISC都選擇把翻譯層做在軟件上,好處是降低了設計復雜度,允許軟件層面的補丁來持續更新翻譯部分,壞處是性能會受到影響,畢竟每一條指令都要經過翻譯。為了減少這一負面影響,全美達使用了兩種技術,也就是動態翻譯代碼緩存和分層的反饋式代碼優化來解決這個問題,這項技術后來也被NVIDIA做進了丹佛計劃中的自研核心上。Soft Machines在這個問題上則處理得比較含糊,在VISC的媒體通氣會上公布的一頁PPTA出現了與全美達和丹佛類似的Dynamic optimization動態優化流程,但是沒有更進一步披露的情況下,也無法確認這個設計是否暗示著采用了與全美達和丹佛類似的流程。
但是可以確定的是,即便這個動態優化流程存在,也沒有設計得如同全美達和丹佛那樣激進。據外媒報道,Soft Machines曾表態不應該在軟件層面上投入過多的優化精力來追求性能。這是一句非常耐人尋味的話。為什么Soft Machines沒有選擇和以往的幾個設計一樣,在軟件層面做大量的優化來追求性能呢?這就是VISC結構最有意思的地方:Soft Machines雖然吸收了前輩們的經驗引入了軟件翻譯層,但是卻不在軟件層面上做性能優化,它的秘密武器藏在硬件微結構上。
實現指令切分與核心融合 VISC核心微結構解析
在Soft Machines設計的這種執行框架下,軟件翻譯層翻譯完的指令會通過一個全局共享的硬件前端(Global Front End),指令序列會在這里被切分成多個虛擬硬件線程,然后繼續遞交給多個執行核心。 指令序列如何切分呢?我們可以看看這個直觀的例子,以下四條指令看似是只能逐一執行的單線程任務,但通過指令切分,VISC結構可以讓它實現部分并行運算。
1.寄存器1=寄存器2+寄存器3
2.寄存器4=寄存器2+寄存器4
3.將地址01的值裝入寄存器1
4.寄存器仁寄存器1+寄存器4
首先在允許寄存器重命名的情況下,前三條指令可以單獨開辟一個硬件線程來執行。我們來分析一下為什么:第一條指令之前沒有任何指令,肯定可以獨立開來并行執行;第二條指令只需要讀取寄存器2的值,只要寄存器堆的讀寫端口足夠多,同時讀一個寄存器的值沒有問題,因此也可以獨立開來并行執行,第三條指令需要對寄存器1做寫操作,看上去與指令1有沖突,但是通過寄存器重命名可以將第一條指令的寄存器1和第三條指令的寄存器1分別重命名成兩個不同的物理寄存器,因此也可以獨立開來并行執行。但是第四條指令需要用到寄存器1的最新值,也就是剛剛從地址01裝載上來的值,這是一個真實的數據相關關系,不能通過寄存器重命名變換來消除掉,所以第四條指令不再能夠并行。
這個例子演示了最簡單的一個硬件指令切分,從上個世紀60年代開始,業界就在苦苦追求能夠進行全程序范圍的指令分析,從而設計出并行度達到理論最大值的架構,這種架構被稱為數據流架構(Dataflow architecture)。但是截至目前為止,數據流架構仍然沒有在CPU這個層面邁向實用化,事實上,傳統硬件亂序多發射也正是這樣分析指令相關性、抽取指令級并行度的,但是硬件受限于規模,只能在有限的范圍內做這樣的相關性分析,這個范圍被稱為亂序執行窗口的大小。在Intel的最新一代的Skylake微結構上,這個窗口大小約為200多條指令,也就是說,即便考慮進指令融合,目前的硬件分析處理極限也就是在200~300多條指令的范圍上。因此,現在廣泛流行的硬件亂序多發射實際上是一個經過弱化、分析范圍受到極大限制的數據流架構?;谲浖姆治隹梢钥朔布治龇秶蛔愕膯栴},目前的軟件分析可以借助自身的靈活性去分析幾乎無窮大范圍的指令序列,相關的一些優化也做進了標準的編譯優化流程里,只是分析速度會比硬件有數量級程度的落后。
那么VISC的這個解決方案最厲害的部分在哪里呢?注意框架圖中的全局共享前端部件,它畫在Virtual Cores的框架內部,也就是說它同樣是通過硬件進行指令分析。這個硬件分析流程能做到多快的分析速度,能分析多大范圍的指令,在公開資料中都沒有披露,但筆者仍為此感到興奮,因為這個設計有著暗含的一層意思:如果VISC的設計方案,沒有信心在指令級并行度的抽取范圍上超越傳統的硬件亂序多發射,他們就不會選擇把這個關鍵部件做在硬件上,否則就失去了創新技術的意義??梢詷酚^地估計,VISC的設計將可以在指令級并行度的抽取能力上大大超越傳統框架下的亂序多發射,可能更加逼近數據流架構的完全形態,亦或者是業界長期困擾無法解決的線程級推測執行的硬件實現版。無論這個設計方案最后能否達到設計預期,都是一個非常值得欽佩,也非常值得關注的大膽嘗試。
除了硬件切分以外,這個核心微結構里面還存在著另一個亮點。在全局共享前端切分了執行序列以后,被分隔開的各個獨立執行線程可以被動態地分配給下面的多個物理執行核心,分配粒度達到了幾個時鐘周期的級別,并且含糊地提到了可以動態地追蹤各個核心中的數據流向。這是令筆者感到興奮的第二個亮點:業界一直在探索的另外一個方向,核心融合,在VISC的微結構中現身了?!昂诵娜诤稀睂嶋H上就是坊間流傳很久的“逆向超線程”技術,將多個核心的執行資源合并成一個來使用,也是VISC結構的重點。在往期的《微型計算機》也曾介紹過,核心融合技術的一大難題是如何實現各個核心問的低延遲通信。在上面的那個指令切分例子中,如果我們把前三條指令放到三個不同核心上執行,到了第四條指令的時候,就要把負責指令1的核心和負責指令3的核心中產生的新數據傳遞給負責指令4的核心,如果低延遲通信不能實現,逆向超線程實際上也就是鏡中花水中月。Soft Machines宣稱可以在幾個周期的延遲下通過寄存器堆和一級緩存交換數據,尤為令人震驚。
另一個值得關注的問題是推測執行(Speculative Execution)?,F代高性能微結構大量地使用推測執行來提高性能,例如往期介紹過的訪存地址反別名的推測性分析,以及分支預測。如何進行精準的推測,以及如何從錯誤推測中快速回退也是非常重要的高性能設計技術。Soft Machines披露,VISC結構可以在個位數的執行周期中從錯誤預測的分支中回退,但是除此以外沒有披露其他有用的信息。從核心內部的流水線上來看,分派(Dispatch)、寄存器讀與執行和傳統流水線區別并不大,但是整個流水線的前半段才是VISC的不同之處。硬件虛擬線程的形成(formation)、執行資源的分配(aIlocation)、調度(scheduling)花了9-12個周期的時間,對比傳統的硬件亂序多發射流水線,指令從取出到解碼、重命名、推入保留站也需要大約十個時鐘周期左右,從流水線深度上來說VISC與傳統解決方案可能是互相持平。Soft Machines認為自己的設計應該算是短流水,對此筆者不敢茍同,在流水線深度上來說VISC結構并不占優勢。硬件虛擬線程的處理也是頗為核心的要素,可惜的是Soft Machines到目前為止也沒有公布更多的信息,使得外界的判斷多半流于猜測。雖然許多關鍵細節缺失,但從目前已知的信息來看,VISC的這個設計基本已經靠攏了大家想象中的“逆向超線程”,由一個全局共享前端對一個單線程的指令切分成多個虛擬硬件線程,然后多核心的執行資源互相協作執行,允許低延遲地相互傳遞數據,可以說“逆向超線程”是描述這種設計的最好解釋。
可信度不高 疑云重重的測試數據
從設計框架上來看,VISC確實非常超前,實踐了至少兩個目前仍處于探索階段、未見大規模工業化量產的結構設計點,那么它的實測性能如何呢?從VISC開始放出消息到現在,許多人為它宣稱的IPC成倍提高感到震驚,后來更是由震驚轉而懷疑。Soft Machines于今年向媒體公布了一組測試數據,但是仍未能打消懷疑,反而引來了更多外界的質疑。如上一頁右下圖,這組數據的橫軸是SPEC2006的性能測試分數,縱軸是這個SPEC分數水平背后對應的單位能量消耗。乍看之下,VISC的新設計似乎在性能和能耗上完全碾壓了現有亂序多發射設計中的幾個代表性樣本,但實際上并非如此。這張圖被詬病最多的一點就是:圖中的SPEC2006測試分數不是SPECint也不是SPECfp,而是SPECin和SPECfp的幾何平均數,使得其真實性能水平被蓋上了一層偽裝。 SPECint和SPECfp是SPECCPU基準測試程序中的兩大組件,包括截然不同的一批測試項目,分別統計整數性能和浮點性能。由于整數和浮點測試集的性能特征差別太大,一般來說這兩個分數是各自獨立計算的。Soft Machines將這兩者混合統計是一個明顯、不可辨駁的錯誤,也讓外界對VISC產品的性能解讀變得更加困難。當年基于超長指令字結構的安騰系列CPU就是在浮點上領先同時代其他硬件的亂序多發射設計,但是整數性能則十分孱弱。筆者懷疑Soft Machines的這個錯誤是為了掩蓋整數性能的落后,而有意為之。
即便忽視了混合SPECint和SPECfp這個嚴重錯誤,SoftMachines的測試仍舊如同篩子一樣滿是疑點和漏洞。Soft Machines聲稱所有的參測CPU都按照某種“業界標準”把測試分數按照Last-Level-Cache(即處理器的最后一級緩存,如普通CPU的三級緩存)1MB大小的設定進行了調整。筆者從未聽說過有這個“業界標準”的存在,SPEC測試集中的測試程序有的對Last-LeveI-Cache極其敏感,如429.mcf,在一定Last-Level-Cache容量范圍以內它的執行性能幾乎是隨著容量呈現線性增長的,也有的如同403.gcc,在不同的Last-LeveI-Cache大小下性能只有個位數百分點的小幅波動,幾乎可以忽略不計。這個“業界標準”就算是真的存在,又要如何去處理這種情況呢?對不同的測試子項進行不同的加權處理嗎?
另外,目前Soft Machines已經有了TSMC 28nm工藝生產的第一代產品原型,運行頻率為500MHz,可以啟動Linux系統,也就是說可以肯定Soft Machines已經脫離了紙面設計的階段,至少有了可以完整工作的初步原型。但是Soft Machines的所有性能測試都是基于RTL仿真進行的,即便我們大度地假定這個RTL仿真是加入了完整正確時序信息的后仿真、并且忽視后仿真和實際流片之間的差距,這個測試方法也令人難以接受。目前Soft Machines手上只有500MHz的原型,在這個節點上使用簡單的插值推算2GHz及其以上性能水平是很危險的做法。主頻的跨越式提高往往需要借助結構設計與邏輯的變動,但是這樣的變動也同時意味著IPC的值會同時發生變化。具體變動幅度有多大,只有做完了高主頻設計、再重新進行測試評估才能知道。Soft MachiDes認為這樣的仿真測試與真實設計之間只會有5%~10%的差距,在沒有進一步證據予以佐證的情況下,筆者認為這一點存在不可回避的漏洞。
基于這一份公開數據,Soft Machines的VISC概念和原型系統是無法說服業界的,甚至由于數據的呈現方式上出現了重大錯誤,不由得讓人懷疑這樣的數據背后是不是有著某種掩飾性的考量,所以這次的性能披露非但沒有說明什么問題,反而是令Soft Machines的公信力蒙受損失。
保持樂觀態度 如何看待Soft Machines?
雖然測試數據無法令人信服,結構設計的要點也是存有模糊,但是筆者仍然堅持認為對于Soft Machines以及它的VISC產品抱持寬容態度。為什么呢?這要從微結構的發展歷史與目前的行業現狀來解釋一番。
微結構設計和研發,直觀地說,其實非常像是在一片泥濘不堪、布滿深坑和陷阱的地域上尋找埋藏的寶藏。在上世紀八九十年代,業界剛剛開始邁過高性能微結構門檻的時候(九十年代初才誕生第一個基于CMOS的多發射設計),可以說整個業界對這片地域是所知不多的,當時的微結構,即便是量產化的工業級設計,背后的實驗支持和理論分析都遠沒有今天這么雄厚,因此帶有很強的探索性質?;仡^翻閱當時的發展歷史不難看出,有無數瘋狂的概念設計倒在了初步模擬實驗的階段,未能更進一步,頗具代表性的例子就是值預測(Value Prediction)技術的研究。這種技術期望于通過程序執行地址、循環執行次數等信息,在實際計算完成前就預測計算結果,但由于準確率確實不佳,至今未能得到主流認可,投入在這個方向上的大量經費和結構設計專家的人力資源可以說算是掉進坑里了。但是這些投入完全沒有任何意義嗎?
不盡然。這些不成功的設計有兩個作用:其一,明確告訴后人,這里有坑,謹慎繞行;其二,從中可以抽取出有用的實驗數據并加以分析,有可能得到意外收獲。例如在值預測這個大坑旁邊,光筆者所知就有至少兩個被證明有價值的礦點:訪存地址反別名分析(memorv disambiguation)以及循環指令緩存(loop cache)的執行次數預測。
隨著時間推移,越來越多的實驗數據和理論分析積累,有一個大礦點被系統地發掘出來,其附近地域也被公認為安全地帶。這個大礦點就是由上世紀60年代的CDC6600首創,IBM 360/91加強的硬件亂序多發射設計框架。在硬件亂序多發射優勢尚不穩固的時候,亦有一批先驅者奔向其他可能的礦區開始試探性采掘,這里面最有代表性的例子就是超長指令字(VLIW)結構。而隨著Intel Itanium系列的失敗,這片礦點就被公認為價值不如硬件亂序多發射,只在少量場合下繼續使用。隨著越來越多的資源投入到對硬件亂序多發射的開掘,這片礦區的身價進一步水漲船高,最終超越了所有其他選擇,并且在大多數應用場景下至今仍保持壓倒性優勢。截止到這個時間點上,硬件亂序多發射框架就變成了事實上的第一選擇以及近乎是唯一選擇。除了屈指可數的幾個異類以外(全美達、NVIDlA丹佛、Intel安騰,IBM Power6),硬件亂序多發射變成了高性能CPU的立足點。脫離這個框架,踩在其他區域嘗試探索起步的設計幾乎最后都宣告失敗。只有踩在硬件亂序多發射圈定范圍內的設計才能存活,頗有點《切爾諾貝利:晴空》那片輻射變異地帶里安全區的味道。
從2005年前后開始,硬件亂序多發射的增長潛力開始放緩。從Dothan到Merom到Nehalem到最近的Skylake,主體結構基本上沒有出現多少變化,性能的增長只是來源于在同一個結構框架下的小幅調優,每年帶來10%上下的改進,僅此而已。這片安全區仍然安全,能夠保證設計框架的大方向不會出現重大錯誤,但是寶藏也挖空了。
從這個尺度上來說,在傳統硬件亂序多發射框架以外進行探索的這些努力就顯得特別珍貴。并不是每個研究機構、公司都有這樣的信心去挑戰傳統硬件亂序多發射框架幾十年積累下來的優勢,嘗試做出一些顛覆性的改變。在這幾十年中,偏離硬件亂序多發射框架的“探路者”們其實數目不少,但是做得有聲有色、一度曾讓人燃起希望的則少之又少。像VISC這樣的個例,盡管已經顯露出有很大的不靠譜可能性,但是筆者仍然堅持推崇其探索的努力,在挑戰傳統這件事情上,失敗是常態,成功是偶爾。
也有一些外界批評認為,VISC目前的第一代產品原型只能運行在500MHz的頻率上,這是否說明其結構設計的流水化存在問題,使得頻率暴降?這的確有可能,要讓多個物理核心同時追蹤較大范圍的指令相關性,低頻可能是不可避免的,但同時也要看到,作為原型設計推出的東西,而且又是第一代,往往不是以性能為第一設計考量。原型系統的第一目的是測試整個執行框架是否可工作、是否可行,時序只要收斂就好,并不太追求高頻率,以原型系統的頻率來評判其量產頻率是不對的。如果Soft Machines后繼的幾代系統都只能工作在低頻下,才能比較有力地說明其結構流水線確實存在問題。以新結構為賣點的創業公司尤為艱難,當年的全美達公司幾乎一直處于燒錢狀態,盈利很少,希望Soft Machines能堅持下去。同時筆者也希望Soft Machines如果萬一也不幸走到失敗地步,能夠以更加開放一些的態度提供更加詳細的結構設計資料和測試數據,為可能出現的下一個、下一批勇敢闖出安全區的人亮起一座燈塔。