RISC-V详细介绍
文章目錄
- RISC-V指令集介紹
- 什么是RISC-V
- RISC-V誕生的背景
- ISA霸權(quán)
- 摩爾定律的窮途末路
- 窮困潦倒的學(xué)者
- 不斷增長(zhǎng)的指令數(shù)量
- RISC-V架構(gòu)設(shè)計(jì)思想
- 如何設(shè)計(jì)一個(gè)好的ISA
- RISC-V之RV32I
- 四個(gè)典型特點(diǎn)
- RISC-V之乘除法指令
- 指令格式
- 用乘法代替常數(shù)除法
- RISC-V之RV64
- RISC-V的特權(quán)架構(gòu)
- 機(jī)器模式
- 監(jiān)管者模式
- 擴(kuò)展指令集
- AI中涉及的運(yùn)算操作
- 機(jī)器學(xué)習(xí)
- 深度學(xué)習(xí)
- 現(xiàn)有的AI指令集或其他底層解決方案
- TPU解決方案
- X86
- 現(xiàn)有AI芯片
- 現(xiàn)有AI軟件與芯片設(shè)計(jì)關(guān)系詳解
- 參考資料
RISC-V指令集介紹
什么是RISC-V
RISC-V(發(fā)音為“risk-five”)是一個(gè)基于精簡(jiǎn)指令集(RISC)原則的開(kāi)源指令集架構(gòu)(ISA)。
與大多數(shù)指令集相比,RISC-V指令集可以自由地用于任何目的,允許任何人設(shè)計(jì)、制造和銷售RISC-V芯片和軟件。雖然這不是第一個(gè)開(kāi)源指令集,但它具有重要意義,因?yàn)槠湓O(shè)計(jì)使其適用于現(xiàn)代計(jì)算設(shè)備(如倉(cāng)庫(kù)規(guī)模云計(jì)算機(jī)、高端移動(dòng)電話和微小嵌入式系統(tǒng))。設(shè)計(jì)者考慮到了這些用途中的性能與功率效率。該指令集還具有眾多支持的軟件,這解決了新指令集通常的弱點(diǎn)。
該項(xiàng)目2010年始于加州大學(xué)伯克利分校,但許多貢獻(xiàn)者是該大學(xué)以外的志愿者和行業(yè)工作者。
RISC-V指令集的設(shè)計(jì)考慮了小型、快速、低功耗的現(xiàn)實(shí)情況來(lái)實(shí)做,但并沒(méi)有對(duì)特定的微架構(gòu)做過(guò)度的設(shè)計(jì)。
簡(jiǎn)而言之,RISC-V是一個(gè)ISA
RISC-V誕生的背景
ISA霸權(quán)
微處理器的開(kāi)放指令集有望重塑計(jì)算,并引入新的、更強(qiáng)大的功能。
現(xiàn)代計(jì)算機(jī)依靠許多元件來(lái)提供高速和高性能,但是很少有比一臺(tái)精簡(jiǎn)的指令集計(jì)算機(jī)(通常稱為RISC)發(fā)揮更大作用的了。盡管指令集體系結(jié)構(gòu)(ISA)具有不同的形狀和形式-并且它支持多種系統(tǒng)和設(shè)備-但存在一個(gè)共同點(diǎn),與復(fù)合指令集計(jì)算機(jī)(CISC)相比,RISC允許微處理器以更少的每指令周期(CPI)運(yùn)行。
當(dāng)然,ISA是計(jì)算的核心。加州大學(xué)伯克利分校計(jì)算機(jī)科學(xué)教授、ACM A.M.圖靈獎(jiǎng)獲得者戴夫·帕特森(Dave Patterson)說(shuō):“這是允許硬件和軟件進(jìn)行通信的基本詞匯,他差不多算是創(chuàng)造了這個(gè)術(shù)語(yǔ),并開(kāi)發(fā)了早期的RISC計(jì)算模型。在過(guò)去的幾十年里,英特爾和ARM這兩大實(shí)體基本上控制了ISA。他們的專利微處理器可以從筆記本電腦到云服務(wù)器,從智能手機(jī)到物聯(lián)網(wǎng)(IoT)設(shè)備的所有設(shè)備運(yùn)行。如今,很難找到?jīng)]有英特爾或ARM處理器的計(jì)算設(shè)備。
摩爾定律的窮途末路
RISC-V的推出與半導(dǎo)體行業(yè)的其他重大變化不謀而合。CMOS晶體管的縮放速度正在放緩,這已不是秘密。即使最近在設(shè)計(jì)上取得了突破,將密度和性能提升到了新的水平,戈登·摩爾(Gordon Moore)關(guān)于每?jī)赡陮⒕w管倍增的長(zhǎng)期預(yù)測(cè)——“摩爾定律”(Moore’s Law)也不再成立。隨著半導(dǎo)體進(jìn)展緩慢,而性能需求持續(xù)增長(zhǎng),設(shè)計(jì)更先進(jìn)的計(jì)算設(shè)備和燃料創(chuàng)新的能力受到威脅。Patterson解釋說(shuō):“向前看,邏輯路徑是為應(yīng)用領(lǐng)域的微處理器上的基本指令集添加擴(kuò)展。”。
RISC-V的吸引力是不可否認(rèn)的。一個(gè)通用的ISA意味著ISA的不同實(shí)現(xiàn)和用例可以利用相同的核心軟件堆棧,從而最小化移植到編譯器、操作系統(tǒng)和其他軟件的工作。RISC- v的主要優(yōu)點(diǎn)不是它是RISC的一個(gè)新的變種或迭代,而是它是一個(gè)開(kāi)放的ISA。因此,人們期望該模型將產(chǎn)生將RISC-V置于商業(yè)地圖上所需的軟件堆棧。然而,與此同時(shí),也有一種擔(dān)憂,即給用戶改變ISA的能力將導(dǎo)致RISC-V軟件生態(tài)系統(tǒng)的分裂。
窮困潦倒的學(xué)者
Asanovi?c和Patterson于2010年開(kāi)始在伯克利的并行計(jì)算實(shí)驗(yàn)室(Par Lab)研究第五代RISC指令集。該項(xiàng)目的誕生源于對(duì)專有ISA缺乏靈活性的失望。Patterson回憶說(shuō):“我們無(wú)法做一些我們想做的重新搜索。兩人瞄準(zhǔn)了一個(gè)長(zhǎng)期存在的行業(yè)問(wèn)題:無(wú)法為特定目的定制芯片。這項(xiàng)倡議是基于他們自己的需要。“由于我們無(wú)法獲得英特爾或ARM使用或修改其專有指令集的許可,我們決定為自己的研究開(kāi)發(fā)自己的指令集,并幫助其他學(xué)者的研究。”
不斷增長(zhǎng)的指令數(shù)量
RISC-V架構(gòu)設(shè)計(jì)思想
如何設(shè)計(jì)一個(gè)好的ISA
在介紹 RISC-V 這個(gè) ISA 之前,了解計(jì)算機(jī)架構(gòu)師在設(shè)計(jì) ISA 時(shí)的基本原則和必須做 出的權(quán)衡是有用的。如下的列表列出了七種衡量標(biāo)準(zhǔn)。頁(yè)邊放置了對(duì)應(yīng)的七個(gè)圖標(biāo),以突 出顯示 RISC-V 在隨后章節(jié)中應(yīng)對(duì)它們的實(shí)例。(印刷版的封底有所有圖標(biāo)的圖例。)
? 成本(美元硬幣)
? 簡(jiǎn)潔性(輪子)
? 性能(速度計(jì))
? 架構(gòu)和具體實(shí)現(xiàn)的分離(分開(kāi)的兩個(gè)半圓)
? 提升空間(手風(fēng)琴)
? 程序大小(相對(duì)的壓迫著一條線的兩個(gè)箭頭)
? 易于編程/編譯/鏈接(兒童積木“像 ABC 一樣簡(jiǎn)單”)
RISC-V的不同尋常之處,除了在于它是最近誕生的和開(kāi)源的以外,還在于:和幾乎所 有以往的ISA不同,它是模塊化的。它的核心是一個(gè)名為RV32I的基礎(chǔ)ISA,運(yùn)行一個(gè)完整 的軟件棧。RV32I是固定的,永遠(yuǎn)不會(huì)改變。這為編譯器編寫(xiě)者,操作系統(tǒng)開(kāi)發(fā)人員和匯 編語(yǔ)言程序員提供了穩(wěn)定的目標(biāo)。模塊化來(lái)源于可選的標(biāo)準(zhǔn)擴(kuò)展,根據(jù)應(yīng)用程序的需要, 硬件可以包含或不包含這些擴(kuò)展。這種模塊化特性使得RISC-V具有了袖珍化、低能耗的特 點(diǎn),而這對(duì)于嵌入式應(yīng)用可能至關(guān)重要。RISC-V編譯器得知當(dāng)前硬件包含哪些擴(kuò)展后,便 可以生成當(dāng)前硬件條件下的最佳代碼。慣例是把代表擴(kuò)展的字母附加到指令集名稱之后作 為指示。例如,RV32IMFD將乘法(RV32M),單精度浮點(diǎn)(RV32F)和雙精度浮點(diǎn) (RV32D)的擴(kuò)展添加到了基礎(chǔ)指令集(RV32I)中。
RISC-V之RV32I
RV32I 基礎(chǔ)指令集的一頁(yè)圖形表示。對(duì)于每幅圖,將有下劃線的字母從左到 右連接起來(lái),即可組成完整的 RV32I 指令集。對(duì)于每一個(gè)圖,集合標(biāo)志{}內(nèi)列舉了指令的 所有變體,變體用加下劃線的字母或下劃線字符_表示。特別的,下劃線字符_表示對(duì)于此 指令變體不需用字符表示。例如,下圖表示了這四個(gè) RV32I 指令:slt,slti,sltu,sltiu:
四個(gè)典型特點(diǎn)
首先,指令只有六種格式,并且所有的指令都是 32 位長(zhǎng),這簡(jiǎn)化了指令解碼。ARM-32, 還有更典型的 x86-32 都有許多不同的指令格式,使得解碼部件在低端實(shí)現(xiàn)中偏昂貴,在中 高端處理器設(shè)計(jì)中容易帶來(lái)性能挑戰(zhàn)。
第二,RISC-V 指令提供三個(gè)寄存器操作數(shù),而不是 像 x86-32 一樣,讓源操作數(shù)和目的操作數(shù)共享一個(gè)字段。當(dāng)一個(gè)操作天然就需要有三個(gè)不 同的操作數(shù),但是 ISA 只提供了兩個(gè)操作數(shù)時(shí),編譯器或者匯編程序程序員就需要多使用 一條 move(搬運(yùn))指令,來(lái)保存目的寄存器的值。
第三,在 RISC-V 中對(duì)于所有指令,要 讀寫(xiě)的寄存器的標(biāo)識(shí)符總是在同一位置,意味著在解碼指令之前,就可以先開(kāi)始訪問(wèn)寄存 器。在許多其他的 ISA 中,某些指令字段在部分指令中被重用作為源目的地,在其他指令 中又被作為目的操作數(shù)(例如,ARM-32 和 MIPS-32)。因此,為了取出正確的指令字 段,我們需要時(shí)序本就可能緊張的解碼路徑上添加額外的解碼邏輯,使得解碼路徑的時(shí)序 更為緊張。
第四,這些格式的立即數(shù)字段總是符號(hào)擴(kuò)展,符號(hào)位總是在指令中最高位。這 意味著可能成為關(guān)鍵路徑的立即數(shù)符號(hào)擴(kuò)展,可以在指令解碼之前進(jìn)行。
下圖顯示了六種基本指令格式,分別是:用于寄存器-寄存器操作的 R 類型指令,用 于短立即數(shù)和訪存 load 操作的 I 型指令,用于訪存 store 操作的 S 型指令,用于條件跳轉(zhuǎn)操 作的 B 類型指令,用于長(zhǎng)立即數(shù)的 U 型指令和用于無(wú)條件跳轉(zhuǎn)的 J 型指令。
解釋說(shuō)明:四種基礎(chǔ)指令格式 R/I/S/U
RISC-V之乘除法指令
指令格式
RV32M 具有有符號(hào)和無(wú)符號(hào)整數(shù)的除法指令:divide(div)和 divide unsigned(divu),它們將 商放入目標(biāo)寄存器。在少數(shù)情況下,程序員需要余數(shù)而不是商,因此 RV32M 提供 remainder(rem)和 remainder unsigned(remu),它們?cè)谀繕?biāo)寄存器寫(xiě)入余數(shù),而不是商。
為了正確地得到一個(gè)有符號(hào)或無(wú)符號(hào)的 64 位積,RISC-V 中帶有四個(gè)乘 法指令。要得到整數(shù) 32 位乘積(64 位中的低 32 位)就用 mul 指令。要得到高 32 位,如果 操作數(shù)都是有符號(hào)數(shù),就用 mulh 指令;如果操作數(shù)都是無(wú)符號(hào)數(shù),就用 mulhu 指令;如 果一個(gè)有符號(hào)一個(gè)無(wú)符號(hào),可以用 mulhsu 指令。在一條指令中完成把 64 位積寫(xiě)入兩個(gè) 32 位寄存器的操作會(huì)使硬件設(shè)計(jì)變得復(fù)雜,所以 RV32M 需要兩條乘法指令才能得到一個(gè)完整 的 64 位積。
用乘法代替常數(shù)除法
對(duì)許多微處理器來(lái)說(shuō),整數(shù)除法是相對(duì)較慢的操作。如前述,除數(shù)為 2 的冪次的無(wú)符號(hào) 除法可以用右移來(lái)代替。事實(shí)證明,通過(guò)乘以近似倒數(shù)再修正積的高 32 位的方法,可以優(yōu) 化除數(shù)為其它數(shù)的除法。例如,圖 4.3 顯示了 3 為除數(shù)的無(wú)符號(hào)除法的代碼。
也就是說(shuō)從數(shù)值上來(lái)講,可以通過(guò)乘法代替常數(shù)除法
RISC-V之RV64
盡管 RV64I 有 64 位地址且默認(rèn)數(shù)據(jù)大小為 64 位,32 位字仍然是程序中的有效數(shù)據(jù)類 型。因此,RV64I 需要支持字,就像 RV32I 需要支持字節(jié)和半字一樣。更具體地說(shuō),由于寄 存器現(xiàn)在是 64 位寬,RV64I 添加字版本的加法和減法指令:addw,addiw,subw。這些指 令將計(jì)算結(jié)果截?cái)酁?32 位,結(jié)果符號(hào)擴(kuò)展后再寫(xiě)入目標(biāo)寄存器。 RV64I 也包括字版本的移 位指令(sllw,slliw,srlw,srliw,sraw,sraiw),以獲得 32 位移位結(jié)果而不是 64 位移 位結(jié)果。要進(jìn)行 64 位數(shù)據(jù)傳輸,RV64 提供了加載和存儲(chǔ)雙字指令:ld,sd。最后,就像 RV32I 中有無(wú)符號(hào)版本的加載單字節(jié)和加載半字的指令,RV64I 也有一個(gè)無(wú)符號(hào)版本的加載 字:lwu。 出于類似的原因,RV64 需要添加字版本的乘法,除法和取余指令:mulw,divw,divuw, remw,remuw。為了支持對(duì)單字及雙字的同步操作,RV64A 為其所有的 11 條指令都添加 了雙字版本。
由于版本眾多,這里只選擇有代表性的來(lái)了解
RV64F 和 RV64D 添加了整數(shù)雙字轉(zhuǎn)換指令,并稱它們?yōu)殚L(zhǎng)整數(shù),以避免與雙精度浮點(diǎn) 數(shù)據(jù)混淆:fcvt.l.s,fcvt.l.d,fcvt.lu.s,fcvt.lu.d,fcvt.s.l,fcvt.s.lu,fcvt.d.l,fcvt.d.lu. 由于整數(shù) x 寄存器現(xiàn)在是 64 位寬,它們現(xiàn)在可以保存雙精度浮點(diǎn)數(shù)據(jù),因此 RV64D 增加了 兩個(gè)浮點(diǎn)指令:fmv.x.w 和 fmv.w.x.
這里暫時(shí)不講解壓縮指令
RISC-V的特權(quán)架構(gòu)
到目前為止,本書(shū)主要關(guān)注 RISC-V 對(duì)通用計(jì)算的支持:我們引入的所有指令都在用 戶模式(應(yīng)用程序的代碼在此模式下運(yùn)行)下可用。本章介紹兩種新的權(quán)限模式:運(yùn)行最 可信的代碼的機(jī)器模式(machine mode),以及為 Linux,FreeBSD 和 Windows 等操作系統(tǒng) 提供支持的監(jiān)管者模式(supervisor mode)。這兩種新模式都比用和模式有著更高的權(quán)限, 這也是本章標(biāo)題的來(lái)源。有更多權(quán)限的模式通常可以使用權(quán)限較低的模式的所用功能,并 且它們還有一些低權(quán)限模式下不可用的額外功能,例如處理中斷和執(zhí)行 I/O 的功能。處理 器通常大部分時(shí)間都運(yùn)行在權(quán)限最低的模式下,處理中斷和異常時(shí)會(huì)將控制權(quán)移交到更高 權(quán)限的模式。 嵌入式系統(tǒng)運(yùn)行時(shí)(runtime)和操作系統(tǒng)用這些新模式的功能來(lái)響應(yīng)外部事件,如網(wǎng) 絡(luò)數(shù)據(jù)包的到達(dá);支持多任務(wù)處理和任務(wù)間保護(hù);抽象和虛擬化硬件功能等。鑒于這些主 題的廣度,為此而編撰的全面的程序員指南會(huì)是另外一本完整的書(shū)。但我們的這一章節(jié)旨 在強(qiáng)調(diào) RISC-V 這部分功能的亮點(diǎn)。
機(jī)器模式
機(jī)器模式(縮寫(xiě)為 M 模式,M-mode)是 RISC-V 中 hart(hardware thread,硬件線 程)可以執(zhí)行的最高權(quán)限模式。在 M 模式下運(yùn)行的 hart 對(duì)內(nèi)存,I/O 和一些對(duì)于啟動(dòng)和配 置系統(tǒng)來(lái)說(shuō)必要的底層功能有著完全的使用權(quán)。因此它是唯一所有標(biāo)準(zhǔn) RISC-V 處理器都 必須實(shí)現(xiàn)的權(quán)限模式。實(shí)際上簡(jiǎn)單的 RISC-V 微控制器僅支持 M 模式。這類系統(tǒng)是本節(jié)的 重點(diǎn)。
機(jī)器模式最重要的特性是攔截和處理異常(不尋常的運(yùn)行時(shí)事件)的能力。RISC-V 將 異常分為兩類。
一類是同步異常,這類異常在指令執(zhí)行期間產(chǎn)生,如訪問(wèn)了無(wú)效的存儲(chǔ)器 地址或執(zhí)行了具有無(wú)效操作碼的指令時(shí)。
另一類是中斷,它是與指令流異步的外部事件, 比如鼠標(biāo)的單擊。RISC-V 中實(shí)現(xiàn)精確例外:保證異常之前的所有指令都完整地執(zhí)行了,而 后續(xù)的指令都沒(méi)有開(kāi)始執(zhí)行(或等同于沒(méi)有執(zhí)行)。
圖 10.3 列出了觸發(fā)標(biāo)準(zhǔn)例外的原因。
在 M 模式運(yùn)行期間可能發(fā)生的同步例外有五種:
? 訪問(wèn)錯(cuò)誤異常 當(dāng)物理內(nèi)存的地址不支持訪問(wèn)類型時(shí)發(fā)生(例如嘗試寫(xiě)入 ROM)。
? 斷點(diǎn)異常 在執(zhí)行 ebreak 指令,或者地址或數(shù)據(jù)與調(diào)試觸發(fā)器匹配時(shí)發(fā)生。 ? 環(huán)境調(diào)用異常 在執(zhí)行 ecall 指令時(shí)發(fā)生。
? 非法指令異常 在譯碼階段發(fā)現(xiàn)無(wú)效操作碼時(shí)發(fā)生。
? 非對(duì)齊地址異常 在有效地址不能被訪問(wèn)大小整除時(shí)發(fā)生,例如地址為 0x12 的 amoadd.w
有三種標(biāo)準(zhǔn)的中斷源:軟件、時(shí)鐘和外部來(lái)源。軟件中斷通過(guò)向內(nèi)存映射寄存器中存 數(shù)來(lái)觸發(fā),并通常用于由一個(gè) hart 中斷另一個(gè) hart(在其他架構(gòu)中稱為處理器間中斷機(jī) 制)。當(dāng)實(shí)時(shí)計(jì)數(shù)器 mtime 大于 hart 的時(shí)間比較器(一個(gè)名為 mtimecmp 的內(nèi)存映射寄存 器)時(shí),會(huì)觸發(fā)時(shí)鐘中斷。外部中斷由平臺(tái)級(jí)中斷控制器(大多數(shù)外部設(shè)備連接到這個(gè)中 斷控制器)引發(fā)。
監(jiān)管者模式
更復(fù)雜的 RISC-V 處理器用和幾乎所有通用架構(gòu)相同的方式處理這些問(wèn)題:使用基于 頁(yè)面的虛擬內(nèi)存。這個(gè)功能構(gòu)成了監(jiān)管者模式(S 模式)的核心,這是一種可選的權(quán)限模 式,旨在支持現(xiàn)代類 Unix 操作系統(tǒng),如 Linux,FreeBSD 和 Windows。S 模式比 U 模式權(quán) 限更高,但比 M 模式低。與 U 模式一樣,S 模式下運(yùn)行的軟件不能使用 M 模式的 CSR 和 指令,并且受到 PMP 的限制。本屆介紹 S 模式的中斷和異常,下一節(jié)將詳細(xì)介紹 S 模式 下的虛擬內(nèi)存系統(tǒng)。 默認(rèn)情況下,發(fā)生所有異常(不論在什么權(quán)限模式下)的時(shí)候,控制權(quán)都會(huì)被移交到 M 模式的異常處理程序。但是 Unix 系統(tǒng)中的大多數(shù)例外都應(yīng)該進(jìn)行 S 模式下的系統(tǒng)調(diào) 用。M 模式的異常處理程序可以將異常重新導(dǎo)向 S 模式,但這些額外的操作會(huì)減慢大多數(shù) 異常的處理速度。因此,RISC-V 提供了一種異常委托機(jī)制。通過(guò)該機(jī)制可以選擇性地將中 斷和同步異常交給 S 模式處理,而完全繞過(guò) M 模式。
S 模式提供了一種傳統(tǒng)的虛擬內(nèi)存系統(tǒng),它將內(nèi)存劃分為固定大小的頁(yè)來(lái)進(jìn)行地址轉(zhuǎn) 換和對(duì)內(nèi)存內(nèi)容的保護(hù)。啟用分頁(yè)的時(shí)候,大多數(shù)地址(包括 load 和 store 的有效地址和 PC 中的地址)都是虛擬地址。要訪問(wèn)物理內(nèi)存,它們必須被轉(zhuǎn)換為真正的物理地址,這通 過(guò)遍歷一種稱為頁(yè)表的高基數(shù)樹(shù)實(shí)現(xiàn)。頁(yè)表中的葉節(jié)點(diǎn)指示虛地址是否已經(jīng)被映射到了真 正的物理頁(yè)面,如果是,則指示了哪些權(quán)限模式和通過(guò)哪種類型的訪問(wèn)可以操作這個(gè)頁(yè)。
擴(kuò)展指令集
目前官方提供的risc-v擴(kuò)展指令集有如下幾個(gè)(確定將會(huì)實(shí)現(xiàn)的)
11.1 “B”標(biāo)準(zhǔn)擴(kuò)展:位操作 …
11.2 “E”標(biāo)準(zhǔn)擴(kuò)展:嵌入式 …
11.3 “H”特權(quán)態(tài)架構(gòu)擴(kuò)展:支持管理程序(Hypervisor) …
11.4 “J”標(biāo)準(zhǔn)擴(kuò)展:動(dòng)態(tài)翻譯語(yǔ)言 …
11.5 “L”標(biāo)準(zhǔn)擴(kuò)展:十進(jìn)制浮點(diǎn) …
11.6 “N”標(biāo)準(zhǔn)擴(kuò)展:用戶態(tài)中斷 …
11.7 “P”標(biāo)準(zhǔn)擴(kuò)展:封裝的單指令多數(shù)據(jù)(Packed-SIMD)指令 …
11.8 “Q”標(biāo)準(zhǔn)擴(kuò)展:四精度浮點(diǎn) …
目前根據(jù)已經(jīng)開(kāi)源的設(shè)計(jì)方案,大多專注于B/J/Q/L指令的相關(guān)擴(kuò)展
阿里平頭哥文檔
AI中涉及的運(yùn)算操作
機(jī)器學(xué)習(xí)
深度學(xué)習(xí)
現(xiàn)有的AI指令集或其他底層解決方案
TPU解決方案
在TPU中,它使用若干條指令來(lái)完成矩陣的乘法運(yùn)算,其中使用Read_Host_Memory來(lái)從主存中讀取數(shù)據(jù)至通用緩存(Unified Buffer)中;使用Read_Weights來(lái)將權(quán)重讀取至矩陣單元中。在進(jìn)行矩陣運(yùn)算時(shí),使用MatrixMultiply或Convolve來(lái)進(jìn)行矩陣乘法。最后使用Write_Host_Memory來(lái)將數(shù)據(jù)寫(xiě)回主存中。但是在TPU中,它的矩陣乘法對(duì)操作數(shù)的尺寸存在限制,在MatrixMultiply或Convolve中,其限制操作數(shù)為B256 與256256,若矩陣尺寸大與此值,則不太方便直接使用TPU進(jìn)行運(yùn)算;若矩陣尺寸小于此值,則需要先對(duì)多余部分填充0后再進(jìn)行計(jì)算。
X86
在X86_64中,其在AVX、AVX2等指令集中提供了VMULPS、VMULPD、VADDPS、VADDPD等一系列SIMD指令,這些指令可以使用一條指令來(lái)完成多組數(shù)據(jù)的運(yùn)算。在矩陣乘法等應(yīng)用中,數(shù)據(jù)之間沒(méi)有相互依賴性,因此可以使用SIMD指令來(lái)提高運(yùn)算效率。
VMULPS指令示意圖
與TPU相比,AVX至運(yùn)算數(shù)據(jù)的尺寸上沒(méi)有太多的限制,即使數(shù)據(jù)的規(guī)模較大,也可以拆分為多交指令執(zhí)行。但這也造成AVX指令集的并行化程度一般不高,通常一條指令只能處理4-8條數(shù)據(jù),效率遠(yuǎn)不如TPU等專門雙擊的架構(gòu),在人工智能的應(yīng)用上仍然難以滿足需要。
現(xiàn)有AI芯片
現(xiàn)有的AI芯片,比如寒武紀(jì)的產(chǎn)品為了AI的運(yùn)算也做了大量適配,比如構(gòu)建大量的乘法器用來(lái)在一個(gè)周期內(nèi)并行處理多個(gè)乘法操作,相應(yīng)地指令集也會(huì)向著這個(gè)方向進(jìn)行優(yōu)化,如華為Ascend 系列AI芯片,內(nèi)置的都是運(yùn)算密集型CISC指令集來(lái)為AI運(yùn)算做優(yōu)化。但是這種設(shè)計(jì)模式的功耗以及設(shè)計(jì)的繁瑣程度都很高,所以集成AI優(yōu)化的RISC-V應(yīng)該在保持靈活小巧的基礎(chǔ)上對(duì)矩陣運(yùn)算等AI領(lǐng)域常見(jiàn)的基本數(shù)學(xué)運(yùn)算做優(yōu)化,對(duì)機(jī)器學(xué)習(xí)和深度學(xué)習(xí)有一個(gè)泛化支持,雖然速度可能沒(méi)CISC那么高,但是可以保持其精簡(jiǎn)以及自由拓展的特點(diǎn)。
現(xiàn)有AI軟件與芯片設(shè)計(jì)關(guān)系詳解
本例以 Hanguang AI為例子,主要內(nèi)容來(lái)自官方文檔
HanGuang Al是阿里巴巴-迖摩院旗下平頭哥半導(dǎo)體有限公司開(kāi)發(fā)的入工智能芯片軟件開(kāi)發(fā)包J 巨前主要服務(wù)于業(yè)界領(lǐng)先的含光800人工智能推理芯片。 使用HanGuang Al在含光800芯片上開(kāi)發(fā)深度學(xué)習(xí)應(yīng)用可以獲得言吞吐量和低延遲的高性能體驗(yàn)。
HanGuang Al軟件架構(gòu)如下所示
可以看到,當(dāng)前AI軟件的主要工作還是分為了3個(gè)大部分,其中和AI芯片設(shè)計(jì)打交道的主要是量化、編譯過(guò)程。
所以在設(shè)計(jì)是重點(diǎn)關(guān)注算子的底層編譯實(shí)現(xiàn),也就是說(shuō)通過(guò)算子的提取計(jì)算代替?zhèn)鹘y(tǒng)的分析方法是一種高效運(yùn)用在工業(yè)界的方法。
參考資料
In-Datacenter Performance Analysis of a Tensor Processing Unit
https://arxiv.org/ftp/arxiv/papers/1704/1704.04760.pdf
含光800軟件介紹.pdf
總結(jié)
以上是生活随笔為你收集整理的RISC-V详细介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Arduino 语法参考
- 下一篇: 【推荐系统】基于协同过滤的图书推荐系统