ISA指令集基礎應用


ISA指令集基礎應用

ISA(Instruction Set Architecture,指令集體系結構)的縮寫,指令集因系統性和復雜性,稱為(Instruction Set Architecture,ISA)。指令集對上限定了軟件的基本功能,對下制訂了硬件實現的功能目標,指令系統的設計(指令集中應該包含哪些指令,指令應該采用什么樣的格式表示)是計算機系統設計中十分重要的一環。

 

 

 重構處理器架構基礎

Adi Fuchs 為AI 加速器的架構基礎,包括指令集架構 ISA、特定領域的 ISA、超長指令字 (VLIW) 架構、脈動陣列、可重構處理器、數據流操作、內存處理。

本文主要參考文獻鏈接:

https://medium.com/@adi.fu7/ai-accelerators-part-iii-architectural-foundations-3f1f73d61f1f

https://mp.weixin.qq.com/s/zOwqwUJzZdTFcmuJqAwzug

https://blog.csdn.net/weixin_46584887/article/details/119709372

指令集架構——ISA

ISA 描述了指令和操作如何由編譯器編碼,由處理器解碼和執行,處理器架構中面向程序員的部分。常見的例子是 Intel 的 x86、ARM、IBM Power、MIPS 和 RISC-V。可以將 ISA 視為處理器支持所有操作的詞匯表。由算術指令(如加、乘)、內存操作(加載、存儲)和控制操作(例如,在 if 語句中使用的分支)組成。

 

 

 CPU ISA 已被分類為精簡指令集計算 (RISC) 和復雜指令集計算 (CISC):

  • RISC ISA 由簡單的指令組成,支持少量簡單操作(加、乘等)。所有指令的位長相同(例如 32 位),RISC 指令的硬件解碼器認為是簡單的;
  • 相反,在 CISC ISA 中,不同的指令可以有不同的長度,單個指令就可以描述操作和條件的復雜組合。

CISC 程序比等效的 RISC 程序代碼占用空間更小,即存儲程序指令所需的內存量。單個 CISC 指令可以跨越多個 RISC 指令,可變長度的 CISC 指令編碼為使得最少的位數代表最常見的指令。為了體現復雜指令帶來的優勢,編譯器需要做的足夠復雜才能實現。

 

 

 x86(橙色)相對於 ARM(紫色)的計算市場遞減率預測。圖源:AMD/ExtremeTech

早在 1980 年、1990 年和 2000 年代初期,就有「RISC 與 CISC 之戰」,基於 x86 的 Intel 和 AMD 主要專注於 CISC ,ARM專注於 RISC。每種方法都有利弊,由於基於 ARM 的智能手機的蓬勃發展,RISC 在移動設備中占據了上風。隨着亞馬遜基於 ARM 的 AWS Graviton 處理器等的發布,RISC 在雲中也開始占據主導地位。

特定領域的 ISA

RISC 和 CISC 都是用於構建通用處理器的通用指令集架構。但在加速器的背景下, CISC 與 RISC 相比, RISC 具有簡單性和簡潔性,更受歡迎(至少對於智能手機而言)。

 

 

 45nm CMOS 處理器中執行 ADD 指令能耗。圖源:M.Horowitz ISSCC 2014

很多 AI 加速器公司采用特定領域的 ISA。鑒於現有的精簡指令集架構(以及潛在的處理核心),可以通過僅支持目標應用領域所需的指令子集來進一步減少。特定領域的 ISA 進一步簡化了處理內核和硬件 / 軟件接口,以實現高效的加速器設計。在通常由線性代數和非線性激活組成的 AI 應用中,不需要許多「奇異」類型的運算。因此,ISA 可以設計為支持相對較窄的操作范圍。

使用現有 RISC ISA 的簡化版本,一些 RISC 公司(如 ARM )出售現有 IP,即支持完整 ISA 的現有處理內核,可用作定制處理的基線,用於加速器芯片的核心。這樣,加速器供應商就可以依賴已經過驗證並可能部署在其他系統中的基線設計;這是從頭開始設計新架構更可靠的替代方案,對於工程資源有限、希望獲得現有處理生態系統支持或希望縮短啟動時間的初創公司尤其有吸引力。

超長指令字 (VLIW) 架構

VLIW 架構是由 Josh Fisher 在 20 世紀 80 年代早期提出,當時集成電路制造技術和高級語言編譯器技術出現了巨大的進步。主要思想是:

  • 將多個相互無依賴的指令封裝到一條超長的指令字中;
  • CPU 中有對應數量的 ALU 完成相應的指令操作;
  • 指令之間的依賴性和調度由編譯器來完成。

就像特定領域的 ISA 可以被認為是 RISC 思想(更簡單的指令,支持的操作較少)的擴展,可以將 CISC 進行多個操作組合成單個復雜指令擴展,這些架構稱為超長指令字 (VLIW)。

VLIW 架構由算術和存儲單元的異構數據路徑陣列組成。異構性源於每個單元的時序和支持功能的差異:例如,計算簡單邏輯操作數的結果可能需要 1-2 個周期,內存操作數可能需要數百個周期。

 

 

 一個簡單的 VLIW 數據路徑框圖。圖源:普林斯頓大學

VLIW 架構依賴於一個編譯器,該編譯器將多個操作組合成一個單一且復雜的指令,該指令將數據分派到數據路徑陣列中的單元。例如,在 AI 加速器中,這種指令可以將張量指向矩陣乘法單元,將數據部分並行發送到向量單元和轉置單元等等。

VLIW 架構的優勢在於,通過指令編排處理器數據路徑的成本可能顯着降低;缺點是需要保證數據路徑中各個單元之間的工作負載得到平衡,以避免資源未得到充分利用。因此,要實現高性能執行,編譯器需要能夠進行復雜的靜態調度。編譯器需要分析程序,將數據分配給單元,知道如何對不同的數據路徑資源計時,在給定時間利用最多單元的方式將代碼分解為單個指令。歸根結底,編譯器需要了解不同的數據路徑結構及時序,解決計算復雜的問題,以提取高指令級並行 (ILP) 實現高性能執行。

ISA兩大陣營

1)划分依據

按照指令系統復雜程度的不同,ISA 可分為 CISC 和 RISC 兩大陣營。CISC 是指復雜指令系統計算機(Complex Instruction Set Computer);RISC 是指精簡指令系統計算機(Reduced Instruction Set Computer)。        

2)CISC體系結構

CISC 體系結構:通過設置一些功能復雜的指令,把一些原來由軟件實現的、常用的功能改用硬件指令實現,提高計算機的執行速度。越來越多的復雜指令被加人指令系統中,逐漸形成了一個龐大且復雜的指令集。

CISC結構追求的目標是:強化指令功能,減少程序的指令條數,以達到提高性能的目的。早期的計算機系統幾乎全都是CISC架構,特別是微型機中 Intel 和 AMD 早期的 CPU 都是純粹的 CISC體系架構,大量軟件也是基於 CISC 架構來開發的,廣泛流行的操作系統軟件。

3)RISC體系結構

20世紀70年代,RISC技術誕生,在加州大學伯克利分校 David Patterson 和斯坦福大學 John Hennessy 等人的推廣下得以廣泛實現。

RISC體系結構的基本思想:盡量簡化計算機指令功能,只保留那些功能簡單、能在一個節拍內執行完成的指令,把較復雜的功能用段子程序實現。 RISC通過減少指令種類、規范指令格式和簡化尋址方式等方法,方便處理器內部的並行處理,提高超大規模集成電路(VLSI)器件的使用效率,大幅度提高處理器的性能。

RISC 指令系統僅包含最常用的簡單指令,可以通過硬件優化設計,把時鍾頻率提得很高,從而實現整個系統的高性能。RISC 技術在 CPU 芯片上設置大量寄存器,保存常用的數據,大大減少對存儲器的訪問,用高速的寄存器訪問取代低速的存儲器訪問,提高系統整體性能。

4)二者市場

CISC 占據了桌面和服務器領域的大部分市場,RISC 占據了移動和物聯網領域大部分市場,但只是代表了 ISA 設計的兩個主要方向,在新一代的 CPU 設計中,正在逐漸融合 RISC和 CISC 技術,取長補短。

常用ISA簡介

1)X86指令集

X86 是一個指令集家族,即許多與早期 X86 指令集 (Intel 8086 CPU 的指令集) 兼容的指令集。按微處理器體系結構不同,X86 指令集家族又分為 X86-32(IA-32) 和 X86-64(AMD64)。

X86 指令集是目前世界上最流行的指令集,認為是現存唯一的 CISC 指令集。架構設計可能並不一直是處理器中做的最好的,但是 X86 的兼容性做的最好,即使在如今64位時代下,能運行32位乃至16位的程序。

2)ARM指令集

ARM(Acom RISC Machine)屬於 RISC 指令集架構,得益於 RISC 架構簡潔的優勢,可以很容易地實現低功耗需求,降低設計難度和散熱性要求,具備良好的擴展性以滿足眾多需求。這使得 ARM 指令集架構非常適合嵌入式系統設計,ARM 如今占據了手機等移動設備的大部分市場份額,發展勢頭良好。

ARM 公司本身既不生產芯片也不銷售芯片,只出售芯片技術授權。

ARM 的授權方式主要有兩類:

核心級授權:只提供處理器核,可以和其他模塊組合在一起形成可用的芯片;

架構級授權:指令集授權,可以使用 ARM 的 ISA,內核可以自行設計,但仍須服從 ARM 體系架構。

3)MIPS指令集

MIPS 是一種典型的 RISC 指令集架構,最早是在20世紀80年代初期由斯坦福大學John Hennessy教授領導的研究小組研發的。除了 ARM 以外最流行的 RISC 架構就是 MIPS了,中國的“龍芯”處理器是基於MIPS指令集的,經過拓展並形成了指令系統。

與當前商業化最成功的 ARM 架構相比,MIPS 指令比 ARM 稍微多一些,執行部分運算更為靈活;MIPS 的內核寄存器比 ARM 多倍,在同樣的性能下 MIPS 的功耗會比 ARM 更低,在同樣功耗下性能比 ARM 更高;在架構授權方面 MIPS 更為開放,允許授權商自行更改設計。MIPS學院派的發展風格導致商業進程遠遠滯后於 ARM,圍繞 MIPS 的軟件生態比 ARM 差很多。

脈動陣列

脈動陣列由 H. T. Kung 和 C. E. Leiserson 於 1978 年引入。2017 年,Google 研發的 TPU 采用脈動陣列作為計算核心結構。

脈動陣列本身的核心概念就是讓數據在運算單元的陣列中進行流動,減少訪存次數,使得結構更加規整,布線更加統一,提高頻率。整個陣列以「節拍」方式運行,每個 PE (processing elements)在每個計算周期處理一部分數據,將傳達給下一個互連的 PE。

 

 

 矩陣通過 4x4 脈動網。圖源:NJIT

脈動結構是執行矩陣乘法的有效方式(DNN 工作負載具有豐富的矩陣乘法)。谷歌的 TPU 是第一個使用 AI 的脈動陣列。因此,在這之后,其他公司也加入了脈動陣列行列,在加速硬件中集成了脈動執行單元,例如 NVIDIA 的 Tensor Core。

可重構處理器

所熟悉的處理器包括 CPU、GPU 和一些加速器,流程依賴於預先確定數量的算術單元和運行時行為,這些行為是在運行時根據執行的程序指令確定的。其他類別的處理器稱為「可重構處理器」。

 

 

 基礎 FPGA 架構。圖源:Xilinx

可重構處理器由包含互連計算單元、內存單元和控制平面的復制陣列組成。為了運行程序,專用編譯器會構建一個配置文件,這個文件包含設置數組中每個元素行為的控制位。最常見的可重構處理器類別是現場可編程門陣列 (FPGA)。

FPGA 通過啟用位級可配置性來支持廣泛的計算范圍:可以配置算術單元實現對任意寬度數量進行操作的功能,可以融合片上存儲塊以構建不同大小的存儲空間。 

可重構處理器的一個優點是可以對用硬件描述語言 (HDL) 編寫的芯片設計進行建模;這使公司能夠在幾個小時內測試他們的設計,不是流片芯片,這個過程可能需要幾個月甚至幾年的時間。FPGA 的缺點是細粒度的位級可配置性效率低下,典型的編譯時間可能需要數小時,所需的額外線路數量占用大量空間,在能量上也是浪費。因此,FPGA 通常用於在流片前對設計進行原型設計,由此產生的芯片將比FPGA 同類產品性能更高、效率更高。

 

 

 處理器架構的性能、功耗和靈活性的比較。圖源:ACM Computing Surveys

雖然 FPGA 在性能和功耗方面存在問題,但可重構性仍然是 AI 加速器一個非常理想的特性。一個芯片的設計周期大約是 2-3 年,每天會有數不清的實驗依賴芯片運行。一個近期制造完成並花費數百萬美元的芯片,往往是基於兩年多前存在的 AI 模型的假設設計的,可能與當前的模型無關。

為了將高效、性能和可重構性結合起來,一些初創公司設計了可重構處理器,稱為 CGRA(Coarse-Grained Reconfigurable Arrays)。

CGRA 在 1996 年提出,與 FPGA 相比,CGRA 不支持位級可配置性,通常具有更嚴格的結構和互連網絡。CGRA 具有高度的可重構性,但粒度比 FPGA 更粗。

數據流操作

數據流(Dataflow)已經有一段時間了,起源可以追溯到 1970 年代。不同於傳統的馮諾依曼模型,計算的另一種形式。

在傳統的馮諾依曼模型中,程序被表示為一系列指令和臨時變量。但在數據流模型中,程序被表示為數據流圖(DFG,dataflow graph),其中輸入數據的一部分是使用預定的操作數(predetermined operands)計算的,計算機中的數據根據所表示的圖一直「流動」到輸出,這一過程由類似圖形的硬件計算而來。硬件本質上是並行的。

 

 

 深度學習軟件到數據流圖映射的例子。圖源:Wave Computing — HotChips 2017

在 AI 加速器的背景下,執行數據流有以下兩個優勢:

  • 深度學習應用程序是結構性的,因此有一個由應用程序層的層級結構決定的計算圖。數據流圖已經被放入代碼中。馮諾依曼應用程序首先被序列化為一系列指令,這些指令隨后需要(重新)並行化以提供給處理器;
  • 數據流圖是計算問題的架構不可知(architecturally-agnostic)表示。抽象出所有源於架構本身的不必要的約束(例如,指令集支持的寄存器或操作數等),程序的並行性僅受計算問題本身的固有並行維度的限制,不是受計算問題本身的並行維度限制。 

內存處理

研究人員在提高加速器的計算吞吐量 (FLOP) 上花費了大量精力,即芯片(或系統)每秒提供的最大計算數量。片上計算吞吐量並不是全部,還有內存寬帶,片上計算速度超過片外內存傳輸數據的速度,造成性能瓶頸。從能量角度來看, AI 模型中存在着很高的內存訪問成本,將數據移入和移出主存儲器比進行實際計算的成本高幾個數量級。

 

 45nm CMOS 技術的典型內存和計算成本。圖源:ISSCC 2014 / M.Horowitz

AI 加速器公司為降低內存成本常采用「近數據處理,near-data processing」方法。這些公司設計了小型且高效的軟件控制存儲器(稱為便箋存儲器,Scratchpad Memory),將處理過的部分數據存儲在核心芯片上,用於高速和低功耗並行處理。通過減少對片外存儲器(大而遠存儲器)的訪問次數,這種方法在減少訪問數據時間和能源成本方面邁出了第一步。

近數據處理的極端是 PIM(Processing-in-Memory),這種技術可以追溯到 1970 年代。在 PIM 系統中,主內存模塊是用數字邏輯元件(如加法器或乘法器)制造的,計算處理位於內存內部。因此,不需要將存儲的數據傳送到中間線緩沖器。商業化的 PIM 解決方案仍然不是很常見,因為制造技術和方法仍然穩定,設計通常認為是僵化的。

 

 

 基於點積模擬處理的神經形態計算。圖源:Nature Communications

許多 PIM 依賴於模擬計算(analog computations)。在 AI 應用中,加權點積在模擬域中的計算方式類似於大腦處理信號的方式,這就是為什么這種做法通常稱為「神經形態計算」的原因。由於計算是在模擬域中完成的,但輸入和輸出數據是數字的,神經形態解決方案需要特殊的模數和數模轉換器,但這些在面積和功率上的成本都很高。

 

參考鏈接:

https://medium.com/@adi.fu7/ai-accelerators-part-iii-architectural-foundations-3f1f73d61f1f

https://mp.weixin.qq.com/s/zOwqwUJzZdTFcmuJqAwzug

https://blog.csdn.net/weixin_46584887/article/details/119709372

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM