RISC-V 自定義指令如何保持軟件的兼容性?

RISC-V ISA(指令集架構)是以模塊化方式設計的。這意味著ISA有幾組指令(ISA擴展),可以根據需要啟用或禁用。這允許精確地實現應用程序所需的指令組,而無需為沒有使用到的區域提供額外的功耗。其中有一點相當重要,設計人員可以為他們想要加速的應用程序添加所需的任何指令。這是一個強大的功能,因為它不會破壞任何軟件兼容性,同時為新的發明和差異化留出空間。

RISC-V指令集架構被設計為在基本指令集的基礎上擴展出更多的指令。你可以隨意混合搭配。例如,可能有一個實現最小值的RISC-V處理器,或者一個實現所有ISA擴展的RISC-V處理器,這取決於設計需求。下表列出了已被RISC-V基金會批准的主要ISA擴展,以及目前正在開發的ISA擴展。

<table><tbody>

擴展指令

正式批准

說明

I/E

基本整數操作指令。這是唯一的強制擴展。I 需要32個寄存器,E 只需要16個

M

乘法和除法指令

C

只有16位編碼的緊湊指令。這種擴展對於需要低內存佔用的應用程序非常重要。

F

單精度浮點指令

D

雙精度浮點指令

A

atomic 類型存儲指令

B

位操作指令。包含用於位操作的指令,例如旋轉或位設置/清除指令。

V

向量指令,可用於高性能計算。

P

用於嵌入式DSP處理器的SIMD壓縮指令

/<tbody>/<table>

隨著更多ISA擴展的添加,上表的內容將會逐步被擴展到更多。但是如果這些基本擴展依然不能滿足客戶需求時,就需要採用RISC-V規範允許添加自定義指令擴展。這可能是公司的“秘密武器”和一個關鍵的區別。

大家一定會有疑問,為什麼採用了自定義指令依然可以保持軟件的兼容性?

由於RISC-V生態系統的特性,定製ISA擴展需要不會破壞與主要規範的一致性;即使有額外的指令,您的處理器仍然完全符合RISC-V,並且可以運行來自生態系統的通用軟件堆棧。這就需要通過軟件架構來協同實現。

圖1顯示了自定義ISA擴展如何適合於軟件堆棧。

RISC-V 自定义指令如何保持软件的兼容性?

圖1

在最底層上,有一個與RISC-V兼容的處理器和一個定製的ISA擴展。中間一層它運行一個操作系統,它可以用任何與標準RISC-V處理器兼容的編譯器編譯(沒有特殊的ISA擴展)。除了操作系統之外,還有三個應用程序。App1是一個不需要任何加速的通用應用程序。您可以使用公開可用的現成編譯器(例如GCC)來編譯它,甚至可以使用預編譯的應用程序;RISC-V處理器將能夠直接運行它。App2和App3是需要儘可能快地運行的重要應用程序。這些必須由專門配置了定製ISA擴展的編譯器來編譯。編譯器可以利用新的自定義指令來加速App2和App3

圖2顯示了另一個具有定製ISA擴展的RISC-V兼容處理器示例。App1使用基本指令集,沒有使用定製的ISA擴展。App2和App3使用通用API。這個API是由一個支持定製ISA擴展的庫來實現的,它同樣可以加速App2和App3。App2和App3都可以在現成的RISC-V處理器中重用。所需要的只是實現所需API的庫。在這個系統中,將帶有自定義ISA擴展的App2和App3從RISC-V遷移到沒有擴展的RISC-V是很容易的,並且不需要做任何應用程序移植的工作。

RISC-V 自定义指令如何保持软件的兼容性?

圖2

"


分享到:


相關文章: