0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是 LLVM C/C++ 编译器?

Codasip 科达希普 来源:Codasip 科达希普 2023-09-28 09:16 次阅读

RISC-V 是一种模块化指令集架构 (ISA),具有强大的定制能力,在实现创新和差异化的同时而不会出现碎片化现象。在已批准/标准的 ISA 扩展(如整数指令或浮点指令)的基础模块之上,设计人员可以通过添加自定义指令而实现纯粹的设计自由!

通过添加自定义指令而实现更好的性能,更小的内存占用或者更低的功率,意味着软件(最终应用程序)要针对特定的 RISC-V ISA 进行编译。软件开发工具包(SDK)必须清楚地了解 RISC-V 处理器实现了哪些 ISA 模块,这样才能自动利用这些模块。这些指令包括标准指令和定制指令。

但是如何为特定的 RISC-V ISA 获取最佳的 SDK 呢?这里不得不提到 SDK 的重要组成部分--C/C++ 编译器。编译器必须尽可能能够自动、明智地使用这些自定义指令。

什么是 LLVM C/C++ 编译器?

LLVM(低级虚拟机)是一套编译器和工具,如汇编器、链接器或调试器。我们可以把重点放在编译器上。

与其他编译器一样,LLVM 编译器可分为三个部分:前端、优化器(也称中端)和后端,如下图所示。每一层都有不同的用途。

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

LLVM 编译器前端

前端将 C 或 C++ 源代码作为文本文件输入。前端会对其进行解析,并创建一个中间表达(IR)。IR 以机器格式表示输入内容。

LLVM 编译器优化器

优化器接收 IR,主要针对独立的优化(如循环展开或常量/变量传播),并生成经过优化的 IR。

LLVM 编译器后端

后端接收优化后的 IR,并执行与目标相关的优化、寄存器分配、堆栈操作等。最后生成处理器的汇编代码。

对于可重定位目标性而言,后端是最重要的部分,因为它必须了解目标架构、指令等信息。而 Codasip 的解决方案生成的正是编译器后端。

重定向 LLVM C/C++ 编译器

对于这个问题,Codasip 的做法如下:

以CodAL作为处理器描述的单一来源

RISC-V ISA(包括自定义指令)是通过 CodAL 语言(一种基于 C 语言的处理器高级描述语言)捕获的。该语言捕获了所有重要信息,包括指令的文本形式、二进制编码以及更重要的指令行为。CodAL 描述还包含以下信息:不同类型的危险是如何递交的(它会影响指令调度)、指令是如何执行的(单周期、多周期)、处理器的应用二进制接口(例如,哪些寄存器用于堆栈)或其他微体系结构描述等。此外它还包含其它 C/C++ 编译器功能(例如窥孔优化-peephole optimizations)的说明。

下面的示例显示了一条表示两个数字平均值的简单指令。

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

根据这一描述可以生成一系列工具。从下图中可以看到,生成的输出之一是 LLVM C/C++ 编译器。

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

C/C++ 编译器生成器会解析所有已描述的指令和微架构描述。然后提取指令语义、ABI 或时序,为前端和优化器生成新的后端和配置文件。换句话说,前端和优化器经过预编译和配置,可以快速探索设计空间。而后端则需要编译。生成的后端可以接收到 RISC-V 处理器的每一条指令,且上述指令可以由生成的 C/C++ 编译器自动使用,也可以通过自动生成的内建函数或内联汇编使用。

最独特的是,生成的后端向设计人员开放。如果设计人员想要添加新的 LLVM optimization pass,假设已经用 C++ 编写了一个optimization pass,那么就可以随时添加新的pass。

Codasip同时还改进了 vanilla LLVM。通过添加针对性能提升(例如改进的跳转线程、超级块调度或循环折叠/扁平化)、代码缩减(例如改进的-msave-restore、改进的多输出指令支持或机器大纲器)或 DSP 功能(例如零开销循环、双堆栈架构支持或带后增量/前增量的加载/存储)的高级optimization pass。

此时我们了解一下生成的 C/C++ 编译器在基准测试中的表现如何,并重点关注编译器的两个方面:性能和代码量。

Coremark 和 Dhrystone 用于测量性能,Embench-iot 用于测量代码大小。我们比较了三种编译器: GCC、Vanilla LLVM 和 Codasip LLVM。比较是相对于其他编译器进行的,Vanilla LLVM 是参考编译器(即在图表中得分 1)。RISC-V ISA 配置为 RV32IMCB。

测试性能结果

性能比较显示了 Codasip LLVM 的改进,以及它如何优于其他编译器。请注意,所有编译器都使用了类似的优化标志。自定义指令可以明显改善结果。

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

代码大小结果

代码大小比较也显示了 Codasip LLVM 的优势,尽管差距并不大。在此,自定义指令也能明显改善结果。对于如何缩减RISC-V的代码大小,大家可通过IP&SoC杂志7/8月版的电子书查阅Codasip的迷你技术白皮书,链接如下:https://ipsoc.yunzhan365.com/books/stka/mobile/index.html

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

创新自动化助理 RISC-V的飞速发展

RISC-V ISA 仍在不断发展,行业急需一些方法来轻松探索不同指令及其对软件的影响(包括性能、代码大小或功耗等方面)。自动化是非常可取的,因为自动化流程可以快速高效地探索设计空间。或者说,如果设计人员想要创新或与众不同,那么他们就需要能够实现创新或与众不同的工具和语言,协助其达到目的。

而Codasip Studio 正是实现这一目标的有效方法。Codasip的处理器设计自动化工具集能从单一的真实源自动生成所有需要的部件。生成的 LLVM C/C++ 编译器可以自动使用新指令(也就是说,除非您愿意,否则无需更改 C/C++ 代码)。此外它在性能和代码大小方面的表现也非常出色。Codasip Studio 可以自动生成可执行模型、RTL 或验证工具,以完善 IP 工具包,并在最终产品中部署创新的 RISC-V 架构。

审核编辑:彭菁

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C++
    C++
    +关注

    关注

    22

    文章

    2104

    浏览量

    73484
  • 编译器
    +关注

    关注

    1

    文章

    1618

    浏览量

    49046
  • 调试器
    +关注

    关注

    1

    文章

    300

    浏览量

    23686
  • SDK
    SDK
    +关注

    关注

    3

    文章

    1026

    浏览量

    45766
  • RISC-V
    +关注

    关注

    44

    文章

    2228

    浏览量

    46007

原文标题:编译器重度爱好者有话说 - 针对 RISC-V 的可重定向 LLVM C/C++ 编译器

文章出处:【微信号:Codasip 科达希普,微信公众号:Codasip 科达希普】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C++编译器数值性能比较

    现在市面上,主流的C/C++编译器包括M$的CL、gcc、Intel的icl、PGI的pgcc及Codegear的bcc(原来属于Borland公司)。Windows上使用最多的自然是cl,而在更广阔的平台上,gcc则是
    发表于 09-10 11:54 8次下载

    Linux下C/C++编译器gcc使用指南

    1.gcc包含的c/c++编译器 gcc,cc与c++,g++ gcc和cc是一样的,c++和g++是一样的。一般
    发表于 11-02 10:59 0次下载

    主流的C语言编译器详细介绍

    对于当前主流桌面操作系统而言,可使用Visual C++、GCC以及LLVM Clang这三大编译器。其中,Visual C++(简称MSVC)只能用于Windows操作系统;其余两个
    发表于 09-05 17:27 2次下载
    主流的<b class='flag-5'>C</b>语言<b class='flag-5'>编译器</b>详细介绍

    主流C语言编译器的详细资料介绍

    对于当前主流桌面操作系统而言,可使用Visual C++、GCC以及LLVM Clang这三大编译器。其中,Visual C++(简称 MSVC)只能用于Windows操作系统;其余两
    发表于 05-22 18:00 1次下载
    主流<b class='flag-5'>C</b>语言<b class='flag-5'>编译器</b>的详细资料介绍

    MATLAB 64位C语言和C++编译器应用程序免费下载

    本文档的主要内容详细介绍的是MATLAB 64位C语言和C++编译器应用程序免费下载。
    发表于 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++编译器的节点融合优化方法

    LLVM是以C十十编写的架构编译器的框架系统,支持多后端和交叉编译,用于优化程序的编译时间、链接时间、运行时间和空闲时间。节点融合是一种简单
    发表于 06-15 14:29 19次下载

    阿里云基础软件C/C++编译器的工作现状及挑战

    本文主要详细介绍了阿里云CC++编译器(GCC、LLVM)工作现状、主流编译器(GCC、LLVM
    的头像 发表于 06-23 15:26 2924次阅读
    阿里云基础软件<b class='flag-5'>C</b>/<b class='flag-5'>C++</b><b class='flag-5'>编译器</b>的工作现状及挑战

    SuperH C/C++ 编译器包 V.9.04 用户手册

    SuperH C/C++ 编译器包 V.9.04 用户手册
    发表于 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++编译器的缺省字节对齐方式

    C/C++编译器的缺省字节对齐方式为自然对界。即在缺省情况下,编译器为每一个变量或是数据单元按其自然对界条件分配空间。
    的头像 发表于 04-15 11:24 954次阅读

    SuperH C/C++ 编译器包 V.9.01 用户手册

    SuperH C/C++ 编译器包 V.9.01 用户手册
    发表于 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 用户手册
    发表于 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优化C/C++编译器

    电子发烧友网站提供《C7000优化C/C++编译器.pdf》资料免费下载
    发表于 10-30 09:45 0次下载
    <b class='flag-5'>C</b>7000优化<b class='flag-5'>C</b>/<b class='flag-5'>C++</b><b class='flag-5'>编译器</b>

    TMS320C6000优化C/C++编译器v8.3.x

    电子发烧友网站提供《TMS320C6000优化C/C++编译器v8.3.x.pdf》资料免费下载
    发表于 11-01 09:35 0次下载
    TMS320<b class='flag-5'>C</b>6000优化<b class='flag-5'>C</b>/<b class='flag-5'>C++</b><b class='flag-5'>编译器</b>v8.3.x

    ARM优化C/C++编译器 v20.2.0.LTS

    电子发烧友网站提供《ARM优化C/C++编译器 v20.2.0.LTS.pdf》资料免费下载
    发表于 11-07 10:46 0次下载
    ARM优化<b class='flag-5'>C</b>/<b class='flag-5'>C++</b><b class='flag-5'>编译器</b> v20.2.0.LTS

    MSP430优化C/C++编译器v21.6.0.LTS

    电子发烧友网站提供《MSP430优化C/C++编译器v21.6.0.LTS.pdf》资料免费下载
    发表于 11-08 14:57 0次下载
    MSP430优化<b class='flag-5'>C</b>/<b class='flag-5'>C++</b><b class='flag-5'>编译器</b>v21.6.0.LTS