《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 業(yè)界動態(tài) > RISCV的高性能計算探索:HWACHA的硬件架構(gòu)解析

RISCV的高性能計算探索:HWACHA的硬件架構(gòu)解析

2019-10-20
關(guān)鍵詞: RISCV HWACHA 硬件架構(gòu)

  最近在學(xué)習(xí)RISCV相關(guān)的東西,發(fā)現(xiàn)了Berkeley一個很有意思的項目:HWACHA。這是一個使用RISCV開源處理器構(gòu)建的類vector的多核異構(gòu)系統(tǒng),,可以用來做低算力的深度學(xué)習(xí)應(yīng)用,。當(dāng)然HWACHA本身也是開源的,,有興趣可以去github下載源碼跑跑看,。這里還是從硬件設(shè)計的角度來分析下這種多核異構(gòu)系統(tǒng)的特點。

  Summary:HWACHA使用了自定義的類Vector指令集,,通過內(nèi)嵌調(diào)用的形式和RISCV ISA整合在一起,。HWACHA的執(zhí)行類似于緊耦合的coprocessor,RISCV core負(fù)責(zé)循環(huán)的控制,,Vector units負(fù)責(zé)主要的向量運算,。兩者通過特殊的指令進行co-work,實現(xiàn)控制和運算錯拍的并行執(zhí)行,。相比傳統(tǒng)的處理器Vector擴展,,HWACHA將integer和vector完全隔離,硬件設(shè)計相對簡單且易于擴展,,可以提供良好的并行性,。不過由于是獨立的指令集,需要和RISCV ISA一起聯(lián)合編譯,對compiler有特殊的要求,。

  HWACHA是Berkeley的一個research 項目,從2011年第一代起,,幾乎每年都有流片,,到V4架構(gòu)推出,已經(jīng)是第14款芯片了,,好快的迭代速度,。HWACHA項目的初衷是探索一個energy-efficient的Vector architecture,基于RISC open ISA,,設(shè)計一種數(shù)據(jù)高并行的可擴展結(jié)構(gòu),。

  這里先簡單介紹下vector的背景。向量計算(Vector)是一種特殊的單指令流多數(shù)據(jù)結(jié)構(gòu),,主要面向科學(xué)運算,,加解密,建模分析等高強度的計算任務(wù),。例如ARM的SVE。相比于傳統(tǒng)的SIMD結(jié)構(gòu)(如ARM的Advanced SIMD擴展),,Vector的主要優(yōu)勢是良好的軟件可移植性,,也就是說相同的binary code,在不同規(guī)模的Vector機器上可以不經(jīng)改動直接執(zhí)行,,同時軟件編程中不需要考慮根據(jù)具體硬件執(zhí)行的寬度進行數(shù)據(jù)重排,。這種軟件透明的設(shè)計大大減輕了軟件設(shè)計和維護的代價,因此在服務(wù)器領(lǐng)域應(yīng)用廣泛,。

640.webp (14).jpg

  HWACHA的Vector指令集基本上類似于SVE,,主要包括Vector寄存器堆VV0-VV255,Predicate寄存器堆VP0-VP15,,以及向量控制寄存器VLEN,。注意這里的vector寄存器有256個之多,大量的寄存器當(dāng)然有利于編譯器優(yōu)化,,提升執(zhí)行性能,,但是會對硬件設(shè)計主要是頻率帶來影響,后邊可以硬件為了支持這么大的寄存器尋址采取了特殊的機制,。由于HWACHA是單獨的指令集,,因此增加了一組標(biāo)量寄存器堆用作控制和標(biāo)量計算。這里比較特殊的是有獨立的地址寄存器堆VA0-VA31,,這樣load和store就不會占用標(biāo)量寄存器號,,有利于更好的schedule計算和存儲。不過這樣就需要在指令編碼中有專用位來指定寄存器的類型,。對傳統(tǒng)的32位指令編碼,,這當(dāng)然是個問題,,會侵占指令編碼空間,不過HWACHA非常激進,,直接采用了64位指令寬度,,這樣一來編碼空間就不是問題了。指令密度當(dāng)然會大不少,,不過考慮到vector本身會以循環(huán)方式執(zhí)行,,指令數(shù)目有限,那么這也不算是個很大的缺點,。

640.webp (12).jpg

  HWACHA的執(zhí)行方式是很有特點的,。首先整個Vector Engine作為一個coprocessor,和主CPU之間是de-couple開的,,通過特殊的指令和傳輸buffer進行交互,。而這種交互過程是interleave的,可以實現(xiàn)back2back的并行,,因此從這個角度來看,,又是couple在一起的。例如一個簡單的for循環(huán)code:

640.webp (13).jpg

640.webp (11).jpg

  HWACHA的編譯器會將其分解為循環(huán)控制部分和向量執(zhí)行部分,,前者在主CPU中執(zhí)行,,后者在Vector engine中執(zhí)行。CPU通過一條特殊指令VF(Vector Fetch)來通知Vector engine開始執(zhí)行,,VF的參數(shù)即為Vector執(zhí)行的起始PC,。在后者執(zhí)行完成后,通過vstop(Vector Stop)指令來表示執(zhí)行暫停,,等待下次VF的輸入,。在Vector engine執(zhí)行的同時,CPU繼續(xù)執(zhí)行,,進入下一拍循環(huán)進行數(shù)據(jù)和控制準(zhǔn)備,。這種方案可以提供CPU和Vector錯開的并行執(zhí)行能力,同時控制和數(shù)據(jù)又能有效的隔離,,一方面簡化控制復(fù)雜度,,另一方面Vector不受限于CPU的硬件結(jié)構(gòu)和帶寬,有很大的設(shè)計靈活性,,比如HWACHA V4的一拖多結(jié)構(gòu):

640.webp (10).jpg

  CPU和Vector之間通過若干個Buffer進行交互,。當(dāng)CPU執(zhí)行到VF指令后,會將其push到VCMDQ中,。Vector通過內(nèi)部的Scalar Unit從VF指定的PC開始取指執(zhí)行,,取到的Vector指令會發(fā)送到Master sequencer中,由其負(fù)責(zé)分發(fā)到各個Vector unit中去執(zhí)行。每個Vector Unit就是一個in-order的Vector核,,包括local sequencer負(fù)責(zé)內(nèi)部調(diào)度,,Vector和Predicate寄存器堆,以及獨立的Vector Load&Store unit,,通過Crossbar和片外存儲相連,。在執(zhí)行過程中,每個Vector Unit都是獨立運行的,,只有指令(操作)從Master sequencer中統(tǒng)一取得。左邊還有一個Vector runahead Unit,,應(yīng)該是負(fù)責(zé)提前計算一些執(zhí)行所需的信息,,保證Vector Units的數(shù)據(jù)流的連貫性。整個架構(gòu)是一種特殊的SIMD形式,,用較少的控制來驅(qū)動大量的計算,,而各個計算單元間又是獨立的,不需要像傳統(tǒng)SIMD指令那樣進行同步,。這樣控制當(dāng)然會簡單,,但同時也無法支持精確異常等控制流事件。不過考慮到Vector的主要應(yīng)用場景,,這并不算是一個很大的問題,。

640.webp (9).jpg

  HWACHA的每個Vector Unit的結(jié)構(gòu)如上圖。Master Sequencer將譯碼后的指令分發(fā)給每個Unit的Lane sequencer,,由后者進行內(nèi)部schedule,,包括dependency的檢查和處置。之前說過HWACHA的Vector寄存器有256個之多,,這么大的寄存器堆在實現(xiàn)上是很不友好的,。為了平衡面積和時序,這里采用了4 BANK 單口SRAM來實現(xiàn)寄存器堆,。這里就有一個問題,,指令通常有2~3個源操作數(shù),單口SRAM如何有效的進行寄存器讀寫,,特別是在幾個操作數(shù)處于同一個RAM BANK中,?HWACHA采用一個稱為“Systolic Bank Execution”的機制,簡單來說就是指令按順序的訪問RAM BANK0~3,,指令i當(dāng)前cycle訪問BANKk,,如果操作數(shù)在這個BANK里,就取出來,,如果不在,,就在下一個cycle訪問BANKk+1。同時指令i+1在當(dāng)前cycle 訪問BANKk-1。這樣的訪問序列不停頓,,指令會一直循環(huán)這個過程直到把所有的操作數(shù)都取到,,就發(fā)送到執(zhí)行單元去執(zhí)行。寫回的數(shù)據(jù)也會進入這個systolic的FIFO,,直到它移動到對應(yīng)的RAM BANK,,再把數(shù)據(jù)寫回到寄存器堆中。這種繁瑣的機制更多的出于研究性質(zhì),,用來探索采用SRAM實現(xiàn)寄存器的讀寫的可行性,,而不論從性能上,還是硬件實現(xiàn)上都不是個友好的方案,。通常還是采用多級可流水的,,多讀口的registerfile實現(xiàn)更合適。

  整個執(zhí)行單元的設(shè)計并沒有太多的特殊之處,,該有的arithmetic unit都有了,。比較有特點的是它把ALU放到了寄存器堆的BANK里,每個BANK都有一個,。這樣的設(shè)計主要用來加速單cycle ALU的執(zhí)行,,是對HWACHA SRAM寄存器堆結(jié)構(gòu)讀寫效率不高的缺陷的一種彌補。

640.webp (8).jpg

  整體來說,,HWACHA是一個偏研究性質(zhì)的架構(gòu),,很多問題的解決并非從工程的思路出發(fā),選擇簡潔高效的方案,,而是更多地進行多種可能性的探索,。除去這些,HWACHA的控制數(shù)據(jù)de-couple的想法,,以及Vector部分并行運算的軟硬件協(xié)同支持,,都很有特點,同時HWACHA中指令集層面的部分思路,,也已經(jīng)提交作為RISCV open ISA vector extension的標(biāo)準(zhǔn),。從這個角度來看,HWACHA的探索很有意義,,也很成功,。


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點,。轉(zhuǎn)載的所有的文章、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容、版權(quán)和其它問題,,請及時通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟損失,。聯(lián)系電話:010-82306118,;郵箱:[email protected]