• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      RISC-V 指令集架構(gòu)研究綜述*

      2021-02-25 12:16:40武延軍吳敬征
      軟件學(xué)報(bào) 2021年12期
      關(guān)鍵詞:指令集寄存器內(nèi)存

      劉 暢,武延軍,吳敬征,趙 琛

      1(中國科學(xué)院 軟件研究所 智能軟件研究中心,北京 100190)

      2(中國科學(xué)院大學(xué),北京 100190)

      3(計(jì)算機(jī)科學(xué)國家重點(diǎn)實(shí)驗(yàn)室(中國科學(xué)院 軟件研究所),北京 100190)

      1 前 言

      現(xiàn)代信息系統(tǒng)的設(shè)計(jì)正在出現(xiàn)幾個(gè)新的趨勢(shì):(1) 注重軟硬件協(xié)同的設(shè)計(jì)模式.例如,英偉達(dá)公司推出CUDA 通用并行計(jì)算架構(gòu)[1],發(fā)揮GPU 的計(jì)算能力提升系統(tǒng)性能;Costan 等人[2]提出了硬件擴(kuò)展Sanctum,協(xié)助軟件系統(tǒng)實(shí)現(xiàn)強(qiáng)隔離功能.(2) 面向需求的系統(tǒng)精準(zhǔn)定制化.例如,近年來出現(xiàn)的AI 加速芯片,通過芯片架構(gòu)的定制,滿足神經(jīng)網(wǎng)絡(luò)推理或訓(xùn)練的算力需求[3].在這樣的趨勢(shì)下,探究系統(tǒng)軟硬件的多種組合方式,設(shè)計(jì)出最合適應(yīng)用場景的系統(tǒng)架構(gòu),具有較高的理論價(jià)值和實(shí)踐意義.與此同時(shí),為了適應(yīng)計(jì)算環(huán)境與應(yīng)用環(huán)境的不斷變化,計(jì)算機(jī)軟硬件的發(fā)展也存在一種逐漸開放的趨勢(shì).以軟件為例,從早期代碼高度集中、與機(jī)器高度耦合,到1964 年Multics 操作系統(tǒng)[4]推動(dòng)系統(tǒng)的通用化進(jìn)程,UNIX 操作系統(tǒng)[5]開放用戶任務(wù)、開啟內(nèi)核時(shí)代,再到Mach 微內(nèi)核的問世[6]、GNU 項(xiàng)目的發(fā)起以及Linux 內(nèi)核的公開發(fā)布,開源軟件思想深入人心,體系結(jié)構(gòu)也逐漸走向設(shè)計(jì)公開化、內(nèi)容多樣化、管理多元化、研發(fā)社區(qū)化、功能可定制化的局面.在這樣的背景下,如何有效整合多種軟硬件資源,發(fā)揮開放系統(tǒng)的獨(dú)特優(yōu)勢(shì),精準(zhǔn)滿足用戶任務(wù)需求,成為關(guān)注重點(diǎn).指令集架構(gòu)(instruction set architecture,簡稱ISA)作為軟件與硬件之間的交互規(guī)范,定義了軟硬件的組合或整合方式.在上述趨勢(shì)和背景下,迫切需要一種新的指令集,既滿足軟硬件的深度協(xié)同融合和靈活組合,又具備開放特性.

      RISC-V 是一種新興的開源精簡指令集架構(gòu),由加州大學(xué)伯克利分校在2010 年首次發(fā)布[7].RISC-V 的出現(xiàn)和迅速發(fā)展有其必然的原因,它是建立在現(xiàn)有的體系結(jié)構(gòu)(如x86、ARM、MIPS 等)經(jīng)長期發(fā)展所暴露出的種種問題之上,順應(yīng)現(xiàn)代信息系統(tǒng)設(shè)計(jì)需求和體系結(jié)構(gòu)發(fā)展趨勢(shì)而生的:(1) 現(xiàn)有體系結(jié)構(gòu)往往缺乏開放性,存在許多知識(shí)產(chǎn)權(quán)、政治干預(yù)等非技術(shù)性問題.例如,Intel 公司持有x86 架構(gòu)的專利(1978 年開始),使用x86 指令集相關(guān)技術(shù)需要向其支付高昂的授權(quán)費(fèi)用,對(duì)x86 指令集的模擬也將引發(fā)法律上的爭議[8].這種封閉的態(tài)勢(shì)與體系結(jié)構(gòu)發(fā)展的開放趨勢(shì)背道而馳,抬高了系統(tǒng)研發(fā)與成果轉(zhuǎn)化的成本,阻礙了技術(shù)的推廣和進(jìn)步.RISC-V 具有開源、免費(fèi)、開放、自由的特點(diǎn),其基金會(huì)總部于2020 年3 月正式遷往永久中立國瑞士[9],更是釋放了堅(jiān)持服務(wù)全世界的信號(hào),使任何組織和個(gè)人都可以不受地緣政治影響、自由平等地使用RISC-V.(2) 現(xiàn)有體系結(jié)構(gòu)經(jīng)過長期發(fā)展,多個(gè)版本的迭代,積累了許多歷史遺留問題.基于各歷史版本的技術(shù)產(chǎn)品在市場生態(tài)中共存,使得新版本的研發(fā)必須考慮向后兼容性,去支持一些過時(shí)的定義和其實(shí)不需要的技術(shù)特性.例如,AMD64 是對(duì)32 位x86 架構(gòu)的64 位擴(kuò)展,面向64 位開發(fā)與應(yīng)用環(huán)境;但它同時(shí)仍要向后兼容32 位甚至16 位的x86 架構(gòu),使早期x86 架構(gòu)下開發(fā)的應(yīng)用同樣可以在AMD64 系統(tǒng)中正常運(yùn)行.這種積重難返的狀態(tài)削弱了現(xiàn)有體系結(jié)構(gòu)的可定制化能力,難以滿足現(xiàn)代信息系統(tǒng)對(duì)于多樣化的工作環(huán)境與功能表現(xiàn)的需求.RISC-V 作為一種從零開始設(shè)計(jì)的新體系結(jié)構(gòu),吸收了現(xiàn)有各體系結(jié)構(gòu)優(yōu)點(diǎn)的同時(shí),去除了對(duì)歷史遺留問題的顧及和舊有技術(shù)的依賴;進(jìn)一步地,RISC-V 采用模塊化設(shè)計(jì),并提供大量自定義編碼空間以支持對(duì)指令集的擴(kuò)展,從而允許開發(fā)者根據(jù)資源、能耗、權(quán)限、實(shí)時(shí)性等不同需求,基于部分特定的模塊和擴(kuò)展指令集進(jìn)行精細(xì)化的系統(tǒng)設(shè)計(jì)研發(fā),體現(xiàn)了強(qiáng)大的系統(tǒng)可定制化能力.(3)現(xiàn)有主流架構(gòu)的文檔資源種類繁多、內(nèi)容冗長,學(xué)習(xí)與維護(hù)的成本較高,使開發(fā)者難以在短時(shí)間內(nèi)掌握所需的技術(shù),遇到問題時(shí)也不易迅速定位到相關(guān)的信息區(qū)間.例如,ARMv8-A 架構(gòu)的官方手冊(cè)[10]僅一卷就多達(dá)8 538 頁;相比之下,RISC-V 官方手冊(cè)僅有兩卷329 頁,包括238 頁的指令集手冊(cè)[11]和91 頁的特權(quán)架構(gòu)手冊(cè)[12],文檔精簡,學(xué)習(xí)門檻更低,更有助于研發(fā)團(tuán)隊(duì)的不斷壯大和技術(shù)實(shí)力的不斷進(jìn)步.

      因此,對(duì)于RISC-V 的研究已成為近年來學(xué)術(shù)界和工業(yè)界的一大熱點(diǎn),涌現(xiàn)了許多突破性成果,如西部數(shù)據(jù)公司研發(fā)的基于RISC-V 的通用架構(gòu)SweRV[13]、阿里巴巴公司研發(fā)的64 位高性能嵌入式RISC-V 處理器Xuantie-910[14]、Koch 等人設(shè)計(jì)的嵌入式開源FPGA(field programmable gate array,現(xiàn)場可編程門陣列)框架FABulous[15]、中國科學(xué)院計(jì)算技術(shù)研究所在RISC-V 中國峰會(huì)發(fā)布的開源高性能RISC-V 處理器核“香山”[16]、上海交通大學(xué)開源的基于RISC-V 的可信執(zhí)行環(huán)境安全系統(tǒng)“蓬萊”[17].其中也包括了對(duì)RISC-V 與不同應(yīng)用領(lǐng)域結(jié)合方式的探索,如Kadomoto 等人[18]利用RISC-V 芯片改善了無線總線接口技術(shù),以促進(jìn)對(duì)于小型機(jī)器人的研究; Di Tucci 等人[19]將RISC-V 應(yīng)用于基因組處理,提出了專用領(lǐng)域架構(gòu)SALSA.這些系統(tǒng)、工具都是利用了RISC-V 在資源依賴性、低功耗性、易用性、可定制性、可擴(kuò)展性等方面的優(yōu)勢(shì),因而能夠高效、迅速而低成本地完成各自領(lǐng)域中的系統(tǒng)級(jí)任務(wù).

      RISC-V 作為一種指令集架構(gòu),一方面,它規(guī)定了硬件設(shè)備在設(shè)計(jì)電路、組裝元件時(shí)應(yīng)當(dāng)實(shí)現(xiàn)的功能目標(biāo);根據(jù)指令集的內(nèi)容,決定運(yùn)算單元、存儲(chǔ)單元等元件的種類、數(shù)目、位寬及接線方式.另一方面,它是對(duì)硬件能力的一種抽象,提供了機(jī)器所能完成的操作種類、地址空間大小、數(shù)據(jù)格式、訪問權(quán)限信息;上層軟件應(yīng)用可以將指令集視為硬件運(yùn)行環(huán)境,而無需特別關(guān)注具體的硬件實(shí)體.圖1 直觀地解釋了RISC-V 在系統(tǒng)中的定位.

      Fig.1 The translation and execution process of application code圖1 系統(tǒng)對(duì)應(yīng)用程序代碼的翻譯和執(zhí)行過程

      對(duì)于RISC-V 的研究將至少著眼于4 個(gè)層面中的一個(gè):對(duì)于底層RISC-V 硬件的研究、對(duì)于RISC-V 指令集自身的研究、對(duì)于上層RISC-V 系統(tǒng)(主要是基礎(chǔ)軟件)的研究,對(duì)于頂層應(yīng)用的研究.而在研究內(nèi)容上,普遍集中在系統(tǒng)或應(yīng)用的功能、性能、安全這3 個(gè)方面.本文圍繞RISC-V 體系結(jié)構(gòu)設(shè)計(jì)過程和主要關(guān)注點(diǎn),從上述4個(gè)層面對(duì)相關(guān)研究進(jìn)行了總結(jié).這些研究工作均來源于對(duì)DBLP 文獻(xiàn)數(shù)據(jù)庫的檢索,共涉及126 篇論文文獻(xiàn)(截至2021 年7 月).從論文發(fā)表的期刊和會(huì)議看,有65 篇來自CCF-A 類期刊或會(huì)議中,占比超過50%;有104 篇發(fā)表在計(jì)算機(jī)體系結(jié)構(gòu)領(lǐng)域的期刊或會(huì)議中,占比超過82%,其余22 篇論文分別發(fā)表在網(wǎng)絡(luò)與信息安全、軟件工程、系統(tǒng)軟件等領(lǐng)域的期刊或會(huì)議中.對(duì)這些RISC-V 研究工作的分布統(tǒng)計(jì)見表1.

      本文第1 節(jié)介紹RISC-V 相關(guān)概念及其優(yōu)勢(shì),并對(duì)本文結(jié)構(gòu)進(jìn)行概述.第2 節(jié)回顧近年來對(duì)于RISC-V 指令集的研究,包括對(duì)于各指令集擴(kuò)展現(xiàn)狀的分析.第3 節(jié)總結(jié)處理器、加速器等支持RISC-V 系統(tǒng)的硬件工作環(huán)境.第4 節(jié)討論各種RISC-V 系統(tǒng)的設(shè)計(jì)及其要點(diǎn).第5 節(jié)介紹一些利用RISC-V 實(shí)現(xiàn)性能、安全提升的應(yīng)用案例.第6 節(jié)展望RISC-V 架構(gòu)未來可能的發(fā)展方向和研究點(diǎn).最后在第7 節(jié)對(duì)本文內(nèi)容進(jìn)行總結(jié).

      2 RISC-V 指令集

      RISC-V 的指令集包括基礎(chǔ)指令集和擴(kuò)展指令集兩類.RISC-V 指令集架構(gòu)被定義為一個(gè)基礎(chǔ)指令集和若干可選擴(kuò)展指令集的組合,并在一種權(quán)限模式下進(jìn)行工作.本節(jié)對(duì)RISC-V 各指令集的當(dāng)前狀態(tài)進(jìn)行了總結(jié)和分析,并簡要介紹了RISC-V 的權(quán)限規(guī)則.

      Table 1 Source distribution of major research results 表1 主要研究成果來源分布

      2.1 RISC-V基礎(chǔ)指令集

      RISC-V 的基礎(chǔ)指令集包含了能夠?yàn)榫幾g器、匯編器、鏈接器、操作系統(tǒng)(結(jié)合額外的特權(quán)操作)等提供 必要功能實(shí)現(xiàn)的最小指令集合.它們是構(gòu)筑ISA 和軟件工具鏈的骨架,可以圍繞它們來構(gòu)建更多定制的處理器ISA.根據(jù)最新的RISC-V 規(guī)范[11],RISC-V 共有5 種基礎(chǔ)指令集:RVWMO、RV32I、RV64I、RV32E、RV128I,分別代表了弱內(nèi)存次序指令集、32 位整數(shù)指令集、64 位整數(shù)指令集、32 位嵌入式整數(shù)指令集、128 位整數(shù)指令集.其中,RV32I 和RV64I 是最主要的兩種,分別針對(duì)32 位和64 位工作環(huán)境而設(shè)計(jì);RV32E 是為嵌入式環(huán)境設(shè)計(jì)的一個(gè)RV32I 的簡化版本,RV128I 將用于未來的128 位環(huán)境,而RVWMO 描述了RISC-V 所使用的內(nèi)存一致性模型.任何一種RISC-V 指令集架構(gòu)都必須完整地實(shí)現(xiàn)一種基礎(chǔ)指令集.

      2.1.1 RV32I 和RV64I 指令集

      RV32I 指令集和RV64I 指令集都使用32 個(gè)通用寄存器(x 寄存器)和一個(gè)額外的非特權(quán)寄存器(pc 寄存器),如圖 2 所示[11].區(qū)別在于寄存器的位寬(XLEN),RV32I 中是 32 位(XLEN=32),而 RV64I 中是 64 位(XLEN=64).x 寄存器又稱為“整數(shù)寄存器”,可以存放XLEN 長度的數(shù)值,這些數(shù)值可以被各指令解釋為布爾值的集合、二進(jìn)制有符號(hào)整數(shù),或者二進(jìn)制無符號(hào)整數(shù)的二補(bǔ)碼.其中,x0 寄存器的所有位都被硬布線為0 值,不可更改,因此也被稱作零寄存器(zero).pc 寄存器又稱“程序計(jì)數(shù)器”,用于保存當(dāng)前指令的地址.

      通用寄存器x1~x31 理論上可以用于各種用途,但是根據(jù)標(biāo)準(zhǔn)調(diào)用約定[20]的建議,這些寄存器的功能在實(shí)踐中也是相對(duì)固定的:x1~x4 用于保存程序運(yùn)行相關(guān)的指針,共4 個(gè);x5~x7 及x28~x31 用作臨時(shí)寄存器,共7個(gè);x8~x9 及x18~x27 由被調(diào)用者使用,共12 個(gè);x10~x17 用于保存調(diào)用的參數(shù),共8 個(gè).表2 列出了所有x 寄存器在標(biāo)準(zhǔn)調(diào)用約定下的含義.

      Fig.2 Register status of RV32I/RV64I[11]圖2 RISC-V 整數(shù)指令集(RV32I/RV64I)的寄存器狀態(tài)[11]

      Table 2 The meaning of each x register in standard calling convention 表2 標(biāo)準(zhǔn)調(diào)用約定下的各x 寄存器含義

      RV32I 有4 種基礎(chǔ)指令格式:R/I/S/U,指令集中的任何指令都可以根據(jù)操作數(shù)的數(shù)量、種類、規(guī)模以及自身的功能需求,選用其中一種格式.所有這些指令格式都是32 位固定長度,并且必須在內(nèi)存中對(duì)齊到4 字節(jié)的邊界.圖3 顯示了這4 種基礎(chǔ)的指令格式.

      Fig.3 Four basic instruction formats of RV32I[11]圖3 RV32I 的4 種基礎(chǔ)指令格式[11]

      RV64I 采用與RV32I 相同的指令格式,只是將整數(shù)寄存器和所支持的用戶地址空間擴(kuò)展到了64 位,增加了一些操作低32 位的“*W”指令.例如,RV32I 中的ADDI 指令可以將符號(hào)擴(kuò)展的12 位立即數(shù)加到寄存器中,并將計(jì)算結(jié)果的低XLEN 位(即低32 位)作為指令的執(zhí)行結(jié)果,忽略計(jì)算溢出.RV64I 沿用了該指令,但寄存器和執(zhí)行結(jié)果都被擴(kuò)展到64 位.同時(shí)RV64I 新增了ADDIW 指令,用以產(chǎn)生32 位的計(jì)算結(jié)果,再將其符號(hào)擴(kuò)展至64 位并忽略計(jì)算溢出.

      2.1.2 RV32E 指令集

      RV32E 是專為嵌入式環(huán)境設(shè)計(jì)的指令集,是對(duì)RV32I 指令集的一種簡化.根據(jù)RISC-V 規(guī)范[11]的描述,它與RV32I 唯一的區(qū)別在于,將可用的整數(shù)寄存器的數(shù)目從32 減少到16,即只使用x0~x15 和pc 完成所有的指令功能,而去除了RV32I 中的x16~x31 寄存器.RV32E 的寄存器狀態(tài)如圖4 所示.

      Fig.4 Register status of RV32E[11]圖4 RV32E 的寄存器狀態(tài)[11]

      由于寄存器數(shù)目不同,適用于RV32I 的標(biāo)準(zhǔn)調(diào)用約定與RV32E 并不兼容.RV32E 需要與之不同的調(diào)用約定和ABI(application binary interface,應(yīng)用程序二進(jìn)制接口),但目前還沒有這方面較為統(tǒng)一而穩(wěn)定的標(biāo)準(zhǔn).作為臨時(shí)的解決方案,RISC-V 規(guī)范提供了一種專用于RV32E 的調(diào)用約定ILP32E,它要求棧指針對(duì)齊只能到32位邊界;而在寄存器的分配上,采用與 RV32I 一致的分配方案.例如,在高性能開源 RISC-V 微控制器核心SCR1[21]中,對(duì)于RV32E 的實(shí)現(xiàn)便采取了這樣的處理方式.通過預(yù)處理選項(xiàng)的控制,使寄存器x0~x15 完全復(fù)用,不特別區(qū)分RV32I 或RV32E,而x16~x31 只有在RV32I 指令集中啟用.

      2.1.3 RV128I 指令集

      RV128I 是一個(gè)用于支持128 位地址空間的指令集.根據(jù)RISC-V 規(guī)范中的預(yù)測,隨著計(jì)算需求的增長和技術(shù)的不斷演進(jìn),很可能會(huì)在 2030 年之前就會(huì)需要超過 64 位的地址空間[11].因此,事先提出面向未來的RV128I 指令集便成為一項(xiàng)積極的應(yīng)對(duì)措施.

      RV128I 是對(duì)RV32I 和RV64I 的直接外擴(kuò),僅僅是把整數(shù)寄存器寬度擴(kuò)展到了128 位(XLEN=128).由于大部分整數(shù)運(yùn)算指令在XLEN 位上定義,所以無需變化.此外,RV128I 保留了RV64I 中用于操作低32 位的“*W”指令,只是把結(jié)果從32 位符號(hào)擴(kuò)展到128 位;RV128I 還新增了用于操作低64 位的“*D”指令.

      2.1.4 RVWMO 指令集

      RVWMO 指令集定義了RISC-V 的內(nèi)存一致性模型.內(nèi)存一致性模型是一組規(guī)則的集合,指定了內(nèi)存的load 操作所能返回的結(jié)果.RVWMO 內(nèi)存模型屬于弱內(nèi)存次序的,即在一個(gè)多線程程序有許多種不同可能的執(zhí)行,而每種執(zhí)行有其自己相應(yīng)的全局內(nèi)存次序.這里的“全局內(nèi)存次序”是指所有硬件線程所產(chǎn)生的內(nèi)存操作的總體次序.

      RVWMO 指令集為加載(load)和存儲(chǔ)(store)等內(nèi)存操作提供了一組內(nèi)存模型原語,用于對(duì)相關(guān)指令進(jìn)行標(biāo)注.表3 列舉了這些標(biāo)注的內(nèi)容及其含義.

      RVWMO 內(nèi)存模型的定義基于依存句法(syntactic dependency)的概念,即,指令的源寄存器、目的寄存器,和指令從源寄存器到目的寄存器含有依賴的方式.對(duì)于不同的RISC-V 指令集中的不同指令,會(huì)有各自不同的依存句法.

      RVWMO 對(duì)程序的執(zhí)行提出了次序上的要求,即,全局內(nèi)存次序需要遵循著各個(gè)硬件線程的內(nèi)存次序中的一部分(但不是所有).這部分必須被遵循的次序子集被稱為“保留的程序次序”.

      內(nèi)存模型原語、各指令的依存句法和保留的程序次序,以及基于這些內(nèi)容的3 條公理[11](加載值公理、原子性公理、進(jìn)度公理),共同構(gòu)成了RVWMO 內(nèi)存一致性模型.

      Table 3 Annotations of memory access instructions in RVWMO 表3 RVWMO 指令集對(duì)內(nèi)存操作指令的標(biāo)注

      2.2 RISC-V擴(kuò)展指令集

      RISC-V 的擴(kuò)展指令集用于為ISA 提供特定方面的功能操作指令.一個(gè)ISA 可以選擇加入多個(gè)擴(kuò)展指令集.而為了使多個(gè)指令集能夠共存,各指令集的編碼空間均按照RISC-V 國際基金會(huì)(RVI)的編碼要求進(jìn)行了劃分,以避免沖突.現(xiàn)有的RISC-V 擴(kuò)展指令集主要有以下24 種.

      (1) 乘法和除法擴(kuò)展(M 擴(kuò)展):用于將兩個(gè)整數(shù)寄存器中的值進(jìn)行相乘或相除.具體包含了MUL、DIV、REM 等指令及對(duì)應(yīng)于無符號(hào)數(shù)操作或64 位操作相關(guān)的各種變體指令.

      (2) 原子指令擴(kuò)展(A 擴(kuò)展):用于支持相同內(nèi)存空間中的多個(gè)硬件線程間的同步.主要包含了對(duì)內(nèi)存進(jìn)行原子性讀取、修改、寫入的指令.

      (3) 單精度浮點(diǎn)擴(kuò)展(F 擴(kuò)展):用于支持單精度浮點(diǎn)運(yùn)算.添加了兼容IEEE 754-2008 算術(shù)標(biāo)準(zhǔn)[22]的單精度浮點(diǎn)運(yùn)算指令,以及32 個(gè)32 位寬的浮點(diǎn)寄存器f0~f31,和一個(gè)浮點(diǎn)控制與狀態(tài)寄存器fcsr.

      (4) 雙精度浮點(diǎn)擴(kuò)展(D 擴(kuò)展):用于支持雙精度浮點(diǎn)運(yùn)算.它依賴于F 擴(kuò)展,需要與F 擴(kuò)展共同使用.D 擴(kuò)展添加了兼容IEEE 754-2008 算術(shù)標(biāo)準(zhǔn)的雙精度浮點(diǎn)運(yùn)算指令,并把浮點(diǎn)寄存器f0~f31 拓寬到64位.

      (5) 四精度浮點(diǎn)擴(kuò)展(Q 擴(kuò)展):用于支持四精度浮點(diǎn)運(yùn)算.它依賴于D 擴(kuò)展,需要與D 擴(kuò)展和F 擴(kuò)展共同使用.Q 擴(kuò)展添加了兼容IEEE 754-2008 算術(shù)標(biāo)準(zhǔn)[22]的四精度浮點(diǎn)運(yùn)算指令,并把浮點(diǎn)寄存器的位寬擴(kuò)展到128 位.

      (6) 壓縮指令擴(kuò)展(C 擴(kuò)展):C 擴(kuò)展增加了一些16 位的短指令編碼,用于替代對(duì)應(yīng)的某些32 位常見操作指令,以減少靜態(tài)和動(dòng)態(tài)的代碼尺寸.它還移除了原始32 位指令上的32 位對(duì)齊限制,允許指令可以從任何16 位邊界開始,從而顯著提高了代碼密度.

      (7) 計(jì)數(shù)器指令擴(kuò)展(Counters 擴(kuò)展):Counters 擴(kuò)展提供了至多32 個(gè)64 位計(jì)數(shù)器或計(jì)時(shí)器,可以通過特定的只讀CSR 寄存器0xC00-0xC1F 進(jìn)行訪問.其中,前3 個(gè)計(jì)數(shù)器為專用計(jì)數(shù)器,分別用于循環(huán)計(jì)數(shù)(CYCLE)、實(shí)時(shí)時(shí)鐘(TIME)和過時(shí)指令(INSTRET);其余的計(jì)數(shù)器可用于程序事件的計(jì)數(shù).

      (8) 十進(jìn)制浮點(diǎn)擴(kuò)展(L 擴(kuò)展):用于支持IEEE 754-2008 標(biāo)準(zhǔn)[22]中定義的十進(jìn)制浮點(diǎn)算術(shù).它將浮點(diǎn)寄存器用于存儲(chǔ)64 位或128 位十進(jìn)制浮點(diǎn)值.該擴(kuò)展尚未進(jìn)入實(shí)質(zhì)性的設(shè)計(jì)階段.

      (9) 位操作擴(kuò)展(B 擴(kuò)展):用于支持位操作.主要包括了插入、提取、測試位域的指令,以及移位、位與字節(jié)置換等操作指令.該擴(kuò)展尚未進(jìn)入實(shí)質(zhì)性的設(shè)計(jì)階段.

      (10) 動(dòng)態(tài)翻譯語言擴(kuò)展(J 擴(kuò)展):用于支持動(dòng)態(tài)翻譯語言.該擴(kuò)展注意到,許多流行的語言都采用動(dòng)態(tài)翻譯的方式實(shí)現(xiàn),如Java 和JavaScript.因此希望引入一些指令,從ISA 層面支持這些語言的動(dòng)態(tài)檢測、垃圾回收等行為,從而獲得收益.該擴(kuò)展尚未進(jìn)入實(shí)質(zhì)性的設(shè)計(jì)階段.

      (11) 事務(wù)內(nèi)存擴(kuò)展(T 擴(kuò)展):用于支持事務(wù)內(nèi)存操作.T 擴(kuò)展將設(shè)立一個(gè)小型的、容量有限的事務(wù)內(nèi)存緩沖區(qū),以支持涉及多個(gè)地址的原子性操作.該擴(kuò)展尚未進(jìn)入實(shí)質(zhì)性的設(shè)計(jì)階段.

      (12) 組合單指令多數(shù)據(jù)流(packed single instruction multiple data,簡稱Packed SIMD)指令擴(kuò)展(P 擴(kuò)展):用于支持小型RISC-V 實(shí)現(xiàn)中的組合SIMD 定點(diǎn)操作.該擴(kuò)展曾被認(rèn)為可以由V 擴(kuò)展上的大型浮點(diǎn)SIMD 操作標(biāo)準(zhǔn)化代替,而幾近廢棄;但考慮到小型RISC-V 的實(shí)際需要而得以保留,并開始設(shè)計(jì)和定義新的P 擴(kuò)展.

      (13) 向量操作擴(kuò)展(V 擴(kuò)展):用于支持32 位指令編碼空間中的數(shù)據(jù)并行執(zhí)行功能.該擴(kuò)展增強(qiáng)了處理器的SIMD 操作,引入了一組向量寄存器和向量操作指令,允許將相同的操作應(yīng)用于大批量的數(shù)據(jù)元素之中,使RISC-V 系統(tǒng)的數(shù)據(jù)處理能力發(fā)生質(zhì)變,同時(shí)保持指令代碼的精簡性.

      (14) 控制和狀態(tài)寄存器擴(kuò)展(Zicsr 擴(kuò)展):RISC-V 定義了一個(gè)獨(dú)立的地址空間,包含與各硬件線程相關(guān)的4 096 個(gè)控制與狀態(tài)寄存器(control and status register,簡稱CSR).Zicsr 擴(kuò)展即提供了在此空間中操作CSR 指令的完整集合.

      (15) 屏障擴(kuò)展(Zifencei 擴(kuò)展):僅含有一條FENCE.I 指令,用于提供相同硬件線程上寫指令內(nèi)存與指令獲取之間的顯式同步.

      (16) 非對(duì)齊原子操作擴(kuò)展(Zam 擴(kuò)展):用于對(duì)非對(duì)齊的原子內(nèi)存操作(atomic memory operation,簡稱AMO)提供標(biāo)準(zhǔn)化支持.它是對(duì)A 擴(kuò)展的擴(kuò)展,使AMO 只需要針對(duì)具有相同地址和相同尺寸的其他訪問(包括非原子性的加載和存儲(chǔ))進(jìn)行原子化執(zhí)行即可.

      (17) 全存儲(chǔ)排序擴(kuò)展(Ztso 擴(kuò)展):用于支持“全存儲(chǔ)排序”[23]的內(nèi)存一致性模型.它提供了一種比RVWMO 更嚴(yán)格的內(nèi)存一致性模型.

      (18) 提示暫停擴(kuò)展(Zihintpause 擴(kuò)展):用于指示當(dāng)前硬件線程應(yīng)當(dāng)放緩指令的失效率.目前僅包含一條PAUSE 指令,并且不會(huì)引起架構(gòu)相關(guān)狀態(tài)的更改.

      (19) 半精度浮點(diǎn)擴(kuò)展(Zfh 擴(kuò)展):用于支持半精度浮點(diǎn)運(yùn)算.添加了兼容IEEE 754-2008 算術(shù)標(biāo)準(zhǔn)[22]的半精度浮點(diǎn)運(yùn)算指令,以操作16 位浮點(diǎn)數(shù)據(jù).它依賴于F 擴(kuò)展,需要與F 擴(kuò)展共同使用.

      (20) 半精度浮點(diǎn)最小集擴(kuò)展(Zfhmin 擴(kuò)展):是Zfh 擴(kuò)展的一個(gè)子集,僅包含了數(shù)據(jù)轉(zhuǎn)移轉(zhuǎn)化相關(guān)的指令,主要用于支持半精度數(shù)據(jù)的存儲(chǔ)、以及執(zhí)行更高精度的運(yùn)算.與Zfh 擴(kuò)展一樣,它也依賴于F 擴(kuò)展,需要與F 擴(kuò)展共同使用.

      (21) 整數(shù)寄存器單精度浮點(diǎn)擴(kuò)展(Zfinx 擴(kuò)展):用于支持在整數(shù)寄存器中進(jìn)行單精度浮點(diǎn)運(yùn)算.指令功能與F 擴(kuò)展相似,只是操作數(shù)來自于整數(shù)寄存器而非浮點(diǎn)寄存器,而且不含F(xiàn)LW、FSW、FMV 等轉(zhuǎn)移指令.

      (22) 整數(shù)寄存器雙精度浮點(diǎn)擴(kuò)展(Zdinx 擴(kuò)展):用于支持在整數(shù)寄存器中進(jìn)行雙精度浮點(diǎn)運(yùn)算.與D 擴(kuò)展類似,只是操作數(shù)來自于整數(shù)寄存器而非浮點(diǎn)寄存器.它依賴于Zfinx 擴(kuò)展,需要與Zfinx 擴(kuò)展共同使用.

      (23) 整數(shù)寄存器半精度浮點(diǎn)擴(kuò)展(Zhinx 擴(kuò)展):用于支持在整數(shù)寄存器中進(jìn)行半精度浮點(diǎn)運(yùn)算.與Zfh 擴(kuò)展類似,只是操作數(shù)來自于整數(shù)寄存器而非浮點(diǎn)寄存器.它依賴于Zfinx 擴(kuò)展,需要與Zfinx 擴(kuò)展共同使用.

      (24) 整數(shù)寄存器半精度浮點(diǎn)最小集擴(kuò)展(Zhinxmin 擴(kuò)展):是Zhinx 擴(kuò)展的一個(gè)子集,與Zfhmin 擴(kuò)展的功能及定位類似.與Zhinx 擴(kuò)展一樣,它也依賴于Zfinx 擴(kuò)展,需要與Zfinx 擴(kuò)展共同使用.

      此外,RISC-V 系統(tǒng)設(shè)計(jì)者還可以根據(jù)實(shí)際需要,制定其他自定義擴(kuò)展指令集,并將其加入指令集架構(gòu)中.

      2.3 RISC-V指令集的狀態(tài)

      RISC-V 指令集需要經(jīng)過RISC-V 國際基金會(huì)下屬的技術(shù)工作組審批,成為被批準(zhǔn)的穩(wěn)定版本,才能作為一種統(tǒng)一的規(guī)范和標(biāo)準(zhǔn),供軟件開發(fā)人員和硬件供應(yīng)商們使用.尚未被批準(zhǔn)的指令集可能處于“草案”或“凍結(jié)”狀態(tài):草案狀態(tài)的指令集隨時(shí)有改動(dòng)的可能,是指令集研究中最活躍的部分;凍結(jié)狀態(tài)的指令集雖然還未被批準(zhǔn),但在批準(zhǔn)之前預(yù)計(jì)也不應(yīng)有太顯著的改動(dòng)[11].表4 總結(jié)了當(dāng)前RISC-V 各指令集的審批狀態(tài).

      根據(jù)表4 可知,當(dāng)前共有2 個(gè)基礎(chǔ)指令集(RV32E,RV128I)和10 個(gè)擴(kuò)展指令集(Counters,L,B,J,T,P,V,Zam,Zfh,Zfhmin)仍處于草案狀態(tài),另有5 個(gè)擴(kuò)展指令集(Zfinx,Zdinx,Zhinx,Zhinxmin,Ztso)處于凍結(jié)狀態(tài),它們需要在今后的實(shí)踐中繼續(xù)完善.其余12 個(gè)指令集均已被批準(zhǔn),可直接使用.

      Table 4 The current approval status of each RISC-V instruction set 表4 各RISC-V 指令集的當(dāng)前審批狀態(tài)

      2.4 RISC-V權(quán)限模式

      RISC-V 指令集架構(gòu)必須工作在一種確定的權(quán)限模式下.根據(jù)RISC-V 權(quán)限規(guī)范[12],目前共有以下4 種權(quán)限模式:機(jī)器模式(Machine,M 模式)、用戶模式(User,U 模式)、管理模式(Supervisor,S 模式)、監(jiān)視模式(Hypervisor,H 模式).其中,H 模式暫時(shí)處于草案狀態(tài),因此通常設(shè)計(jì)時(shí)僅考慮前3 種特權(quán)模式.

      RISC-V 通過CSR 來控制當(dāng)前的權(quán)限模式.通過設(shè)置CSR 中特定2 位的值,可以切換到不同的模式.具體取值見表5.

      Table 5 RISC-V privilege mode settings 表5 RISC-V 特權(quán)級(jí)模式設(shè)置

      2.4.1 M 模式

      機(jī)器模式是RISC-V 指令集架構(gòu)中最高級(jí)別的權(quán)限模式,具有執(zhí)行任何機(jī)器操作的權(quán)限,也是在系統(tǒng)設(shè)計(jì)中必須被實(shí)現(xiàn)的一個(gè)工作模式.相比之下,U/S/H 等其他權(quán)限模式都是可選的,不同的系統(tǒng)可以根據(jù)運(yùn)行環(huán)境和實(shí)際需要,決定是否支持實(shí)現(xiàn)某一級(jí)別的權(quán)限模式.

      2.4.2 U 模式

      用戶模式是RISC-V 特權(quán)系統(tǒng)中最低級(jí)別的權(quán)限模式,又被稱作“非特權(quán)模式”.它通常用于執(zhí)行來自用戶等外部環(huán)境的不可信操作,通過對(duì)其操作范圍的限制來保護(hù)系統(tǒng)內(nèi)的各種資源不受侵害.

      2.4.3 S 模式

      管理模式具有比用戶級(jí)更高的操作權(quán)限,可以用于操作一臺(tái)機(jī)器中的敏感資源.RISC-V 管理模式需要與機(jī)器模式和用戶模式共同實(shí)現(xiàn),因此,不能出現(xiàn)系統(tǒng)中只存在S 模式而不存在U 模式的情況.

      2.4.4 H 模式

      監(jiān)視模式可用于管理跨機(jī)器的資源,或者將機(jī)器整體作為組件承擔(dān)更高級(jí)別的任務(wù).如,H 模式可以協(xié)助實(shí)現(xiàn)一臺(tái)機(jī)器系統(tǒng)的虛擬化操作.

      RISC-V 權(quán)限規(guī)范[12]在圖5 中直觀地說明了各權(quán)限模式的執(zhí)行范圍.其中,Application 表示用戶級(jí)應(yīng)用,ABI 表示應(yīng)用程序二進(jìn)制接口,AEE 表示應(yīng)用程序執(zhí)行環(huán)境;類似地,XBI 表示應(yīng)用在X 模式下的二進(jìn)制接口(binary interface),XEE 表示應(yīng)用在X 模式下的執(zhí)行環(huán)境(execution environment).

      Fig.5 Execution range of different privilege modes in RISC-V[12]圖5 RISC-V 中各權(quán)限模式的執(zhí)行范圍[12]

      2.5 小 結(jié)

      RISC-V 指令集架構(gòu)正處于發(fā)展的活躍期,針對(duì)不同的應(yīng)用環(huán)境提出了多種不同的指令集.RISC-V 指令集有基礎(chǔ)指令集與擴(kuò)展指令集之分,一個(gè)RISC-V 系統(tǒng)需要至少完整實(shí)現(xiàn)一個(gè)基礎(chǔ)指令集,并在一種權(quán)限模式中進(jìn)行工作.對(duì)于指令集本身的研究是推動(dòng)RISC-V 發(fā)展的核心問題,所有指令集都需要經(jīng)過批準(zhǔn)才能成為統(tǒng)一而穩(wěn)定的標(biāo)準(zhǔn).目前尚有17 個(gè)指令集未被批準(zhǔn),其中12 個(gè)處于草案狀態(tài),5 個(gè)處于凍結(jié)狀態(tài).

      另外,在RISC-V 指令集發(fā)展過程中,還出現(xiàn)了一些其他的研究和嘗試.如,2020 年,Multanen 等人[24]以RISC-V 指令集架構(gòu)為例,提出了一種基于細(xì)粒度可編程字典的指令壓縮方案,通過對(duì)編譯時(shí)區(qū)域的控制流分析,可在運(yùn)行時(shí)有選擇地更新字典內(nèi)容,最小化更新開銷,同時(shí)最大化利用字典空間.這些以指令集為目標(biāo)的研究對(duì)RISC-V 指令集的完善也起到了一定的促進(jìn)作用.

      3 RISC-V 硬件平臺(tái)

      RISC-V 依托的硬件平臺(tái)可以含有如下組件.

      (1) 帶有其他非兼容RISC-V 核心(如,IP Core)的一個(gè)或多個(gè)兼容RISC-V 的處理核心.

      (2) 固定功能加速器——這里加速器是指一種不可編程的固定功能單元,或者專用于特定任務(wù)的核心.

      (3) 各種物理內(nèi)存結(jié)構(gòu).

      (4) I/O 設(shè)備.

      (5) 組件通信與交互結(jié)構(gòu).

      從系統(tǒng)的角度看,這些硬件平臺(tái)組件可以有多種組織形式,從單核心的微控制器到包含數(shù)千個(gè)節(jié)點(diǎn)的集群(每個(gè)節(jié)點(diǎn)都是一個(gè)共享內(nèi)存的多核心服務(wù)器);甚至可以在小型片上系統(tǒng)(system-on-a-chip,簡稱SoC)中組織成多層多處理器結(jié)構(gòu),來協(xié)助模塊化開發(fā)或者提供子系統(tǒng)間的安全隔離.

      RISC-V 處理器是RISC-V 硬件平臺(tái)的主要研究對(duì)象,它可以提供相對(duì)全面的組件功能和真實(shí)的RISC-V 執(zhí)行環(huán)境.此外,RISC-V 模擬器能夠在軟件平臺(tái)上模擬硬件執(zhí)行環(huán)境,因此雖然自身屬于上層RISC-V 體系,但在研究中也應(yīng)被視為RISC-V 硬件平臺(tái)的范圍.本節(jié)將對(duì)RISC-V 處理器和模擬器方面的主要研究成果進(jìn)行介紹,并總結(jié)其特征和適用性.

      3.1 對(duì)RISC-V處理器的研究

      處理器的設(shè)計(jì)需要考慮如下問題.

      (1) 所支持的指令集.這代表了該處理器能夠完成的功能范圍,并包含了對(duì)于指令執(zhí)行通路的需求.

      (2) 組成指令執(zhí)行通路的組件.包括算術(shù)邏輯單元(arithmetic and logic unit,簡稱 ALU)、程序計(jì)數(shù)器(program counter,簡稱PC)、寄存器組、緩存和存儲(chǔ)單元等.

      (3) 指令的處理方式.包括控制信號(hào)、時(shí)鐘周期、指令流水線等,以及由此衍生出的任務(wù)調(diào)度、中斷/陷入/異常問題的處理、數(shù)據(jù)同步等問題.

      (4) 對(duì)于多核心處理器,還應(yīng)考慮核心結(jié)構(gòu)(同構(gòu)或異構(gòu))、核間通信等方面的設(shè)計(jì).

      根據(jù)應(yīng)用場景的不同,RISC-V 處理器可以劃分為通用處理器、嵌入式處理器、教學(xué)研究用處理器.通用處理器不針對(duì)特定應(yīng)用場景,因此將支持最全的RISC-V 指令集和最多的功能,如SiFive 公司在2016 年推出的64位單發(fā)射五級(jí)流水線順序處理器Rocket[25].嵌入式處理器特別考慮了資源受限的嵌入式環(huán)境,往往需要支持E擴(kuò)展或C 擴(kuò)展以優(yōu)化尺寸,權(quán)衡面積和性能需求,如Zaruba 等人[26]在2019 年實(shí)現(xiàn)的有序單發(fā)射64 位微核心Ariane,支持RV64GC 指令集.教學(xué)研究用處理器通常采用最精簡的設(shè)計(jì),只包含最基本的、必要的功能,以清晰地表現(xiàn)處理器的工作流程,如Lowe-Power 等人[27]在2019 年設(shè)計(jì)的單周期五級(jí)流水線順序處理器DINO CPU以及計(jì)算技術(shù)研究所包云崗團(tuán)隊(duì)在2020 年公布的單發(fā)射九級(jí)流水線順序處理器NutShell[28].

      經(jīng)RISC-V 社區(qū)統(tǒng)計(jì)[29],目前公開發(fā)布并已經(jīng)提交到社區(qū)的RISC-V 處理器共計(jì)107 種.根據(jù)這些處理器支持指令集的情況以及功能特性,本文按上述分類方法依次總結(jié)了其中較有代表性的一些處理器,并給出了相應(yīng)的評(píng)價(jià).具體內(nèi)容見表6~表8.

      從表6 中可以得知,Rocket、freedom、BOOM 等處理器支持的指令集更加全面,便于對(duì)接各類系統(tǒng),適用性最為廣泛;A70X 自帶工具集,開發(fā)更方便;SCR5、RiscyOO、XuanTie910 等在性能方面更有優(yōu)勢(shì);DarkRISCV、NEORV32、AX45、NEOL-V 等更專注于特定結(jié)構(gòu),可以相應(yīng)地滿足各自特殊的設(shè)計(jì)需求.

      嵌入式處理器的設(shè)計(jì)關(guān)鍵在于對(duì)有限資源的利用能力,或者對(duì)于資源受限環(huán)境的適應(yīng)性.從表7 可以看出,僅含M 模式的SCR1 和SweRV EH2 可提供最基本的處理能力,相對(duì)適應(yīng)性最強(qiáng);Hummingbirdv2 E203、SHAKTI E-CLASS、Ibex 可適用于常規(guī)嵌入式環(huán)境;PicoRV32、XuanTie E906、CVA6 存在提供更多能力的可能,可以承擔(dān)有更高能力要求的環(huán)境中的數(shù)據(jù)處理任務(wù).處理器 開發(fā)者 位數(shù) 指令集 設(shè)計(jì)語言 許可證 描述

      Table 6 Twelve representative general-purpose RISC-V processors 表6 12 種典型的通用RISC-V 處理器

      Table 7 Eight representative embedded RISC-V processors 表7 8 種典型的嵌入式RISC-V 處理器

      Table 8 Seven representative RISC-V processors for teaching and research表8 7 種典型的教學(xué)研究用RISC-V 處理器

      表8 中的7 種處理器均在其設(shè)計(jì)目標(biāo)中提及了教學(xué)背景或?qū)W術(shù)研究目的,分別針對(duì)各自不同的學(xué)術(shù)需求而設(shè)計(jì).但像Tinyriscv、Kronos 等處理器經(jīng)過通用化后也可以具備常規(guī)的通用處理器的處理能力.這其中,較為值得一提的是中國科學(xué)院計(jì)算所包云崗團(tuán)隊(duì)研發(fā)的“香山”處理器核.“香山”立足于中國科學(xué)院大學(xué)“一生一芯”計(jì)劃,致力于建立一個(gè)既能被工業(yè)界廣泛應(yīng)用、又能支持學(xué)術(shù)界試驗(yàn)創(chuàng)新想法的開源RISC-V 核主線[52],對(duì)于開源RISC-V 處理器的發(fā)展具有里程碑式的意義.截至目前,“香山”已經(jīng)發(fā)展出了兩代微架構(gòu):第一代“雁棲湖”架構(gòu)已于2021 年7 月流片,是一個(gè)11 級(jí)流水、6 發(fā)射、4 個(gè)訪存部件的亂序處理器核,基于28nm 工藝,頻率1.3GHz,性能達(dá)到ARM Cortex-A76 水平;第二代“南湖”架構(gòu)自2021 年3 月開始設(shè)計(jì),基于14nm 工藝,頻率2GHz,在前一代的基礎(chǔ)上加入了對(duì)位操作指令集擴(kuò)展的支持,采用指令預(yù)測與取指解耦的前端架構(gòu)和更優(yōu)化的后端設(shè)計(jì),帶有新L2 緩存和雙通道DDR,預(yù)計(jì)將在2021 年底完成.

      盡管如此,除嵌入式RISC-V 處理器對(duì)資源管理的要求較為嚴(yán)格外,大部分處理器都可以同時(shí)勝任通用目的、教學(xué)、研究等多種場景,僅僅是在功能、性能、復(fù)雜度等不同方面有所側(cè)重,導(dǎo)致在不同場景中的表現(xiàn)有所差異;許多RISC-V 處理器還提供了配置機(jī)制,可以根據(jù)用戶的設(shè)定切換為嵌入式或其他工作模式(如Rocket、Ibex、CVA6 等),或者選用不同的指令集(如PicoRV32 等),通過有針對(duì)性的優(yōu)化提升特定環(huán)境下的處理能力.

      關(guān)于定制處理器的具體過程,將作為RISC-V 系統(tǒng)實(shí)現(xiàn)的一個(gè)環(huán)節(jié),在第4.1.1 節(jié)進(jìn)行詳細(xì)論述.

      3.2 對(duì)RISC-V模擬器的研究

      模擬器是在軟件層面對(duì)底層硬件平臺(tái)或其他軟件環(huán)境進(jìn)行模擬的工具.它允許開發(fā)人員在非目標(biāo)硬件設(shè)備上獲得與目標(biāo)硬件設(shè)備相同或相似的體驗(yàn),簡化研發(fā)流程,并有助于提前發(fā)現(xiàn)開發(fā)中的問題.例如,在RISC-V平臺(tái)中使用QEMU 模擬器運(yùn)行Linux 操作系統(tǒng)就是一種很常見的做法.

      根據(jù)RISC-V 社區(qū)的統(tǒng)計(jì)[53],目前公開發(fā)布并已經(jīng)提交到社區(qū)的RISC-V 模擬器共有24 種,服務(wù)于各類RISC-V 研發(fā)項(xiàng)目之中.它們的各自特性見表9.

      這些模擬器中,Spike 和QEMU 是RISC-V 國際基金會(huì)推薦使用的:它們支持幾乎所有的RISC-V 指令集,功能齊全,適用范圍廣,可模擬通用和嵌入式等多種處理器環(huán)境.基于這兩種模擬器的研究成果也很豐富,如Li等人[54]在QEMU 模擬器上進(jìn)行了安全機(jī)制方面的研究,并定量分析了該成果對(duì)于QEMU 模擬器的影響.此外,Ripes 和WebRISC-V 等模擬器的可視化程度較高,可以直觀了解硬件平臺(tái)的運(yùn)行情況,入門較容易.Jupiter、Vulcan、EmulsiV 等以教學(xué)為目的的模擬器,內(nèi)容簡化,對(duì)初學(xué)者相對(duì)友好,易于以此為基礎(chǔ)開展進(jìn)一步的研究.

      Table 9 Twenty-four RISC-V simulators 表9 24 種RISC-V 模擬器

      4 RISC-V 系統(tǒng)設(shè)計(jì)

      硬件平臺(tái)是實(shí)現(xiàn)RISC-V 系統(tǒng)的基礎(chǔ)和依托,而如何發(fā)揮出RISC-V 硬件平臺(tái)的優(yōu)勢(shì),使其能夠正確而高效地完成各項(xiàng)任務(wù),則是RISC-V 系統(tǒng)的設(shè)計(jì)目標(biāo).本節(jié)將從系統(tǒng)功能實(shí)現(xiàn)、系統(tǒng)性能提升、系統(tǒng)安全策略設(shè)計(jì)3個(gè)方面,對(duì)RISC-V 系統(tǒng)的設(shè)計(jì)過程及其研究進(jìn)展進(jìn)行歸納分析.

      4.1 RISC-V系統(tǒng)功能實(shí)現(xiàn)

      根據(jù)所含處理器核心的數(shù)目和組織形式的不同,RISC-V 系統(tǒng)可以分為單處理器系統(tǒng)、多處理器系統(tǒng)、處理器集群系統(tǒng)3 類.單處理器系統(tǒng)是最基礎(chǔ)的系統(tǒng)形式,只包含一個(gè)主處理器,全權(quán)管理存儲(chǔ)、運(yùn)算、I/O 等系統(tǒng)資源,遵循馮·諾依曼結(jié)構(gòu)[79]、哈佛結(jié)構(gòu)[80]或者改進(jìn)型哈佛結(jié)構(gòu)[81]等設(shè)計(jì)架構(gòu)之一,主要應(yīng)用于早期PC 平臺(tái),以及一些專用設(shè)備中.多處理器系統(tǒng)最早應(yīng)用于高性能服務(wù)器中:IBM 在 2001 年發(fā)布了雙核處理器POWER4[82],并用其實(shí)現(xiàn)了最初的多核服務(wù)器系統(tǒng).多處理器系統(tǒng)通過增加系統(tǒng)中處理器核心的數(shù)目來提升數(shù)據(jù)處理能力,目前已普遍應(yīng)用于PC、移動(dòng)設(shè)備、分布式網(wǎng)絡(luò)、服務(wù)器等環(huán)境.處理器集群系統(tǒng)是多處理器系統(tǒng)的擴(kuò)大化和進(jìn)一步發(fā)展,它由多個(gè)計(jì)算處理節(jié)點(diǎn)組成,而每個(gè)節(jié)點(diǎn)都可以是一種單處理器或多處理器系統(tǒng).本節(jié)討論了這3 類系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).

      4.1.1 單處理器系統(tǒng)

      單處理器的設(shè)計(jì)通常要經(jīng)過如下環(huán)節(jié)[83].

      (1) 指令集與微架構(gòu)的設(shè)計(jì)與實(shí)現(xiàn).

      (2) 體系研究與性能建模.

      (3) 高層次綜合(high level synthesis,簡稱HLS)或寄存器傳輸級(jí)(register transfer level,簡稱RTL)實(shí)現(xiàn).

      (4) RTL 驗(yàn)證.

      (5) 關(guān)鍵速度相關(guān)部件(緩存、寄存器、算數(shù)邏輯單元)電路設(shè)計(jì).

      (6) 邏輯綜合.

      (7) 時(shí)序分析.

      (8) 物理設(shè)計(jì),包括布局、布線、版圖設(shè)計(jì).

      (9) 檢查RTL、邏輯門層、晶體管層及物理層表示相符.

      (10) 檢查信號(hào)完整性、芯片可制造性.

      在進(jìn)行操作系統(tǒng)設(shè)計(jì)時(shí),可以使用系統(tǒng)程序設(shè)計(jì)語言(system programming language,簡稱SPL)對(duì)系統(tǒng)功能模塊進(jìn)行描述和開發(fā).SPL 包括專用SPL 和通用SPL 兩類,前者針對(duì)特定平臺(tái),如面向MCP 操作系統(tǒng)的ESPOL語言[84];后者提供跨平臺(tái)的特性,如C/C++[85,86]、Rust 語言[87].2019 年,Lin 等人[88]描述了一種在RISC-V 架構(gòu)中使用Rust 流和框架的方法,該方法基于LLVM 編譯器基礎(chǔ)設(shè)施,適用于帶有SIMD 向量擴(kuò)展的RISC-V 架構(gòu),降低了系統(tǒng)設(shè)計(jì)的學(xué)習(xí)成本.

      在指令集與處理器架構(gòu)設(shè)計(jì)層面,需要根據(jù)實(shí)際功能需求,合理安排功能組件與相關(guān)資源.在這一環(huán)節(jié),借助已有的處理器設(shè)計(jì)框架通常能起到事半功倍的作用.例如,2018 年,Zhang 等人[89]提出了組合模塊化設(shè)計(jì)(composable modular design,簡稱CMD)框架,用于無序處理器的設(shè)計(jì);2019 年,Liu 等人[90]設(shè)計(jì)了行為級(jí)綜合框架ASSIST,可以根據(jù)對(duì)指令集的功能描述,協(xié)助生成一系列RISC-V 處理器,滿足不同微架構(gòu)設(shè)計(jì)選擇的需要; Tamimi 等人[91]則提出了一種FPGA 軟核處理器的可重構(gòu)架構(gòu),用于實(shí)現(xiàn)基于SRAM 的FPGA 軟核處理器.此外,當(dāng)具體到特定硬件組件時(shí):Huang 等人[92]為RISC-V 處理器的設(shè)計(jì)提供了一套正式規(guī)范和高級(jí)抽象ILA,側(cè)重于加速器功能的設(shè)計(jì);Balkind 等人[93]在2020 年提出了支持RISC-V ISA 的開源硬件框架BYOC,提供了一個(gè)可擴(kuò)展的緩存一致性系統(tǒng).

      硬件描述語言(hardware description language,簡稱HDL)是用于描述電子元件或數(shù)字邏輯電路的結(jié)構(gòu)、行為、數(shù)據(jù)流向等信息的設(shè)計(jì)語言.處理器架構(gòu)的設(shè)計(jì)方案經(jīng)HDL 描述后,形成對(duì)數(shù)字系統(tǒng)的分層模塊表示,然后將進(jìn)入電子設(shè)計(jì)自動(dòng)化(electronic design automation,簡稱EDA)工具逐層仿真驗(yàn)證、自動(dòng)綜合工具將模塊組合轉(zhuǎn)換為門級(jí)電路網(wǎng)表的過程,最后便可使用專用集成電路(application specific integrated circuit,簡稱ASIC)或現(xiàn)場可編程門陣列(FPGA)的自動(dòng)布線工具,將網(wǎng)表轉(zhuǎn)換為具體的電路布線結(jié)構(gòu),交至硬件實(shí)現(xiàn).根據(jù)第3.1 節(jié)對(duì)各種處理器的統(tǒng)計(jì),RISC-V 系統(tǒng)多采用Chisel、Verilog、SystemVerilog、SpinalHDL[94]等作為其硬件描述語言.2018年,Taylor 還為SystemVerilog 設(shè)計(jì)了一個(gè)可用于系統(tǒng)合成的標(biāo)準(zhǔn)模板庫BaseJump[95].在16nm TSMC Celerity SoC、511 核 RISC-V 處理器和385M 晶體管條件下的實(shí)驗(yàn)結(jié)果表明,該設(shè)計(jì)能夠?qū)?0%的模塊直接從BaseJump STL 實(shí)例化,從而有效減少數(shù)字電路設(shè)計(jì)所需的時(shí)間,提升工作效率.SpinalHDL 是一種基于Scala 的硬件描述語言,它兼容EDA 工具、學(xué)習(xí)成本低、設(shè)計(jì)時(shí)不引入額外的面積或性能開銷,在實(shí)踐中被用于基于RISC-V 的處理器開發(fā).例如,VexRiscv 處理器[32]便是由SpinalHDL 開發(fā)而成.

      由于單處理器系統(tǒng)與多處理器系統(tǒng)、處理器集群系統(tǒng)存在結(jié)構(gòu)和功能上的發(fā)展聯(lián)系,關(guān)于單處理器系統(tǒng)的設(shè)計(jì)方案和研究成果同樣可以作為原型,遷移到多處理器系統(tǒng)和處理器集群系統(tǒng)之中,作為后者的研究基礎(chǔ)和實(shí)踐參考.

      4.1.2 多處理器系統(tǒng)

      多處理器系統(tǒng)的設(shè)計(jì),在單處理器系統(tǒng)的基礎(chǔ)之上,更需要關(guān)注處理器核心增加帶來的核間管理與通信問題,關(guān)注數(shù)據(jù)的并行或并發(fā)處理能力.具體來說,多處理器系統(tǒng)中可能存在如下挑戰(zhàn)[96].

      (1) 存儲(chǔ)一致性與緩存共享問題.

      (2) RTL 電路大幅增長帶來的復(fù)雜性問題.

      (3) 組件依賴性問題.

      (4) 通信延遲問題.

      針對(duì)上述挑戰(zhàn),研究人員作出了許多有益嘗試,提出了相應(yīng)的解決方案.

      例如,對(duì)于存儲(chǔ)一致性問題與RTL 電路問題,2017 年,Manerkar 等人[97]介紹了一種用于縮小微架構(gòu)/RTL 存儲(chǔ)一致性模型(memory consistency model,簡稱MCM)驗(yàn)證差距的方法和工具RTLCheck.RTLCheck 給定了一組關(guān)于MCM 行為的微架構(gòu)公理、一個(gè)用于彌補(bǔ)RTL 設(shè)計(jì)與用戶之間差距的的映射,并自動(dòng)生成SystemVerilog斷言,來驗(yàn)證其是否滿足指定測試程序的微架構(gòu)規(guī)范.作者團(tuán)隊(duì)在RISC-V V-scale 處理器的多核版本上評(píng)估了RTLCheck,驗(yàn)證了其有效性.

      對(duì)于組件依賴性問題,2020 年Kurth 等人[98]提出了一個(gè)模塊化、高效、開源的原子單元(atomic unit,簡稱ATUN)架構(gòu),它可以在不同的內(nèi)存結(jié)構(gòu)層次中靈活實(shí)施,使任何級(jí)別的內(nèi)存層次結(jié)構(gòu)都可以實(shí)現(xiàn)可擴(kuò)展的AMO.他們?cè)谝粋€(gè)具有32 核RISC-V 處理器的FPGA 原型上對(duì)ATUN 進(jìn)行了演示,證明了該架構(gòu)的有效性.

      Pulte 等人[99]則在2019 年提供了可用于RISC-V 的更抽象的操作模型Promising-ARM/RISC-V 及其交互式探索工具,以徹底檢查多種并發(fā)行為.

      關(guān)于以通信延遲為代表的系統(tǒng)性能問題,將在第4.2 節(jié)展開討論.

      4.1.3 處理器集群系統(tǒng)

      處理器集群系統(tǒng)由于需要對(duì)多個(gè)節(jié)點(diǎn)統(tǒng)籌管理,因此在設(shè)計(jì)時(shí)往往需要考慮多方面因素,包括節(jié)點(diǎn)的高性能、容錯(cuò)能力、可擴(kuò)展性、穩(wěn)定性、節(jié)點(diǎn)間耦合程度等[100].例如,2021 年,Glaser 等人[101]描述了一個(gè)輕量級(jí)的、硬件加速的同步和通信單元(synchronization and communication unit,簡稱SCU)的設(shè)計(jì)方案,并將其集成到了一個(gè)8 核心的RISC-V 處理器集群之中,使其性能平均提升了23%、能效平均提升了39%.

      其中,集群各節(jié)點(diǎn)之間的耦合程度是處理器集群系統(tǒng)設(shè)計(jì)中的一個(gè)重點(diǎn)問題,它將影響到節(jié)點(diǎn)的功能劃分、節(jié)點(diǎn)間通信頻率、單個(gè)作業(yè)規(guī)模等多個(gè)設(shè)計(jì)問題的決策.如Shi 等人[102]在2019 年提出了一種專用架構(gòu)E-LSTM,將嵌入式RISC-V CPU 與LSTM 協(xié)處理器進(jìn)行緊耦合,來適應(yīng)芯片面積和數(shù)據(jù)訪問帶寬有限的應(yīng)用環(huán)境,最終對(duì)處理吞吐量實(shí)現(xiàn)了2.2 倍的提升.

      4.1.4 測試與驗(yàn)證

      由于涉及到硬件成本問題,系統(tǒng)的設(shè)計(jì)方案需要經(jīng)過測試和驗(yàn)證,確認(rèn)其功能是否正確完整、性能是否達(dá)標(biāo)、是否具備足夠的安全性和穩(wěn)定性后,才能大規(guī)模投入生產(chǎn).系統(tǒng)的測試是指,在目標(biāo)實(shí)驗(yàn)環(huán)境中對(duì)系統(tǒng)的各項(xiàng)指標(biāo)數(shù)據(jù)進(jìn)行提取,探索其可達(dá)程度范圍的過程;系統(tǒng)的驗(yàn)證則是在給定一個(gè)預(yù)期表現(xiàn)后,判斷系統(tǒng)的表現(xiàn)是否與之相符的過程.二者都是對(duì)系統(tǒng)進(jìn)行評(píng)估的有效手段.

      在系統(tǒng)設(shè)計(jì)的任何一個(gè)環(huán)節(jié)都需要有與之對(duì)應(yīng)的測試或驗(yàn)證方法來保障其正確性.比如,在內(nèi)存問題上,2019 年,Armstrong 等人[103]為包括RISC-V 在內(nèi)的3 種主流架構(gòu)的大部分順序行為提供了嚴(yán)格的語義模型,并使用ISA 語義的自定義語言Sail 實(shí)現(xiàn)了這些模型.他們還將RISC-V 模型集成到了RMEM 工具中,可使用戶模式下的內(nèi)存并發(fā)探索更加容易進(jìn)行,為軟件驗(yàn)證建立了穩(wěn)固的基礎(chǔ).

      在處理器架構(gòu)層面,2019 年,Deng 等人[104],提出了一個(gè)用于安全處理器架構(gòu)的設(shè)計(jì)時(shí)安全驗(yàn)證框架SecChisel.該框架以Chisel 語言和工具為基礎(chǔ),并在設(shè)計(jì)時(shí)使用信息流分析來驗(yàn)證架構(gòu)的安全性.在用AES 和SHA 模塊擴(kuò)展的RISC-V Rocket 芯片上對(duì)該框架進(jìn)行了評(píng)估.Nelson 等人[105]也在2019 年提出了一種用于系統(tǒng)軟件開發(fā)自動(dòng)驗(yàn)證器的框架Serval,并使用Serval 為包括RISC-V 在內(nèi)的4 種指令集構(gòu)建了自動(dòng)驗(yàn)證器.

      在集群網(wǎng)絡(luò)層面,2018 年Khamis 等人[106]提出了一種片上網(wǎng)絡(luò)(networks-on-chips,簡稱NoC)硬件仿真和測試臺(tái)加速的協(xié)同建??蚣?用于對(duì)各種基于網(wǎng)絡(luò)方案的NoC 進(jìn)行驗(yàn)證和評(píng)估.其中,通信量通過開源RISC-V 指令集架構(gòu)注入或自行生成,來作為處理塊(processing tile).

      在系統(tǒng)安全策略方面,2019 年Dessouky 等人[107]構(gòu)建了一個(gè)基于RISC-V SoC 的、可被真實(shí)世界軟件利用的RTL 缺陷測試平臺(tái),并基于所提出的測試平臺(tái),分析了一些安全驗(yàn)證方法的有效性,確認(rèn)了一種現(xiàn)有方法無法檢測到的特定類型漏洞,稱為 HardFails.隨后在 2020 年,Nelson 的團(tuán)隊(duì)又提出了將形式化方法應(yīng)用于BPF(Berkeley packet filter)虛擬機(jī)的即時(shí)編譯器JIT(just in time compiler)方法[108],證明可以在一個(gè)大型的未驗(yàn)證系統(tǒng)中構(gòu)建一個(gè)經(jīng)驗(yàn)證的組件,并基于32 位RISC-V 開發(fā)了一個(gè)用于編寫JIT 并證明其正確性的框架Jitterbug.

      4.2 RISC-V系統(tǒng)性能優(yōu)化

      系統(tǒng)優(yōu)化的主要目標(biāo)在于提升系統(tǒng)的運(yùn)行效率,或者減少對(duì)資源和能源的消耗.系統(tǒng)運(yùn)行的各個(gè)環(huán)節(jié)都可能涉及到對(duì)性能的評(píng)價(jià),而其中最主要的優(yōu)化需求集中在處理器、內(nèi)存、通信、能耗4 個(gè)方面.本節(jié)即圍繞這4個(gè)方面,對(duì)RISC-V 系統(tǒng)性能優(yōu)化的思路和有關(guān)成果進(jìn)行詳述.

      4.2.1 處理器利用率提升

      處理器中的性能優(yōu)化主要體現(xiàn)在其利用率的提升.處理器利用率反映了處理器有效工作時(shí)間在總運(yùn)行時(shí)間中的占比,是一項(xiàng)描述處理器繁忙程度的指標(biāo).減少處理器空閑等待的時(shí)間,提升處理器利用率,將推動(dòng)系統(tǒng)整體的計(jì)算能力或數(shù)據(jù)處理能力的提升,使系統(tǒng)能夠在更短時(shí)間內(nèi)完成既定工作,或者在相同時(shí)間內(nèi)完成更多工作.

      “馮·諾依曼瓶頸”是影響CPU 利用率的一類典型問題.在馮·諾依曼結(jié)構(gòu)[79]的計(jì)算機(jī)系統(tǒng)中,指令與數(shù)據(jù)被不加區(qū)分地存放在內(nèi)存,使得取指令和取數(shù)據(jù)不能同時(shí)進(jìn)行,否則將引起訪存混亂.CPU 在執(zhí)行運(yùn)算前后,都需要額外的時(shí)間等待數(shù)據(jù)完成存取,而不能一直處于工作狀態(tài).因此,馮·諾依曼結(jié)構(gòu)中的CPU 存在一個(gè)相對(duì)較低的利用率上限,無論硬件制造工藝如何提升,都無法再獲得更高的CPU 利用率.

      相應(yīng)地,在 2017 年,包云崗等人[109]提出一種標(biāo)簽化馮·諾依曼體系結(jié)構(gòu) LvNA(labeled von neumann architecture),在經(jīng)典馮·諾依曼結(jié)構(gòu)上增加了一套基于標(biāo)簽機(jī)制的可編程接口,允許向硬件傳遞更多軟件信息,使硬件可以根據(jù)軟件需求動(dòng)態(tài)調(diào)整管理策略.2019 年,該團(tuán)隊(duì)主導(dǎo)的“標(biāo)簽化 RISC-V”開發(fā)項(xiàng)目[110],基于RISC-V Rocket Chip 實(shí)現(xiàn)了LvNA,顯示了RISC-V 在促進(jìn)敏捷開發(fā)、提升編碼效率方面的優(yōu)勢(shì).在2021 年,Schuiki 等人[111]提出了一種輕量級(jí)的RISC-V 擴(kuò)展“流語義寄存器(stream semantic registers,簡稱SSR)”,允許在任何指令中編碼加載和存儲(chǔ)操作,而不再需要依賴顯式的加載與存儲(chǔ)指令,從而給出了一種解決單發(fā)射處理器中存在“馮·諾依曼瓶頸”、影響CPU 利用率問題的方案.實(shí)驗(yàn)結(jié)果顯示,采用SSR 擴(kuò)展的處理器比起未采用的相同處理器,順序代碼單核心運(yùn)行速度提升3 倍,即,集群中實(shí)現(xiàn)相同的性能可減少3 倍的核心數(shù)目;多核心集群的能效提高2 倍,指令獲取的數(shù)量減少3.5 倍,指令緩存功耗減少5.6 倍.

      4.2.2 內(nèi)存優(yōu)化

      內(nèi)存的設(shè)計(jì)直接制約著系統(tǒng)整體的組織形式和工作方式,在數(shù)據(jù)存儲(chǔ)、通信、同步、處理效率等多方面都對(duì)系統(tǒng)有關(guān)鍵性的影響.因此,內(nèi)存優(yōu)化問題始終是系統(tǒng)性能研究的一大重點(diǎn).

      例如,多核處理器中,隨著芯片上核心數(shù)量的增加,會(huì)出現(xiàn)“緩存行乒乓”問題,即,當(dāng)多個(gè)CPU 共享同一緩存行中的變量時(shí),不同CPU 對(duì)該變量的頻繁讀寫會(huì)導(dǎo)致其他CPU 的緩存行頻繁失效.共享內(nèi)存中,硬件緩存一致性范式的線程同步算法,其性能擴(kuò)展問題會(huì)受到緩存行乒乓的阻礙.2019 年,Dogan 等人[112]為了解決多核處理器的緩存行乒乓問題,提出了一種針對(duì)數(shù)據(jù)的硬件內(nèi)移動(dòng)計(jì)算(moving computation,簡稱MC)模型,該模型將共享數(shù)據(jù)固定在專用核上,以實(shí)現(xiàn)數(shù)據(jù)局部性優(yōu)化.研究人員還在RISC-V 上建立了多核仿真環(huán)境,評(píng)估了MC 模型在最多1024 核尺度下的性能擴(kuò)展優(yōu)勢(shì).評(píng)估結(jié)果顯示,與自旋模型、原子模型等現(xiàn)有模型相比,對(duì)每個(gè)數(shù)據(jù)點(diǎn)標(biāo)準(zhǔn)化的完成時(shí)間平均分別提升了60%、27%.

      擴(kuò)展基全局地址空間(extended base global address space,簡稱xBGAS)是2018 年Leidel 等人[113]為了解決可擴(kuò)展的高性能計(jì)算架構(gòu)在操作離開單個(gè)設(shè)備域時(shí)常常遭遇不必要的延遲的問題,所提出的一種RISC-V 指令集微架構(gòu)擴(kuò)展.該擴(kuò)展可以為常見的高性能計(jì)算操作提供緊耦合的支持.由于其提供了從基本指令訪問全局共享內(nèi)存地址空間的可能性,從而開創(chuàng)了一條系統(tǒng)優(yōu)化的新思路,出現(xiàn)了更多以xBGAS 為基礎(chǔ)的研究.

      例如,2019 年Williams 等人在xBGAS 的基礎(chǔ)上,提出了一種構(gòu)建集體通信庫的RISC-V 微架構(gòu)擴(kuò)展方 案[114],給出了它的初始API 設(shè)計(jì)和實(shí)現(xiàn),以及底層算法.這項(xiàng)研究的目的是在分布式地址空間模型中,將更直觀的界面與更高的性能結(jié)合起來,以解決軟件開發(fā)人員很難適應(yīng)并行編程方法,尤其是分布式地址空間中的并行編程問題.

      2020 年Wang 等人提出了一種遠(yuǎn)程原子擴(kuò)展(remote atomic extension,簡稱RAE)的設(shè)計(jì)[115],為基于RISC-V ISA 架構(gòu)的遠(yuǎn)程原子操作提供了內(nèi)在的 ISA 級(jí)指令和架構(gòu)支持,以改善高性能計(jì)算(high performance computing,簡稱HPC)系統(tǒng)的性能.這個(gè)設(shè)計(jì)方案同樣基于xBGAS 擴(kuò)展,具體內(nèi)容見第5.1 節(jié).

      4.2.3 通信延遲緩解

      通信是連接系統(tǒng)各組件、各成分之間的信息交換過程,通信延遲將推遲目標(biāo)獲得所需信息的時(shí)間,從而增大其空閑等待時(shí)間,造成整體用時(shí)延長、目標(biāo)利用率降低、或者能量空耗.緩解通信延遲,除了期待相關(guān)硬件制作工藝的改進(jìn)外,提升系統(tǒng)的并行能力、掩蓋通信延遲的不利影響也是一種可行的做法.

      這方面,Morais 等人[116]在2019 年提出了一種將任務(wù)調(diào)度硬件加速器與通用CPU 緊密集成的體系結(jié)構(gòu),以減少通信延遲及運(yùn)行開銷,從而提高與任務(wù)調(diào)度并行的應(yīng)用程序的性能.他們開發(fā)了硬件加速的輕量級(jí)任務(wù)調(diào)度運(yùn)行時(shí)環(huán)境Phentos,允許任務(wù)調(diào)度軟件通過自定義指令與硬件任務(wù)調(diào)度器和CPU 直接進(jìn)行交互,以最大限度減少硬件任務(wù)調(diào)度器和CPU 之間的通信開銷.Morias 等人認(rèn)為,任務(wù)并行系統(tǒng)的性能會(huì)受到自動(dòng)依賴推理和準(zhǔn)備運(yùn)行任務(wù)調(diào)度相關(guān)開銷的限制,而用于提高運(yùn)行時(shí)性能的硬件加速器往往具有較高的CPU 通信開銷,因此他們希望通過這樣的設(shè)計(jì),來解決CPU 通信的高開銷問題.

      4.2.4 能耗優(yōu)化

      能耗優(yōu)化依賴于對(duì)系統(tǒng)負(fù)載結(jié)構(gòu)的整體設(shè)計(jì),現(xiàn)有研究主要集中在功率控制、電源能效優(yōu)化等方面.

      關(guān)于功率控制,2019 年Zhou 等人[117]介紹了一種基于學(xué)習(xí)的架構(gòu)PRIMAL,它訓(xùn)練了帶有設(shè)計(jì)驗(yàn)證平臺(tái)的機(jī)器學(xué)習(xí)模型.訓(xùn)練后的模型可以用于生成不同工作負(fù)載下的相同塊的詳細(xì)功率剖面.該模型還評(píng)估了幾種已有機(jī)器學(xué)習(xí)模型的性能,包括:嶺回歸、梯度樹提升、多層感知器、卷積神經(jīng)網(wǎng)絡(luò).實(shí)驗(yàn)中,基于卷積神經(jīng)網(wǎng)絡(luò)的方法對(duì)一個(gè)RISC-V 處理器核實(shí)現(xiàn)了35 倍的加速和5.2%的逐周期功率估計(jì)誤差.

      2020 年Bambini 等人基于RISC-V 核心的并行超低功耗微控制,提出了一種開源功率控制器系統(tǒng)(power controller system,簡稱PCS)設(shè)計(jì)方案[118];同時(shí),在一個(gè)開源的實(shí)時(shí)操作系統(tǒng)中,實(shí)現(xiàn)了一種可配置的熱功率控制算法.通過對(duì)熱功率進(jìn)行控制,在能耗和系統(tǒng)穩(wěn)定性兩方面都取得了較好的收益.

      在電源的能源效率提升方面,Wright 等人于2020 年設(shè)計(jì)了一種雙核RISC-V 處理器[119],實(shí)現(xiàn)了一個(gè)完全集成的、片上的、高密度的、由開關(guān)電容DC-DC 轉(zhuǎn)換器供電的細(xì)粒度電壓域系統(tǒng).他們希望用這種方式,通過架構(gòu)和電路的精心設(shè)計(jì),抵消Dennard 定律終結(jié)之后日益顯著的功耗問題,提高能源效率.他們的實(shí)驗(yàn)結(jié)果表明,在系統(tǒng)空閑期間,動(dòng)態(tài)開關(guān)功率可以降低接近62%的理想水平,而對(duì)總體計(jì)算吞吐量幾乎沒有影響.

      4.3 RISC-V系統(tǒng)安全策略設(shè)計(jì)

      系統(tǒng)在工作過程中隨時(shí)會(huì)面臨安全威脅,有時(shí)是操作者自身的操作失誤,有時(shí)則是純粹的惡意攻擊和入侵.這些威脅可能導(dǎo)致系統(tǒng)異常和數(shù)據(jù)破壞,進(jìn)而造成更大的損失.因此,系統(tǒng)需要采用一定的安全策略來應(yīng)對(duì)這些威脅,維護(hù)運(yùn)行的可靠性和穩(wěn)定性.本文根據(jù)安全威脅發(fā)生的主要渠道,將系統(tǒng)可能遭受的安全威脅歸納為如下3 個(gè)方面.

      (1) 硬件微架構(gòu)攻擊.

      這類攻擊通過侵入系統(tǒng)所依賴的硬件微架構(gòu)并將攻擊代碼注入底層硬件,造成系統(tǒng)功能的偏差或失效.由于微處理器等各種集成電路的廣泛應(yīng)用,即使僅針對(duì)一種型號(hào)發(fā)起攻擊,也可產(chǎn)生相當(dāng)規(guī)模的破壞力.

      (2) 內(nèi)存攻擊.

      這類攻擊以干擾或破壞內(nèi)存功能為主要手段.內(nèi)存是存儲(chǔ)和提供處理器運(yùn)算所需信息和數(shù)據(jù)的關(guān)鍵部件,針對(duì)內(nèi)存進(jìn)行攻擊將嚴(yán)重威脅系統(tǒng)功能的正常運(yùn)行.不可信代碼、軟件漏洞、系統(tǒng)弱點(diǎn)都有可能被利用,成為內(nèi)存攻擊的發(fā)起點(diǎn).

      在眾多的內(nèi)存攻擊中,程序控制流劫持攻擊是較為常見和重要的一種攻擊類型.這類攻擊通常會(huì)制造和利用內(nèi)存損壞,然后將控制流重定向至攻擊者指定的內(nèi)存位置,使程序脫離正常執(zhí)行流程,按攻擊者的意圖執(zhí)行.

      (3) 側(cè)信道攻擊(side channel attack,簡稱SCA).

      這類攻擊往往從外部發(fā)起,圍繞構(gòu)成系統(tǒng)的硬件設(shè)備的物理特征或電氣特性實(shí)施,意圖通過測量、統(tǒng)計(jì)、物理觀察等手段推測和獲取系統(tǒng)敏感信息,造成信息泄露.獲得的信息更可作為其他攻擊的基礎(chǔ),形成組合攻擊,進(jìn)一步損害系統(tǒng)安全性.

      針對(duì)上述安全威脅,學(xué)術(shù)界和工業(yè)界提出了許多安全策略.本文將相關(guān)方案要點(diǎn)梳理總結(jié)如下.

      (1) 引入安全硬件,將軟件安全威脅轉(zhuǎn)移到硬件層面解決.

      (2) 模糊易受攻擊的敏感信息,增大攻擊者搜索和獲取敏感信息的時(shí)間或技術(shù)成本.

      (3) 保護(hù)信息流完整性,保障程序執(zhí)行安全.

      (4) 設(shè)置配套驗(yàn)證機(jī)制,及時(shí)發(fā)現(xiàn)攻擊行為.

      (5) 必要時(shí)采用冗余設(shè)計(jì),增加系統(tǒng)容錯(cuò)性,減少對(duì)特定設(shè)備的依賴.

      以下是對(duì)各類有代表性的安全威脅及其應(yīng)對(duì)措施的詳細(xì)介紹和分析.

      4.3.1 硬件微架構(gòu)攻擊的防御

      (1) 威脅分析

      硬件微架構(gòu)是指令集體系結(jié)構(gòu)在處理器中具體執(zhí)行方法的體現(xiàn),直接關(guān)系到指令系統(tǒng)實(shí)現(xiàn)系統(tǒng)功能的能力.由于硬件的生存周期相對(duì)較長,一般可達(dá)數(shù)年之久,通常需要經(jīng)過多次的微代碼更新來解決安全或功能性問題,因此微架構(gòu)與微代碼的設(shè)計(jì)在引入一定的靈活性的同時(shí),也留給了惡意攻擊侵入的空間.例如,微碼木馬可以事先被注入到系統(tǒng)的供應(yīng)鏈中,并在硬件更新時(shí)完成潛入;當(dāng)滿足特定執(zhí)行條件時(shí),即可釋放和執(zhí)行所載有的惡意微碼,對(duì)系統(tǒng)造成侵害.2021 年,Nils Albartus 等人[120]研究了嵌入式硬件環(huán)境下的微碼木馬,揭示了這一侵害方式的具體流程,并在一次攻擊實(shí)驗(yàn)中成功獲取了特定于架構(gòu)的AES 秘鑰.

      (2) 解決方案

      應(yīng)對(duì)硬件微架構(gòu)攻擊,可以從供應(yīng)鏈安全和微架構(gòu)安全兩方面著手.供應(yīng)鏈安全可從源頭切斷惡意微碼的注入渠道,從而避免硬件微架構(gòu)攻擊的發(fā)生;微架構(gòu)安全需要在惡意微碼已經(jīng)侵入時(shí)進(jìn)行有效遏制,增加惡意攻擊成功實(shí)施的困難程度.通常,微碼木馬包括觸發(fā)器和有效負(fù)載兩部分,前者用于在特定條件下觸發(fā)木馬,后者包含具體的惡意攻擊代碼,并將在木馬被觸發(fā)時(shí)發(fā)動(dòng)攻擊.因此,對(duì)微碼進(jìn)行加密或?qū)γ舾袇^(qū)域進(jìn)行隔離,以防止相關(guān)信息泄露達(dá)成觸發(fā)條件,是一種常見的做法.2020 年,Lee 等人[121]提出了一套可定制的可信執(zhí)行環(huán)境(trusted execution environments,簡稱TEE)開放框架Keystone,通過構(gòu)建可重用的TEE 核心原語,實(shí)現(xiàn)了對(duì)不受信任組件的可編程層的隔離.

      4.3.2 程序劫持攻擊的防御

      (1) 威脅分析

      程序劫持攻擊是通過對(duì)程序的控制流進(jìn)行干擾、誤導(dǎo)、破壞,使程序按攻擊者意圖執(zhí)行的一種攻擊手段.制造并利用內(nèi)存損壞,然后將控制流重定向至攻擊者指定的內(nèi)存位置,是程序劫持攻擊中的典型做法[122].例如,緩沖區(qū)溢出攻擊[123]可以通過構(gòu)造足夠長度的字符串,充滿并溢出缺乏邊界保護(hù)機(jī)制的緩沖區(qū),將含有惡意代碼地址的數(shù)據(jù)送入保存返回地址的內(nèi)存區(qū)域,覆蓋原有的程序返回地址.這樣,在當(dāng)前程序塊返回時(shí),便將自動(dòng)執(zhí)行惡意代碼.Cowan 等人在他們的工作[124]中描述了這個(gè)過程,如圖6(a)所示.

      (2) 解決方案

      控制流完整性(control-flow integrity,簡稱CFI)[125]是應(yīng)對(duì)程序劫持攻擊的主要技術(shù)措施.它的核心思想是為程序構(gòu)造對(duì)應(yīng)的控制流圖(control flow graph,簡稱CFG),并保證程序在執(zhí)行過程中嚴(yán)格遵守該控制流圖,而不會(huì)跳轉(zhuǎn)到圖以外的其他地址范圍之中.關(guān)于如何保證程序的執(zhí)行嚴(yán)格遵守控制流圖,研究人員提出了許多具體的方法.例如,在上文提到的緩沖區(qū)溢出攻擊場景[123]中,基于金絲雀字(canary)的攻擊檢測技術(shù)便是一種可行的設(shè)計(jì).金絲雀字是置于返回地址邊緣的一段特殊字符,當(dāng)溢出發(fā)生時(shí),金絲雀字將首先被改變.因此,只需核對(duì)金絲雀字是否正確,即可判斷當(dāng)前是否已遭到緩沖區(qū)溢出攻擊.圖6(b)描述了利用金絲雀字技術(shù)檢測緩沖區(qū)溢出攻擊的主要過程.

      為了防止攻擊者事先猜測到金絲雀字的正確內(nèi)容,De 等人[126]提出了一種基于安全硬件指紋的隨機(jī)金絲雀字生成方法PUFCanary,并在RISC-V Rocket 芯片中實(shí)現(xiàn)了該方法.PUFCanary 隨機(jī)生成的金絲雀字無需保存在內(nèi)存或寄存器中,減小了攻擊表面.在多緩沖區(qū)場景下,PUFCanary 能提供針對(duì)單一緩沖區(qū)的細(xì)粒度保護(hù).此外,PUFCanary 還可以在編譯器的支持下,檢測源于緩沖區(qū)溢出的數(shù)據(jù)流攻擊.在Wilander 緩沖區(qū)溢出套件[127]中的測試結(jié)果表明,PUFCanary 能夠阻止所有8 個(gè)可移植到RISC-V 工具鏈中的棧溢出攻擊用例.

      基于內(nèi)存保護(hù)的設(shè)計(jì)也是對(duì)抗程序劫持攻擊的一種基本方法,具體可以包括邊界檢查、地址布局隨機(jī)化、返回地址驗(yàn)證等內(nèi)容.2020 年,Li 等人[54]為了提高消息認(rèn)證碼(message authentication code,簡稱MAC)的安全機(jī)制性能,以較低開銷實(shí)現(xiàn)加密控制流完整性(cryptographic control flow integrity,簡稱CCFI)和ARM 指針認(rèn)證(pointer authentication,簡稱PA),并提高其對(duì)于重用攻擊的防御能力,提出了一種堆棧布局,將之前的返回地址推送到當(dāng)前的堆棧幀上,并在函數(shù)調(diào)用時(shí),將當(dāng)前返回地址存儲(chǔ)到硬件緩沖區(qū)中.設(shè)計(jì)了兩種基于錯(cuò)位堆棧的驗(yàn)證方法:延遲驗(yàn)證和批驗(yàn)證.延遲驗(yàn)證直到從堆棧彈出的返回地址被返回時(shí)才進(jìn)行驗(yàn)證;批驗(yàn)證一次驗(yàn)證兩個(gè)返回地址.他們?cè)赗ISC-V 架構(gòu)上實(shí)現(xiàn)了這兩種驗(yàn)證方法,并定量分析了它們對(duì)于QEMU 模擬處理器的影響.

      基于安全硬件的軟硬件協(xié)作方案為實(shí)現(xiàn)控制流完整性、抵御程序劫持攻擊提供了另一種思路.例如,2018年Ferraiuolo 等人[128]提出了一種增強(qiáng)安全信息流(包括控制定時(shí)信道)的處理器HyperFlow.它使用一種類型安全的硬件描述語言實(shí)現(xiàn),允許在運(yùn)行時(shí)配置復(fù)雜的信息流策略,并在一個(gè)提供了完整RISC-V 指令集的處理器上對(duì)HyperFlow 架構(gòu)進(jìn)行了原型實(shí)現(xiàn).2019 年Gallagher 等人[129]提出了一種安全硬件架構(gòu)Morpheus,通過模糊攻擊者需要但普通程序不使用的信息,防止利用濫用程序和機(jī)器級(jí)語義之間的鴻溝進(jìn)行的攻擊,如定位敏感指針、利用bug 覆蓋敏感數(shù)據(jù)、劫持受害者程序的執(zhí)行等.他們通過一個(gè)基于RISC-V 指令集的處理器原型演示了 Morpheus,成功阻止了所設(shè)計(jì)的控制流攻擊.2020 年 Bresch 等人[130]提出了一種軟硬件系統(tǒng)設(shè)計(jì)框架TrustFlow-X,針對(duì)基于內(nèi)存的攻擊提供了有效的細(xì)粒度控制流完整性保護(hù).他們使用LLVM 編譯器工具鏈生成TrustFlow-X 的安全代碼,然后在擴(kuò)展的RISC-V 處理器上執(zhí)行這些安全代碼,達(dá)到了預(yù)期保護(hù)效果.

      Fig.6 Process of buffer overflow attack (a) and detecting (b)圖6 緩沖區(qū)溢出攻擊(a)及利用金絲雀字技術(shù)檢測攻擊(b)的過程

      4.3.3 其他內(nèi)存攻擊的防御

      (1) 威脅分析

      基于內(nèi)存的攻擊不僅可以作為程序劫持攻擊的基礎(chǔ),還可能造成許多其他的威脅,比如面向數(shù)據(jù)編程(data-oriented programming,簡稱DOP)攻擊.這一類型的攻擊往往通過內(nèi)存行為模擬操作,對(duì)數(shù)據(jù)流中的非控制數(shù)據(jù)進(jìn)行攻擊.Hu 等人[131]總結(jié)了一些關(guān)于內(nèi)存攻擊的具體行為類別,包括模擬算術(shù)操作、模擬賦值操作、模擬解引用(dereference)操作等.不同的內(nèi)存攻擊行為需要根據(jù)其特征,有針對(duì)性地緩解和解決.

      (2) 解決方案

      針對(duì)基于內(nèi)存的攻擊,可以有軟件和硬件兩種不同的應(yīng)對(duì)方式.軟件方式如,2019 年Nyman 等人[132]提出的運(yùn)行時(shí)作用域增強(qiáng)(run-time scope enforcement,簡稱RSE)的方法,通過增強(qiáng)編譯時(shí)內(nèi)存安全性約束(如變量可見性規(guī)則),有效地減輕所有當(dāng)前已知的DOP 攻擊.在此基礎(chǔ)上,給出了一種RISC-V 硬件輔助RSE 的概念實(shí)現(xiàn)Hardscope.硬件方式如,2017 年Menon 等人[133]提出了一個(gè)處理內(nèi)存攻擊的統(tǒng)一硬件框架,并將之與RISC-V 微架構(gòu)結(jié)合,形成了Shakti-T 原型系統(tǒng).這一方案通過為系統(tǒng)提供額外的硬件支持,可以保護(hù)敏感應(yīng)用(如電子商務(wù)交易等)的信息免受基于時(shí)間或空間的內(nèi)存攻擊.

      2020 年,De 等人[126]為他們所提出的硬件生成堆棧金絲雀字引擎PUFCanary,設(shè)計(jì)了一個(gè)專用的嵌入式RISC-V 安全協(xié)處理器流完整性擴(kuò)展——FIXER.除緩沖區(qū)溢出攻擊外,FIXER 還可以幫助RISC-V 架構(gòu)對(duì)抗代碼注入、代碼重用等類型的攻擊.

      其他有代表性的研究成果還包括:Wong 等人[134]在2018 年將內(nèi)存保護(hù)單元(memory protection unit,簡稱MPU)集成到RISC-V 可信SoC 中的設(shè)計(jì),并以此實(shí)現(xiàn)了一個(gè)設(shè)計(jì)框架SMARTS,以實(shí)現(xiàn)對(duì)已知攻擊向量的輕量級(jí)但健壯的對(duì)抗.該框架可以為SoC 提供完整性和保密性,并允許根據(jù)需求進(jìn)行靈活的部分加密.2020 年,Kokologiannakis 等人[135]提出了一種高效的無狀態(tài)模型檢查(Stateless model checking,簡稱SMC)算法——HMC 算法,用于在任意硬件內(nèi)存模型下,以合理、完整和最優(yōu)的方式驗(yàn)證程序.

      4.3.4 側(cè)信道攻擊的防御

      (1) 威脅分析

      側(cè)信道攻擊是指攻擊者從系統(tǒng)的物理實(shí)現(xiàn)出發(fā),通過測量、統(tǒng)計(jì)、物理觀察等手段推測和獲取系統(tǒng)敏感信息的攻擊手段.側(cè)信道攻擊是密碼系統(tǒng)安全的主要威脅之一,因此長期受到業(yè)界關(guān)注.早在2011 年,Persial 等 人[136]便總結(jié)了可能的側(cè)信道攻擊種類,他們根據(jù)所依托介質(zhì)的不同,將側(cè)信道攻擊劃分為基于時(shí)間、功率、電磁、錯(cuò)誤注入、光學(xué)、流量、聲學(xué)、熱成像的八種具體的攻擊形式,并重點(diǎn)分析了基于功率的攻擊和基于錯(cuò)誤注入的攻擊.在2017 年,Guo 等人[137]分析了針對(duì)密碼設(shè)備的側(cè)信道攻擊,討論了在面對(duì)不同加密算法(AES、DES、RSA、ECC)時(shí)的具體攻擊過程,并重點(diǎn)研究了應(yīng)對(duì)差分能量分析(differential power analysis,簡稱DPA)的保護(hù)策略.Saxena 等人[138]在2018 年調(diào)研了基于緩存的側(cè)信道攻擊,總結(jié)了一些可以應(yīng)用于云計(jì)算環(huán)境中的防御方法.Devi 等人[139]在2021 年對(duì)物聯(lián)網(wǎng)環(huán)境中的側(cè)信道攻擊進(jìn)行了分析,將其劃分為簡單攻擊、差分攻擊、功率分析攻擊、故障攻擊、時(shí)間攻擊五類.

      此外,側(cè)信道攻擊還可能與其他攻擊手段相結(jié)合,作為組合攻擊的一個(gè)環(huán)節(jié)發(fā)起其他攻擊.例如,2019 年,Van Bulck 等人[140]揭示了幾個(gè)在應(yīng)用程序二進(jìn)制接口(ABI)和應(yīng)用程序編程接口(application programming interface,簡稱API)級(jí)別上的側(cè)信道漏洞,攻擊者可以通過這些漏洞發(fā)起對(duì)內(nèi)存安全和編譯包的進(jìn)一步攻擊.他們對(duì)TEE 的漏洞空間進(jìn)行了分析,論證了最先進(jìn)的緩解技術(shù),如Intel 的edger8r 等,都無法完全消除這種攻擊面.2020 年,Spruyt 等人[141]也發(fā)現(xiàn)了現(xiàn)有的側(cè)信道攻擊可以直接應(yīng)用于純錯(cuò)誤注入(fault injection,簡稱FI)攻擊的設(shè)置,并提出了一種對(duì)故障概率軌跡執(zhí)行相關(guān)功耗分析(correlation power analysis,簡稱CPA)的技術(shù)方案——故障相關(guān)性分析(fault correlation analysis,簡稱FCA).

      Ahmadi 等人[142]在2020 年討論了針對(duì)RISC-V 處理器的側(cè)信道攻擊問題.他們認(rèn)為,RISC-V 處理器作為一種開放式硬件,在功率、時(shí)間和溫度3 個(gè)指標(biāo)上最易受到利用而泄露信息.其中,功率側(cè)信道攻擊和時(shí)間側(cè)信道攻擊是最主要的兩種可由軟件發(fā)起的攻擊方式.但是,對(duì)于如何應(yīng)對(duì)這些威脅,文中并沒有給出太多的分析,僅列舉了一種已有的安全解決方案[143].

      (2) 解決方案

      經(jīng)前文分析可知,側(cè)信道攻擊可能通過多種渠道發(fā)起,以基于功率、時(shí)間、電磁等為主.現(xiàn)有的解決方案,也都是適用于其中一種或幾種渠道的針對(duì)性防御方法.

      例如,2019 年,De Mulder 等人[143]將側(cè)信道分析攻擊對(duì)策集成到RISC-V 中實(shí)現(xiàn),發(fā)現(xiàn)這種做法可以防止first-order 功率或電磁攻擊,同時(shí)盡可能地降低實(shí)現(xiàn)成本.

      同年,Deng 等人[144]針對(duì)從轉(zhuǎn)換檢測緩沖區(qū)(translation lookaside buffer,簡稱TLB)到基于時(shí)間的側(cè)信道攻擊,研究了一種自動(dòng)生成測試TLB 漏洞的微安全基準(zhǔn)方法,并提出了兩種安全TLB 的設(shè)計(jì)方案:靜態(tài)分區(qū)(static- partition,簡稱SP)TLB 和隨機(jī)填充(random-fill,簡稱RF)TLB.他們使用Rocket 開源IP 核實(shí)現(xiàn)的RISC-V 處理器架構(gòu)評(píng)估了所提出的安全TLB.

      2020 年,Sehatbakhsh 等人[145]提出了一種模擬電磁側(cè)信道信號(hào)的方法EMSim,可以使用器件架構(gòu)模型對(duì)電磁側(cè)信道信號(hào)進(jìn)行逐周期模擬,以定量分析側(cè)信道泄露,從而為設(shè)計(jì)對(duì)側(cè)信道攻擊具有高彈性的系統(tǒng)打下基礎(chǔ).

      4.3.5 安全策略總結(jié)

      表10 總結(jié)了本節(jié)提及的各類RISC-V 系統(tǒng)中可用的安全策略.

      5 RISC-V 應(yīng)用場景分析

      本節(jié)將列舉一些利用RISC-V 促進(jìn)特定領(lǐng)域應(yīng)用研究的案例,并對(duì)RISC-V 在其中所能發(fā)揮的作用以及應(yīng)用要點(diǎn)進(jìn)行簡要的分析.其中,第1 個(gè)應(yīng)用[115]描述了一種對(duì)RISC-V 指令集自身的擴(kuò)展場景;第2 個(gè)應(yīng)用[19]介紹了利用RISC-V 實(shí)現(xiàn)特定領(lǐng)域功能的系統(tǒng)設(shè)計(jì)場景;第3 個(gè)應(yīng)用[146]研究了一種發(fā)掘RISC-V 系統(tǒng)潛力、提升系統(tǒng)性能的方法;第4 個(gè)應(yīng)用[147]圍繞系統(tǒng)安全主題,討論了一種利用RISC-V 實(shí)現(xiàn)安全批準(zhǔn)的實(shí)施方案.

      5.1 RAE:一種遠(yuǎn)程原子擴(kuò)展

      5.1.1 場景描述

      在圖形分析、機(jī)器學(xué)習(xí)、數(shù)據(jù)驅(qū)動(dòng)的科學(xué)計(jì)算等新興的數(shù)據(jù)密集型應(yīng)用的推動(dòng)下,HPC 系統(tǒng)的結(jié)構(gòu)逐漸復(fù)雜化,大量數(shù)據(jù)集被映射到離散的節(jié)點(diǎn)中,以實(shí)現(xiàn)分布式存儲(chǔ)和計(jì)算.這種數(shù)據(jù)分布將導(dǎo)致頻繁的跨節(jié)點(diǎn)數(shù)據(jù)事務(wù).尤其是在全局原子操作中,跨節(jié)點(diǎn)的讀寫修改等操作包含了多個(gè)操作步驟和特定的原子性管理,導(dǎo)致了大量開銷.解決開銷問題需要一種有效的通信方法,并結(jié)合相應(yīng)的軟件基礎(chǔ)設(shè)施來實(shí)現(xiàn)對(duì)離散組件的集成,減少跨設(shè)備的冗余軟件例程.為此,在2020 年,Wang 等人提出了一種RAE 的設(shè)計(jì)[115],為基于RISC-V ISA 架構(gòu)的遠(yuǎn)程原子操作提供了內(nèi)在的ISA 級(jí)指令和架構(gòu)支持,最終改善HPC 系統(tǒng)的性能.

      RAE 首先引入了已有的xBGAS 擴(kuò)展指令集以支持全局內(nèi)存尋址功能.然后,設(shè)計(jì)了一系列原子指令,通過xBGAS 尋址來執(zhí)行遠(yuǎn)程原子操作.這些操作共有7 類:fetch-and-add、fetch-and-xor、fetch-and-or、fetch-and-and、fetch-and-max、fetch-and-min、compare-and-swap,每一類都包含一條遠(yuǎn)程原子操作指令和一條對(duì)應(yīng)的本地原子指令,均采用R 型指令格式.因此,RAE 擴(kuò)展共包含了14 條R 型原子操作指令.圖7 以fetch-and-add 指令為例,描述了一次原子操作的過程.圖8 描述了RAE 所依托的xBGAS 原子設(shè)計(jì)架構(gòu).

      Fig.7 Fetch-and-add atomic operation process[115]圖7 Fetch-and-add 原子操作過程[115]

      Fig.8 Architecture of Atomic Design in xBGAS[115]圖8 xBGAS 中的原子設(shè)計(jì)架構(gòu)[115]

      在此基礎(chǔ)上,RAE 還引入了網(wǎng)絡(luò)接口控制器(network interface controller,簡稱NIC)等基礎(chǔ)設(shè)施來處理遠(yuǎn)程請(qǐng)求,以及操作映射表(operation mapping table,簡稱OMT)將遠(yuǎn)程請(qǐng)求解包并轉(zhuǎn)換為本地操作,以提供指令執(zhí)行的效率.

      5.1.2 場景分析

      對(duì)于RISC-V 指令集自身的擴(kuò)展研究需要考慮如下問題.

      (1) 工作場景或功能目標(biāo)

      (2) 各指令的功能、格式信息

      (3) 實(shí)現(xiàn)的可行性

      在本例中,RAE 將工作場景約束在了高性能系統(tǒng)中的分布式數(shù)據(jù)跨節(jié)點(diǎn)操作環(huán)境,并以實(shí)現(xiàn)高效的遠(yuǎn)程原子操作為自身的功能目標(biāo),從而確定了各指令應(yīng)完成的功能.根據(jù)指令的功能,判斷其所含操作數(shù)的情況,選擇合適的指令格式進(jìn)行設(shè)計(jì).RAE 的14 條指令均帶有兩個(gè)操作數(shù),并且需要支持xBGAS 全局尋址,因此選擇了R型格式.在指令的實(shí)現(xiàn)方面,RAE 設(shè)計(jì)了各指令的具體工作流程,并引入了NIC 等相應(yīng)的基礎(chǔ)設(shè)施和OMT 等機(jī)制,給出了一套完整且效率理想的實(shí)現(xiàn)方案.

      5.2 SALSA:一個(gè)用于序列比對(duì)的領(lǐng)域?qū)S眉軜?gòu)

      5.2.1 場景描述

      基因組數(shù)據(jù)正在個(gè)性化醫(yī)療和農(nóng)業(yè)科技等領(lǐng)域發(fā)揮重要作用,而基因組序列比對(duì)是其數(shù)據(jù)分析中最重要的任務(wù)之一,目標(biāo)是找到DNA 序列之間的相似性和樣式.完成該任務(wù)需要使用計(jì)算密集型算法處理大量數(shù)據(jù).但現(xiàn)有的硬件設(shè)施均存在各自的劣勢(shì),不適合直接用于序列比對(duì):通用CPU 在處理大量數(shù)據(jù)時(shí)效率低下;GPU雖然提供優(yōu)秀的性能和可編程性,但功耗較高;FPGA 具有良好的性能和功耗比,但編程難度較大.為了在性能、功耗、可編程性之間取得較好的平衡,Di Tucci 等人[19]提出了一種用于序列比對(duì)的領(lǐng)域?qū)S眉軜?gòu)(domain specific architecture,簡稱DSA)SALSA.

      SALSA 在設(shè)計(jì)上主要由一個(gè)流水線組成,共分為4 個(gè)階段:取碼/解碼、調(diào)度、加載/存儲(chǔ)、計(jì)算,每個(gè)階段都與解決特定任務(wù)的硬件單元相關(guān)聯(lián).

      (1) 取碼/解碼階段:從主處理器獲取指令,并將其傳遞給調(diào)度器;

      (2) 調(diào)度階段:可以決定將指令發(fā)送至加載/存儲(chǔ)階段,或直接發(fā)送至計(jì)算階段;

      (3) 加載/存儲(chǔ)階段:直接連接內(nèi)存控制器,執(zhí)行單個(gè)或多個(gè)加載/存儲(chǔ)請(qǐng)求;

      (4) 計(jì)算階段:與I/O 完全分離,完成具體的計(jì)算操作.

      Fig.9 Top level architecture of SALSA[19]圖9 SALSA 頂層架構(gòu)設(shè)計(jì)[19]

      SALSA 的頂層架構(gòu)設(shè)計(jì)如圖9 所示.其中,計(jì)算單元由一個(gè)PE 調(diào)度器(PE dispatcher)、一組PE 子調(diào)度器(PE subdispatcher)、一個(gè)緊耦合的PE 線性陣列、一組全局寄存器(global registers,可由所有處理單元以讀模式訪問)、一個(gè)FIFO 緩沖區(qū),和一組與PE 采集器通信的PE 子采集器(PE subcollector)組成.系統(tǒng)可采用自定義的ALU 來加速計(jì)算的執(zhí)行.具體地,SALSA 設(shè)計(jì)了3 個(gè)特定于應(yīng)用的ALU 來執(zhí)行序列比對(duì),這些ALU 用于執(zhí)行Smith- Waterman 算法、Needleman Wunsch 算法和Smith-Waterman 算法.

      5.2.2 場景分析

      如第4.1 節(jié)所述,RISC-V 系統(tǒng)的功能設(shè)計(jì)主要考慮的是工作流通路的構(gòu)造問題,以及圍繞該問題所衍生出的指令集選取、內(nèi)存設(shè)計(jì)、通信、負(fù)載平衡等.在本例中,SALSA 確定了其工作流為對(duì)DNA 序列數(shù)據(jù)的解碼和比對(duì)運(yùn)算過程,并根據(jù)其特點(diǎn)選定了以流水線形式的構(gòu)造方案,分四個(gè)階段依次完成了對(duì)指令的獲取、調(diào)度、內(nèi)存處理、計(jì)算的過程.

      為了使SALSA 具有可編程性和可擴(kuò)展性,其指令建立在ROCC 接口[25]之上.ROCC 接口使用了RISC-V 規(guī)范中為非標(biāo)準(zhǔn)擴(kuò)展預(yù)留的編碼空間,可以使用ROCC 指令格式來定義特定ALU 上的操作.用戶也可以利用SALSA 定義新的算法和操作指令,將其適用范圍擴(kuò)展到更一般的領(lǐng)域中.

      5.3 MAC:3D棧內(nèi)存聚合單元

      5.3.1 場景描述

      在圖形分析、數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)、數(shù)據(jù)驅(qū)動(dòng)的科學(xué)計(jì)算等新興的數(shù)據(jù)密集型應(yīng)用場景中,對(duì)內(nèi)存的訪問呈現(xiàn)出越來越不規(guī)則的模式,使得傳統(tǒng)的基于緩存的處理器體系結(jié)構(gòu)效率低下.3D 棧存儲(chǔ)設(shè)備,如混合存儲(chǔ)立方體(hybrid memory cube,簡稱HMC)和高帶寬存儲(chǔ)器(high bandwidth memory,簡稱HBM)等,可以以較低的內(nèi)存密度為代價(jià),大幅增加帶寬,對(duì)于內(nèi)存受限的應(yīng)用有很大吸引力.但是傳統(tǒng)的內(nèi)存接口與3D 棧存儲(chǔ)設(shè)備匹配性差,無法充分利用后者的帶寬優(yōu)勢(shì).為此,Wang 等人[146]提出了一種3D 棧內(nèi)存聚合單元——記憶體存取整合器(memory access coalescer,簡稱MAC),以構(gòu)造可擴(kuò)展的多節(jié)點(diǎn)非統(tǒng)一的內(nèi)存體系結(jié)構(gòu)(non-uniform memory architecture,簡稱NUMA).在該結(jié)構(gòu)中,每個(gè)節(jié)點(diǎn)都是一個(gè)獨(dú)立的處理器,并通過MAC 直接連接到3D 棧內(nèi)存存儲(chǔ)設(shè)備,實(shí)現(xiàn)近內(nèi)存訪問.MAC 聚合單元及NUMA 體系結(jié)構(gòu)的設(shè)計(jì)架構(gòu)如圖10 所示.

      Fig.10 Architecture of MAC design[146]圖10 MAC 設(shè)計(jì)架構(gòu)[146]

      在這個(gè)設(shè)計(jì)中,MAC 共包含兩個(gè)組成部分:原始請(qǐng)求聚合器和請(qǐng)求構(gòu)建器.原始請(qǐng)求聚合器負(fù)責(zé)根據(jù)請(qǐng)求類型和物理地址對(duì)原始請(qǐng)求進(jìn)行分組,然后將落入同一行的原始請(qǐng)求合并,分派到請(qǐng)求構(gòu)建器.請(qǐng)求構(gòu)建器根據(jù)體系結(jié)構(gòu)提供的可擴(kuò)展內(nèi)存操作量和延遲,確定聚合請(qǐng)求的數(shù)據(jù)包尺寸,并組裝生成具體的3D 棧內(nèi)存請(qǐng)求,將其發(fā)送到3D 棧內(nèi)存.

      在本地節(jié)點(diǎn)接收到來自本地3D 棧內(nèi)存的響應(yīng)之后,會(huì)先將數(shù)據(jù)存儲(chǔ)到緩沖區(qū)中;響應(yīng)路由器對(duì)緩沖器中的數(shù)據(jù)進(jìn)行分析,根據(jù)每個(gè)請(qǐng)求的目標(biāo)(TID、事務(wù)ID 等)將實(shí)際數(shù)據(jù)定向到其目的地.此時(shí),若原始請(qǐng)求是遠(yuǎn)程的,數(shù)據(jù)會(huì)經(jīng)互連路由送入相應(yīng)的遠(yuǎn)程節(jié)點(diǎn);否則,數(shù)據(jù)將直接發(fā)往本地節(jié)點(diǎn)的處理器核.

      5.3.2 場景分析

      對(duì)于RISC-V 系統(tǒng)性能的優(yōu)化,可以從處理器、內(nèi)存、通信、能耗等方面入手,本例即是針對(duì)內(nèi)存結(jié)構(gòu)的優(yōu)化.而在具體的設(shè)計(jì)和實(shí)施過程中,RISC-V 構(gòu)成了MAC 的工作基礎(chǔ),體現(xiàn)了在架構(gòu)設(shè)計(jì)、資源管理、工具鏈等方面的優(yōu)勢(shì).

      MAC 基于RISC-V 核心及RV64IMAFDC 指令集架構(gòu)實(shí)現(xiàn),在處理器、內(nèi)存、存儲(chǔ)設(shè)備之間構(gòu)造了新的數(shù)據(jù)通路,而充分發(fā)揮了設(shè)備的帶寬優(yōu)勢(shì),提升了數(shù)據(jù)吞吐率和處理效率.

      實(shí)驗(yàn)驗(yàn)證的環(huán)境也采用RISC-V 構(gòu)建:首先利用RISC-V spike 模擬器實(shí)現(xiàn)了一個(gè)內(nèi)存跟蹤器,可以捕獲多處理器系統(tǒng)生成的內(nèi)存操作;然后在該模擬器中實(shí)現(xiàn)了處理器核心的SPM 部分,并擴(kuò)展了RISC-V ISA 及相應(yīng)的交叉編譯器,以實(shí)現(xiàn)對(duì)SPM 功能(預(yù)取、寫回等)的管理.實(shí)驗(yàn)系統(tǒng)采用8 個(gè)RISC-V 核心,每個(gè)核心有1MB 的SPM 和8GB 的HMC 設(shè)備.

      實(shí)驗(yàn)結(jié)果表明,系統(tǒng)的合并效率(使用MAC 的合并請(qǐng)求數(shù)占未使用MAC 的原始請(qǐng)求數(shù)的百分比)平均可達(dá)到52.86%,即,MAC 合并了一半以上的原始請(qǐng)求.

      5.4 Notary安全批準(zhǔn)方案

      5.4.1 場景描述

      在一些安全敏感的操作場景(如金融、系統(tǒng)管理等)中會(huì)需要用戶在特定設(shè)備(如電腦、智能手機(jī)等)上進(jìn)行批準(zhǔn).Anish Athalye 的團(tuán)隊(duì)[147]研究了批準(zhǔn)的過程,利用RISC-V 設(shè)計(jì)實(shí)現(xiàn)了一套軟硬件結(jié)合的安全批準(zhǔn)體系Notary.Notary 旨在解決如下問題.

      (1) 為批準(zhǔn)過程提供強(qiáng)力安全保障.

      (2) 在單一設(shè)備上支持多種批準(zhǔn),而不發(fā)生相互干擾和泄密.

      Notary 假定遠(yuǎn)程攻擊者可以完全控制用戶的計(jì)算機(jī),并且可以創(chuàng)建惡意代理,誘騙用戶安裝和運(yùn)行,而惡意代理能夠破壞其所在代理域的數(shù)字門抽象.但是遠(yuǎn)程攻擊者無法與用戶進(jìn)行物理上的交互,用戶也能夠正確使用Notary,只批準(zhǔn)期望批準(zhǔn)的操作.

      基于上述威脅模型,Notary 在硬件層面被設(shè)計(jì)為一個(gè)帶有小型顯示屏和操作按鈕的專用安全設(shè)備,形狀類似于小型U 盤;在軟件層面,Notary 被劃分為3 個(gè)域:內(nèi)核域、代理域、通信域,每個(gè)域都獨(dú)占一塊SoC,并通過UART 鏈路相互連接.圖11 顯示了Notary 的整體設(shè)計(jì)方案.

      Fig.11 Overall design of Notary[147]圖11 Notary 整體設(shè)計(jì)[147]

      5.4.2 場景分析

      Notary 使用3 個(gè)獨(dú)立的SoC 構(gòu)建構(gòu)建其原型,并在FPGA 上實(shí)例化.其中,使用基于PicoRV32 CPU 的RISC-V SoC 實(shí)現(xiàn)了代理域的設(shè)計(jì),利用了RISC-V 的特權(quán)機(jī)制對(duì)域進(jìn)行管理.Notary 的代理域執(zhí)行第三方提供的代理代碼,是抵御惡意代理的第1 道關(guān)口.它獨(dú)占顯示屏和操作按鈕的訪問權(quán)限,可以防止攻擊者偽造虛假的屏幕輸出,或者偽造虛假的按鈕輸入.

      Notary 還需要實(shí)現(xiàn)多重代理之間的切換過程,為此采用了一種基于重置的交換技術(shù):先重置SoC,清除所有內(nèi)部狀態(tài),再執(zhí)行引導(dǎo)程序,令內(nèi)核域從閃存中加載新的代理,并通過UART 線路更新其他域的數(shù)據(jù).這個(gè)過程中,基于RISC-V 的工具簡化了重置的過程,正確清除了所有的SoC 內(nèi)部狀態(tài),并顯示出該技術(shù)應(yīng)用到更復(fù)雜的SoC 的可能性.

      6 未來發(fā)展方向

      RISC-V 是一種很有前景的指令集架構(gòu),擁有十分廣闊的發(fā)展空間.本文認(rèn)為,至少在以下一些方面,RISC-V能夠取得可以預(yù)見的進(jìn)展.

      6.1 硬件的新發(fā)展

      隨著社會(huì)需求的不斷增長和相關(guān)技術(shù)的不斷進(jìn)步,會(huì)不斷涌現(xiàn)出各種新類型硬件.如何適應(yīng)新的工作環(huán)境,適配這些新的硬件,而繼續(xù)保證RISC-V 系統(tǒng)的功能完整性、性能優(yōu)越性、安全穩(wěn)定性,將成為隨之而來的問題.現(xiàn)有的一些 RISC-V 異構(gòu)硬件解決方案將在解決這一問題中發(fā)揮重要的作用;而在硬件方面取得新突破后,RISC-V 架構(gòu)自身是否也會(huì)隨之發(fā)生新的變化,同樣值得關(guān)注.

      特別地,技術(shù)的進(jìn)步和新硬件的出現(xiàn)也可能導(dǎo)致新的攻擊形式產(chǎn)生,使傳統(tǒng)的系統(tǒng)安全防御方法失去作用.例如,量子計(jì)算機(jī)的出現(xiàn)為密碼安全帶來了新的威脅,需要后量子安全方案才能加以抑制.繼續(xù)研究完善RISC-V 指令集及其系統(tǒng)的安全機(jī)制和防御手段,將是相當(dāng)重要的工作方向.

      6.2 與新技術(shù)結(jié)合

      RISC-V 自身也可以與新技術(shù)結(jié)合,在功能、性能、安全等領(lǐng)域?qū)崿F(xiàn)新的突破.例如,隨著神經(jīng)科學(xué)和腦科學(xué)的不斷發(fā)展,通過腦機(jī)接口技術(shù),可以實(shí)現(xiàn)生命體對(duì)機(jī)器的直接操控或影響;RISC-V 便可以與此技術(shù)結(jié)合,在生命醫(yī)療、自動(dòng)化控制等領(lǐng)域發(fā)揮更大的作用.目前已有研究團(tuán)隊(duì)在此方向上進(jìn)行了嘗試,如Karageorgos 等人[148]設(shè)計(jì)的植入式腦機(jī)接口通用架構(gòu)HALO,已在促進(jìn)醫(yī)療和腦研究方面收獲了一定的經(jīng)驗(yàn).

      7 結(jié)束語

      本文對(duì)近年來RISC-V 體系結(jié)構(gòu)相關(guān)的研究進(jìn)行了分析和總結(jié).首先介紹了RISC-V 指令集的有關(guān)概念和發(fā)展現(xiàn)狀,總結(jié)了各基礎(chǔ)指令集、擴(kuò)展指令集的審批狀態(tài)和RISC-V 的幾種權(quán)限模式.然后,對(duì)RISC-V 系統(tǒng)所依托的硬件平臺(tái)(處理器、模擬器等)進(jìn)行了總結(jié)分析.接著,從功能實(shí)現(xiàn)、性能優(yōu)化、安全策略這3 個(gè)方面討論了RISC-V 系統(tǒng)的設(shè)計(jì)問題,并通過一些具體的應(yīng)用場景,展示了RISC-V 在促進(jìn)特定領(lǐng)域應(yīng)用研究方面所能發(fā)揮的作用.最后,我們展望了RISC-V 架構(gòu)研究的未來研究和發(fā)展方向.根據(jù)本文的總結(jié)內(nèi)容,RISC-V 作為一種新興的開放指令集架構(gòu),在計(jì)算機(jī)系統(tǒng)研究和產(chǎn)業(yè)發(fā)展的諸多領(lǐng)域都展現(xiàn)出了良好前景.期望通過我們的工作,能夠給今后的研究者提供有益的參考,不斷擴(kuò)大RISC-V 的應(yīng)用范圍和影響力,為相關(guān)技術(shù)的應(yīng)用和發(fā)展做出更多貢獻(xiàn).

      致謝在此,我們向給予本文工作各項(xiàng)支持和寶貴建議的評(píng)審老師和同行們表示衷心的感謝.

      猜你喜歡
      指令集寄存器內(nèi)存
      3DNow指令集被Linux淘汰
      Lite寄存器模型的設(shè)計(jì)與實(shí)現(xiàn)
      “春夏秋冬”的內(nèi)存
      分簇結(jié)構(gòu)向量寄存器分配策略研究*
      實(shí)時(shí)微測量系統(tǒng)指令集及解析算法
      什么是AMD64
      基于覆蓋率驅(qū)動(dòng)的高性能DSP指令集驗(yàn)證方法
      基于內(nèi)存的地理信息訪問技術(shù)
      高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應(yīng)用
      一種可重構(gòu)線性反饋移位寄存器設(shè)計(jì)
      潞西市| 德钦县| 扶沟县| 格尔木市| 晴隆县| 集贤县| 荆门市| 夹江县| 西畴县| 邵阳县| 留坝县| 崇阳县| 临猗县| 屏东市| 毕节市| 芜湖市| 清远市| 门源| 房山区| 海淀区| 宾川县| 吴江市| 民县| 黄大仙区| 同仁县| 衡东县| 普宁市| 阜南县| 龙口市| 舒兰市| 铜山县| 德惠市| 道孚县| 三明市| 大宁县| 山西省| 高碑店市| 河东区| 衡阳市| 康马县| 平罗县|