Search

VLIW 身為大量非主流處理器技術基礎的超長指令集,有哪些神奇魅力? - 科技新報 TechNews

2015 年俄羅斯的 MCST(Moscow Center for SPARC Technologies)發表四核心國產處理器 Elbrus-4C,其中兩個核心轉譯 x86 指令集,兩個核心當一般用途,後來有人發表在 Elbrus 處理器平台,執行 2002 年遊戲《上古卷軸 III:魔捲晨風》的畫面。

目前 Elbrus 產品線已發展到 16 核、時脈 2GHz 的 Elbrus-16S。前蘇聯與俄羅斯體系的高效能處理器是非常值得特別介紹的精彩主題,之後有機會再與讀者分享。

扣除標題(Header),Elbrus E2K 的單一指令最多可包含 1~15 個指令,指令編碼長度介於 64 到 512 位元(一般 RISC 都固定 32 位元),說這個不叫「超長指令」,那還真的很難找出更長的例子了。

由「蘇聯的超級電腦之父」Boris Babaian 領銜開發的 Elbrus 系列處理器,技術基礎 E2K 早在 1999 年就揭露技術細節(雖然那時只是處於 Verilog 硬體描述語言階段,尚無實品),Elbrus E2K 也是採用超長指令集架構(Very Long Instruction Word,VLIW)的處理器。

如同 1990 年代 VLIW 曾風行一陣的趨勢,從數位訊號處理器到泛用處理器,從 Philips 的 TriMedia、斯洛伐克的新創公司 DanSoft、ADI / Lucent / Motorola / TI 的諸多數位訊號處理器(DSP)、英特爾 i860、Fujitsu FR-V、Linus Torvalds 曾參過的 Transmeta Crusoe、Sun 的 MAJC、與英特爾 Itanium 等族繁不及備載的案例。

特別一提,1980 年代的 VLIW 先驅者:Multiflow(Trace 7/300)與 Cydrome(Cydra 5),先後被惠普(HP)購併,催生了 VLIW 化的 PA-RISC 處理器計畫,演變成後人熟知的 IA-64 指令集與英特爾 Itanium 處理器。

究竟 VLIW 有什麼神奇的魅力,吸引這麼多廠商共襄盛舉?為何又在今日主流泛用處理器幾乎消失無蹤?讓我們繼續看下去。

當超純量處理器越來越複雜

1980年代末期,隨著超管線(Superpipeline)、超純量(Superscalar)、非循序指令執行(Out-Of-Order Execution)、與預測執行(Speculative Execution)的普及化,激增了處理器同時執行的指令數,電路複雜度也隨之水漲船高。

超純量架構每個時脈週期需擷取(Fetch)、解碼(Decode)、執行(Execute)並寫回(Write Back)兩個以上指令,勢必帶來資源衝突的狀況,像資料相依性(某個指令需要後面指令的資料)、控制相依性(指令需等待條件判斷的結果)、結構相依性(兩個指令同時使用某個執行單元或暫存器檔案),為了處理這些問題,處理器微架構只會更精密複雜,也增加產品跑出臭蟲的機率。

RISC 指令集崛起固然紓解這方面的困難,但仍難斬草除根,為了持續提高效能以因應商業競爭,近代高效能 RISC 處理器還是穩定恐龍化,更不用講 CISC 的 x86 體系了。

當年英特爾 Pentium 的浮點除法臭蟲事件,就告訴世人殘酷的真相:如同軟體,處理器也是會出問題的(尤其偏偏又是難搞的 x86 指令集),今日常見的主流處理器,「Errata Sheets」無不是長長一串,還不少是永遠不會修正的陳年宿疾。

但已生產出貨的硬體,出了問題難以修正是一回事,假如我們將處理器的複雜度「轉嫁」到軟體呢?甚至將指令平行化「綁定」在指令集架構呢?這就是 VLIW 會在 1990 年代短暫流行的時代背景了。

概念起源於大型主機的水平微碼

VLIW 的概念起源非常古老,早在 1946 年,偉大的計算機科學與人工智慧之父 Alan Turing(艾倫‧圖靈,電影《模仿遊戲》的主角)就已經提出水平式微碼(Horizontal Microcode,每個欄位水平對應電路動作,相對於還需要額外解碼的垂直式微碼)的想法,細節由微碼一詞的創造者 Maurice Wilkes 補完,在首創「計算機結構(象徵可回溯相容的指令集架構)」的 IBM S/360 大型主機(Mainframe)誕生過程中,發揮了關鍵性影響力。

在 IBM 的 S/360 問世前,每台電腦的指令集都是針對特殊應用量身訂做,互不相容,這對今天習慣同時在英特爾 AMD VIA 的 x86 處理器,執行相同作業系統與應用程式的我們來說,的確是很難想像的場景。

當然微碼不等於指令,只是用來實做指令的某種手段,如透過微碼組成的微程式產生控制訊號。但之後 1970 年代,某些使用水平式微碼實作控制單元的特殊應用電腦,如 Floating Point Systems 的產品,就導入了可寫入(不再唯讀)的微碼記憶體,使其搖身一變,成為可程式化的 VLIW 電腦,接著就是 1980 年代,像 Multiflow、Cydrome 和 Culler 這些規模較小的電腦公司,企圖打造泛用 VLIW 架構迷你超級電腦的故事了。

將指令平行化直接綁在指令集內

VLIW 的核心精神就在於「將指令平行化直接綁在指令集架構內」,一個指令就「包」了一堆不同性質的運算,一次餵給處理器。以一個簡單的雙運算元加法為例,CISC、RISC 和 VLIW 的樣貌就如下圖,相當簡單易懂。

最理想化的 VLIW,就是「一個蘿蔔一個坑」,每個不同運算性質的指令欄位直接對應專屬的執行單元,無需硬體進行指令排程與分配,統統軟體搞定。這也意味著編譯器(Compiler)產出的二進位執行碼,能否「塞好塞滿」的最佳化排程指令,將決定 VLIW 的實用性。如果最佳化程度不足,只會代表指令內充滿了大量什麼都不做的 NOP(No Operation),不僅浪費執行單元,並傷害執行效能。

軟體回溯相容性是 VLIW 的大麻煩

程式碼過肥是 VLIW 的首要麻煩。同樣出自英特爾之手,VLIW 的 IA-64,程式碼體積高達 x86 的 3.7~4.8 倍,這衝擊充分反映在更大型化的快取記憶體容量與更高效率的記憶體子系統。

二進位執行碼相容性也是 VLIW 的主要限制,如未來處理器增加更多執行單元,降低了執行指令的時間延遲,就必須修改指令集格式與指令排程,也意味著不同版本的程式碼,造成在「不同世代或不同指令派發寬度」的 VLIW 處理器之間移植程式,會比硬體分派指令的超純量架構困難許多。

雖然這並不代表超純量架構不需要軟體最佳化(像英特爾自家編譯器就有對應自家 x86 處理器的參數,如 QxP 就專屬於 90 奈米 Pentium 4「Prescott」並盡量使用新增的 SSE3 指令,以此類推),但起碼確保相容於過去的程式碼,卻是無法否認的重大優勢,這也是今日超純量架構依舊是高效能泛用處理器主流的關鍵因素。

企圖讓 VLIW 通用化的最後努力:英特爾 IA-64

但 VLIW 也並非鐵板一塊、非得「遵循古法」不可,英特爾和惠普(HP)合作的 IA-64 指令集就企圖打造更有彈性、不將指令格式跟執行管線綁死的 VLIW 指令集。

IA-64 將 3 個 41 位元長的指令,與標定內部指令順序的樣板位元(Template),包成一個 128 位元長的指令包。當指令包送進處理器內部的執行單元前,只要藉由讀取樣板位元,即可事先得知「後面該做什麼事」,分配需要的執行單元,指令就「順順的」被循序執行,整個指令包被處理完畢後再退返(Retire),依然享有 VLIW 的大部分優點,只是硬體就可能比純 VLIW 稍微複雜一些。

不過綁了一堆運算的 VLIW,會對條件判斷流程引發的管線停滯(Stall)特別的感冒,從指令集層面設法減少分支指令,也是 IA-64(與眾多 VLIW 指令集)的努力方向。

IA-64 配置了 64 個由軟體控制的引述碼(Predication)暫存器,經由引述碼來控制指令執行流程,取代大多數簡單的條件判斷,不必去賭分支預測的結果,如處理器的運算資源極度充裕,更可「奢侈的兩邊一起執行,只保留需要的結果」(筆者很好奇現實 Itanium 應用程式是不是真的這樣做)。講玄一點,引述執行(Predicated Execution)將「控制流」轉換成「資料流」,換一個說法則是「控制相依性」轉化成「資料相依性」。

如果各位覺得看程式碼很煩,那看這張圖就對了。

談到引述執行,順便一提,其實以 nVidia G80(Tesla)為首的 GPGPU,SIMT(單指令多執行緒)架構也是靠這一千零一招,控制龐大執行緒的執行流程,這也是和 SIMD(單指令多重資料)最大的不同點。

結束「泛用 VLIW」的 Itanium 9500「Poulson」

現在看似「泛用 VLIW」IA-64 如此美好,兼顧 VLIW 的簡潔性與超純量的相容性,但天底下沒有白吃的午餐。英特爾前三個世代的 Itanium 核心(Merced、McKinley、Tukwila),都是簡單的靜態指令排程,單執行緒最多同時執行兩個指令包(6 條指令),為了盡快「完成指令並驅趕之」,必須準備足夠的內部資源,以匹配 6 個指令的組合,固然簡化了處理器內部的資料路徑,但卻也浪費了龐大的內部執行單元,導致 Itanium 核心肥大化,並且讓 Itanium 的單執行緒效能追不上同期的 x86 處理器。

日後由 DEC Alpha 團隊操刀的 Itanium 9500「Poulson」,走上一條徹底否定 VLIW 核心價值的回頭路,直接做成類似超純量的動態指令排程,管線前端就拆光指令包,不同類型的指令有專屬的指令排程佇列,並將同時可發派的指令包倍增成 4 個,實現更高的處理器利用率,相較前代激增 25%~40% 效能。

但這也變相宣布「General Purpose VLIW is Dead」。

2000 年,當英特爾和惠普意氣風發發表 Itanium 處理器與 IA-64 指令集,並宣稱「非循序指令執行已經過時了」(Out-Of-Order is Out-Of-Date),時任 IBM 院士、曾為 RISC 早期研究案 IBM 801 計畫設計者的 Martin Hopkins,對英特爾和惠普發動的反擊與批評,以及兩位 RISC 大師合著的教科書,將 Itanium 描述為「平庸的整數運算處理器」,事後看來統統一語成讖,令人不勝唏噓。

VLIW 還會再起嗎?

CISC 的出現,RISC 的反動,到 x86 至今仍穩坐伺服器和個人電腦的主流地位,我們可清楚理解一個簡單的事實:在不同的時代背景,基於不同的技術限制和應用考量,哪些工作該讓硬體處理,哪些事該丟給軟體搞定,這條軟體和硬體之間的界線,從來就不是固定的,也沒有絕對標準。但從 1964 年 IBM S/360 大型主機建立的回溯相容性觀念,重要性卻深植人心,仍為重中之重,更是 VLIW 遲遲難以跨越的門檻。

在超純量動態排程處理器仍為主流的當下,自從英特爾 Itanium 後,除了 GPU(AMD 第三代繪圖架構 TeraScale)、嵌入式應用或數位訊號處理(DSP),幾乎不見 VLIW 在泛用處理器的身影,俄系血統且身為 x86 相容處理器的 Elbrus,變成瀕臨絕種的珍奇異獸,這也是筆者下一篇專文介紹的主角,敬請拭目以待。

(首圖為示意圖;來源:shutterstock)

延伸閱讀:

Let's block ads! (Why?)



"技術" - Google 新聞
April 06, 2020 at 06:45AM
https://ift.tt/2V4ogDJ

VLIW 身為大量非主流處理器技術基礎的超長指令集,有哪些神奇魅力? - 科技新報 TechNews
"技術" - Google 新聞
https://ift.tt/2vdsyzX
Shoes Man Tutorial
Pos News Update
Meme Update
Korean Entertainment News
Japan News Update

Bagikan Berita Ini

0 Response to "VLIW 身為大量非主流處理器技術基礎的超長指令集,有哪些神奇魅力? - 科技新報 TechNews"

Post a Comment

Powered by Blogger.