0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是 LLVM C/C++ 編譯器?

Codasip 科達希普 ? 來源:Codasip 科達希普 ? 2023-09-28 09:16 ? 次閱讀

RISC-V 是一種模塊化指令集架構(gòu) (ISA),具有強大的定制能力,在實現(xiàn)創(chuàng)新和差異化的同時而不會出現(xiàn)碎片化現(xiàn)象。在已批準/標準的 ISA 擴展(如整數(shù)指令或浮點指令)的基礎(chǔ)模塊之上,設計人員可以通過添加自定義指令而實現(xiàn)純粹的設計自由!

通過添加自定義指令而實現(xiàn)更好的性能,更小的內(nèi)存占用或者更低的功率,意味著軟件(最終應用程序)要針對特定的 RISC-V ISA 進行編譯。軟件開發(fā)工具包(SDK)必須清楚地了解 RISC-V 處理器實現(xiàn)了哪些 ISA 模塊,這樣才能自動利用這些模塊。這些指令包括標準指令和定制指令。

但是如何為特定的 RISC-V ISA 獲取最佳的 SDK 呢?這里不得不提到 SDK 的重要組成部分--C/C++ 編譯器。編譯器必須盡可能能夠自動、明智地使用這些自定義指令。

什么是 LLVM C/C++ 編譯器?

LLVM(低級虛擬機)是一套編譯器和工具,如匯編器、鏈接器或調(diào)試器。我們可以把重點放在編譯器上。

與其他編譯器一樣,LLVM 編譯器可分為三個部分:前端、優(yōu)化器(也稱中端)和后端,如下圖所示。每一層都有不同的用途。

610a8666-5d46-11ee-939d-92fbcf53809c.png

LLVM 編譯器前端

前端將 C 或 C++ 源代碼作為文本文件輸入。前端會對其進行解析,并創(chuàng)建一個中間表達(IR)。IR 以機器格式表示輸入內(nèi)容。

LLVM 編譯器優(yōu)化器

優(yōu)化器接收 IR,主要針對獨立的優(yōu)化(如循環(huán)展開或常量/變量傳播),并生成經(jīng)過優(yōu)化的 IR。

LLVM 編譯器后端

后端接收優(yōu)化后的 IR,并執(zhí)行與目標相關(guān)的優(yōu)化、寄存器分配、堆棧操作等。最后生成處理器的匯編代碼。

對于可重定位目標性而言,后端是最重要的部分,因為它必須了解目標架構(gòu)、指令等信息。而 Codasip 的解決方案生成的正是編譯器后端。

重定向 LLVM C/C++ 編譯器

對于這個問題,Codasip 的做法如下:

以CodAL作為處理器描述的單一來源

RISC-V ISA(包括自定義指令)是通過 CodAL 語言(一種基于 C 語言的處理器高級描述語言)捕獲的。該語言捕獲了所有重要信息,包括指令的文本形式、二進制編碼以及更重要的指令行為。CodAL 描述還包含以下信息:不同類型的危險是如何遞交的(它會影響指令調(diào)度)、指令是如何執(zhí)行的(單周期、多周期)、處理器的應用二進制接口(例如,哪些寄存器用于堆棧)或其他微體系結(jié)構(gòu)描述等。此外它還包含其它 C/C++ 編譯器功能(例如窺孔優(yōu)化-peephole optimizations)的說明。

下面的示例顯示了一條表示兩個數(shù)字平均值的簡單指令。

611474b4-5d46-11ee-939d-92fbcf53809c.png

根據(jù)這一描述可以生成一系列工具。從下圖中可以看到,生成的輸出之一是 LLVM C/C++ 編譯器。

612a4f96-5d46-11ee-939d-92fbcf53809c.png

C/C++ 編譯器生成器會解析所有已描述的指令和微架構(gòu)描述。然后提取指令語義、ABI 或時序,為前端和優(yōu)化器生成新的后端和配置文件。換句話說,前端和優(yōu)化器經(jīng)過預編譯和配置,可以快速探索設計空間。而后端則需要編譯。生成的后端可以接收到 RISC-V 處理器的每一條指令,且上述指令可以由生成的 C/C++ 編譯器自動使用,也可以通過自動生成的內(nèi)建函數(shù)或內(nèi)聯(lián)匯編使用。

最獨特的是,生成的后端向設計人員開放。如果設計人員想要添加新的 LLVM optimization pass,假設已經(jīng)用 C++ 編寫了一個optimization pass,那么就可以隨時添加新的pass。

Codasip同時還改進了 vanilla LLVM。通過添加針對性能提升(例如改進的跳轉(zhuǎn)線程、超級塊調(diào)度或循環(huán)折疊/扁平化)、代碼縮減(例如改進的-msave-restore、改進的多輸出指令支持或機器大綱器)或 DSP 功能(例如零開銷循環(huán)、雙堆棧架構(gòu)支持或帶后增量/前增量的加載/存儲)的高級optimization pass。

此時我們了解一下生成的 C/C++ 編譯器在基準測試中的表現(xiàn)如何,并重點關(guān)注編譯器的兩個方面:性能和代碼量。

Coremark 和 Dhrystone 用于測量性能,Embench-iot 用于測量代碼大小。我們比較了三種編譯器: GCC、Vanilla LLVM 和 Codasip LLVM。比較是相對于其他編譯器進行的,Vanilla LLVM 是參考編譯器(即在圖表中得分 1)。RISC-V ISA 配置為 RV32IMCB。

測試性能結(jié)果

性能比較顯示了 Codasip LLVM 的改進,以及它如何優(yōu)于其他編譯器。請注意,所有編譯器都使用了類似的優(yōu)化標志。自定義指令可以明顯改善結(jié)果。

614dd128-5d46-11ee-939d-92fbcf53809c.png

代碼大小結(jié)果

代碼大小比較也顯示了 Codasip LLVM 的優(yōu)勢,盡管差距并不大。在此,自定義指令也能明顯改善結(jié)果。對于如何縮減RISC-V的代碼大小,大家可通過IP&SoC雜志7/8月版的電子書查閱Codasip的迷你技術(shù)白皮書,鏈接如下:https://ipsoc.yunzhan365.com/books/stka/mobile/index.html

616d23de-5d46-11ee-939d-92fbcf53809c.png

創(chuàng)新自動化助理 RISC-V的飛速發(fā)展

RISC-V ISA 仍在不斷發(fā)展,行業(yè)急需一些方法來輕松探索不同指令及其對軟件的影響(包括性能、代碼大小或功耗等方面)。自動化是非??扇〉模驗樽詣踊鞒炭梢钥焖俑咝У靥剿髟O計空間?;蛘哒f,如果設計人員想要創(chuàng)新或與眾不同,那么他們就需要能夠?qū)崿F(xiàn)創(chuàng)新或與眾不同的工具和語言,協(xié)助其達到目的。

而Codasip Studio 正是實現(xiàn)這一目標的有效方法。Codasip的處理器設計自動化工具集能從單一的真實源自動生成所有需要的部件。生成的 LLVM C/C++ 編譯器可以自動使用新指令(也就是說,除非您愿意,否則無需更改 C/C++ 代碼)。此外它在性能和代碼大小方面的表現(xiàn)也非常出色。Codasip Studio 可以自動生成可執(zhí)行模型、RTL 或驗證工具,以完善 IP 工具包,并在最終產(chǎn)品中部署創(chuàng)新的 RISC-V 架構(gòu)。

審核編輯:彭菁

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2108

    瀏覽量

    73651
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1634

    瀏覽量

    49133
  • 調(diào)試器
    +關(guān)注

    關(guān)注

    1

    文章

    305

    瀏覽量

    23741
  • SDK
    SDK
    +關(guān)注

    關(guān)注

    3

    文章

    1036

    瀏覽量

    45950
  • RISC-V
    +關(guān)注

    關(guān)注

    45

    文章

    2277

    瀏覽量

    46159

原文標題:編譯器重度愛好者有話說 - 針對 RISC-V 的可重定向 LLVM C/C++ 編譯器

文章出處:【微信號:Codasip 科達希普,微信公眾號:Codasip 科達希普】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    C++編譯器數(shù)值性能比較

    現(xiàn)在市面上,主流的C/C++編譯器包括M$的CL、gcc、Intel的icl、PGI的pgcc及Codegear的bcc(原來屬于Borland公司)。Windows上使用最多的自然是cl,而在更廣闊的平臺上,gcc則是
    發(fā)表于 09-10 11:54 ?8次下載

    主流的C語言編譯器詳細介紹

    對于當前主流桌面操作系統(tǒng)而言,可使用Visual C++、GCC以及LLVM Clang這三大編譯器。其中,Visual C++(簡稱MSVC)只能用于Windows操作系統(tǒng);其余兩個
    發(fā)表于 09-05 17:27 ?2次下載
    主流的<b class='flag-5'>C</b>語言<b class='flag-5'>編譯器</b>詳細介紹

    主流C語言編譯器的詳細資料介紹

    對于當前主流桌面操作系統(tǒng)而言,可使用Visual C++、GCC以及LLVM Clang這三大編譯器。其中,Visual C++(簡稱 MSVC)只能用于Windows操作系統(tǒng);其余兩
    發(fā)表于 05-22 18:00 ?1次下載
    主流<b class='flag-5'>C</b>語言<b class='flag-5'>編譯器</b>的詳細資料介紹

    MATLAB 64位C語言和C++編譯器應用程序免費下載

    本文檔的主要內(nèi)容詳細介紹的是MATLAB 64位C語言和C++編譯器應用程序免費下載。
    發(fā)表于 05-21 08:00 ?4次下載
    MATLAB 64位<b class='flag-5'>C</b>語言和<b class='flag-5'>C++</b><b class='flag-5'>編譯器</b>應用程序免費下載

    基于C++編譯器的節(jié)點融合優(yōu)化方法

    LLVM是以C十十編寫的架構(gòu)編譯器的框架系統(tǒng),支持多后端和交叉編譯,用于優(yōu)化程序的編譯時間、鏈接時間、運行時間和空閑時間。節(jié)點融合是一種簡單
    發(fā)表于 06-15 14:29 ?19次下載

    阿里云基礎(chǔ)軟件C/C++編譯器的工作現(xiàn)狀及挑戰(zhàn)

    本文主要詳細介紹了阿里云C、C++編譯器(GCC、LLVM)工作現(xiàn)狀、主流編譯器(GCC、LLVM
    的頭像 發(fā)表于 06-23 15:26 ?2970次閱讀
    阿里云基礎(chǔ)軟件<b class='flag-5'>C</b>/<b class='flag-5'>C++</b><b class='flag-5'>編譯器</b>的工作現(xiàn)狀及挑戰(zhàn)

    SuperH C/C++ 編譯器包 V.9.04 用戶手冊

    SuperH C/C++ 編譯器包 V.9.04 用戶手冊
    發(fā)表于 01-12 18:45 ?1次下載
    SuperH <b class='flag-5'>C</b>/<b class='flag-5'>C++</b> <b class='flag-5'>編譯器</b>包 V.9.04 用戶手冊

    C/C++編譯器的缺省字節(jié)對齊方式

    C/C++編譯器的缺省字節(jié)對齊方式為自然對界。即在缺省情況下,編譯器為每一個變量或是數(shù)據(jù)單元按其自然對界條件分配空間。
    的頭像 發(fā)表于 04-15 11:24 ?1016次閱讀

    SuperH C/C++ 編譯器包 V.9.01 用戶手冊

    SuperH C/C++ 編譯器包 V.9.01 用戶手冊
    發(fā)表于 04-21 19:55 ?0次下載
    SuperH <b class='flag-5'>C</b>/<b class='flag-5'>C++</b> <b class='flag-5'>編譯器</b>包 V.9.01 用戶手冊

    SuperH C/C++ 編譯器包 V.9.04 用戶手冊

    SuperH C/C++ 編譯器包 V.9.04 用戶手冊
    發(fā)表于 07-03 18:38 ?4次下載
    SuperH <b class='flag-5'>C</b>/<b class='flag-5'>C++</b> <b class='flag-5'>編譯器</b>包 V.9.04 用戶手冊

    C7000優(yōu)化C/C++編譯器

    電子發(fā)燒友網(wǎng)站提供《C7000優(yōu)化C/C++編譯器.pdf》資料免費下載
    發(fā)表于 10-30 09:45 ?0次下載
    <b class='flag-5'>C</b>7000優(yōu)化<b class='flag-5'>C</b>/<b class='flag-5'>C++</b><b class='flag-5'>編譯器</b>

    TMS320C6000優(yōu)化C/C++編譯器v8.3.x

    電子發(fā)燒友網(wǎng)站提供《TMS320C6000優(yōu)化C/C++編譯器v8.3.x.pdf》資料免費下載
    發(fā)表于 11-01 09:35 ?0次下載
    TMS320<b class='flag-5'>C</b>6000優(yōu)化<b class='flag-5'>C</b>/<b class='flag-5'>C++</b><b class='flag-5'>編譯器</b>v8.3.x

    ARM優(yōu)化C/C++編譯器 v20.2.0.LTS

    電子發(fā)燒友網(wǎng)站提供《ARM優(yōu)化C/C++編譯器 v20.2.0.LTS.pdf》資料免費下載
    發(fā)表于 11-07 10:46 ?0次下載
    ARM優(yōu)化<b class='flag-5'>C</b>/<b class='flag-5'>C++</b><b class='flag-5'>編譯器</b> v20.2.0.LTS

    MSP430優(yōu)化C/C++編譯器v21.6.0.LTS

    電子發(fā)燒友網(wǎng)站提供《MSP430優(yōu)化C/C++編譯器v21.6.0.LTS.pdf》資料免費下載
    發(fā)表于 11-08 14:57 ?0次下載
    MSP430優(yōu)化<b class='flag-5'>C</b>/<b class='flag-5'>C++</b><b class='flag-5'>編譯器</b>v21.6.0.LTS

    HighTec C/C++編譯器套件全面支持芯來RISC-V IP

    是基于LLVM開源汽車級C/C++編譯器工具,已通過ISO 26262 ASIL D的安全認證。從事RISC-V架構(gòu)開發(fā)的汽車軟件開發(fā)者受益于這些工具來無縫支持芯來經(jīng)過功能安全認證的R
    的頭像 發(fā)表于 12-23 09:04 ?134次閱讀
    HighTec <b class='flag-5'>C</b>/<b class='flag-5'>C++</b><b class='flag-5'>編譯器</b>套件全面支持芯來RISC-V IP