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