來(lái)源:Digi-Key 作者:Bill Giovino RISC-V 架構的使用量正滾雪球般地迅速增長(cháng),而且有充分的理由相信,這種架構在業(yè)內的影響力在逐步擴大。 除了內核架構及其真正的精簡(jiǎn)指令集架構 (ISA) 外,該架構還通過(guò)一系列標準化擴展得到了增強 (圖 1) 。例如,按照所示擴展列表,將支持單精度浮點(diǎn)和壓縮指令的 32 位 RISC-V 內核 (RV32) 命名為 RV32FC。 ![]() 圖 1:RISC-V ISA 通過(guò)一系列標準化指令擴展得到了增強,用內核名稱(chēng)后的一個(gè)字母后綴表示。(圖片來(lái)源:RISC-V.org) 對于許多人工智能 (AI)、機器學(xué)習 (ML) 應用以及先進(jìn)的嵌入式系統,四個(gè)最必要的擴展是整數乘除 (M) 、原子指令 (A) 、單精度浮點(diǎn) (F) 和雙精度浮點(diǎn) (D) 。然而,不是把內核指定為 RV32MAFD,而是把這些都歸入 G 后綴,如 RV32G。 關(guān)于各種擴展和 RISC-V 的更多信息,參見(jiàn) Digi-Key 在EDU 網(wǎng)站上發(fā)布的 RISC-V 電子書(shū)。 就我個(gè)人而言,由于我對處理器的最初經(jīng)驗是在深度嵌入式系統方面,我更傾向于密切關(guān)注架構對數據存儲器的“讀改寫(xiě)位操作”的支持。對于這些應用,設置和清除外設寄存器和信號系統的位是很常見(jiàn)的事情。如果沒(méi)有原生位操作指令,內核需要把數據存儲器位置的內容復制到一個(gè)內核寄存器,分別使用 OR、AND 或 XOR 指令來(lái)設置、清除或切換位,然后把結果仍存儲在數據存儲器位置。這不僅需要額外的時(shí)間,而且在某些情況下,我看到有些嵌入式控制應用的代碼膨脹高達 20%。 對于有些應用來(lái)說(shuō),代碼膨脹和性能下降是可以接受的。然而在執行這三條指令時(shí),一個(gè)中斷就能粗暴地將程序控制權從操作中移除,甚至更糟的是,多處理器系統中的另一個(gè)內核可能會(huì )從同一內存位置讀取數據。禁用中斷或鎖定存儲器以確保這些事件不會(huì )破壞數據存儲器,這要求另外的指令和可能會(huì )造成性能問(wèn)題的復雜情況。 Arm 試圖通過(guò)實(shí)施“位綁定”來(lái)解決這些問(wèn)題,這種方法對簡(jiǎn)單的位操作有效。然而在我看來(lái),RISC-V 已經(jīng)實(shí)施了一種更巧妙、更靈活的解決方案。 為什么 Atomic 擴展如此巧妙 RISC-V A(原子)擴展支持兩種操作,一種是 Load-Reserved/Store-Conditional 指令(本文將不予討論);另一種是二進(jìn)制/位操作指令,可實(shí)現對數據存儲器的簡(jiǎn)單位操作。雖然 RISC-V B 位操作擴展支持一系列復雜的位控制指令,但 Atomic 擴展并不只是針對多處理器系統。它也有助于那些必要的位操作需求比較簡(jiǎn)單的較小嵌入式系統。例如,Seeed Technology 的 114991684 雙核 64 位 RISC-V 模塊就屬于這種系統。該系統包含兩個(gè) RV64GC 內核。這兩個(gè)內核需要很好地協(xié)調工作并共享數據 SRAM。 RISC-V A 擴展原子存儲器操作 (AMO) 的格式見(jiàn)圖 2。 ![]() 圖 2:RISC-V 的 AMO 指令格式僅需一條指令即可支持對數據存儲器進(jìn)行原子二進(jìn)制操作。(圖片來(lái)源:RISC-V.org(通過(guò) Bill Giovino 增強)) AMO 是一條強大的“讀改寫(xiě)”指令,只需一條指令即可支持直接在 rs1 中指向的數據存儲器上進(jìn)行各種不同的二進(jìn)制操作。參照圖 2,該操作加載 rs1 中數據存儲器地址位置的內容,并將該值存儲在寄存器 rd 中。然后用 rs2 中的值對 rd 值進(jìn)行二進(jìn)制運算,并將結果保存回 rd 中,保存回在 rs1 的數據存儲器地址位置。 所支持的二進(jìn)制操作有 OR(位設置) 、AND(位清除) 和 XOR(位切換) 。這允許直接在數據存儲器上對一個(gè)或多個(gè)位進(jìn)行原子位操作。這也防止了兩個(gè) RV64GC 內核同時(shí)使用同一個(gè)存儲器地址時(shí)出現存儲器沖突的問(wèn)題。在配置存儲器中的外設寄存器時(shí),這對小型嵌入式應用極為有用,并能簡(jiǎn)化旗語(yǔ)標操作。 RISC-V AMO 還支持整數最大值、整數最小值和交換。此外,還支持允許直接進(jìn)行二進(jìn)制加法的二進(jìn)制 ADD,包括直接增加數據存儲器中的計數器值。 RV64 內核同時(shí)支持 32 位和 64 位操作。對于 RV64 的位操作,重要的是它只對 64 位數據進(jìn)行操作,因為該操作將對放置在 rd 中的 32 位數據進(jìn)行符號擴展。 總結 RISC-V ISA 是第一個(gè)敢于挑戰 Arm ISA 的嚴肅競爭者。它的 ISA 擴展提供了一種標準化方法,通過(guò)能夠以經(jīng)濟實(shí)惠的方式提升應用性能的指令來(lái)增強內核。我尤其對可選的 Atomic 擴展感興奮。 雖然對于多處理器系統來(lái)說(shuō)很有用,而且幾乎是必須的,但原子擴展也是一種直接在數據存儲器上進(jìn)行位操作控制的有效方法。與許多現有的架構相比,這種架構優(yōu)勢顯著(zhù)——減少代碼長(cháng)度,提高性能。 |