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