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

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

3天内不再提示

芯来科技与华东师范大学SOLE实验室合作推动LLVM/CLANG编译器优化

芯来科技 来源:芯来科技 2024-06-12 09:09 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

随着RISC-V这一革命性的开源指令集架构在全球范围内的迅速普及,它为半导体行业带来了前所未有的机遇与挑战。在此大背景下,芯来科技和华东师范大学SOLE实验室携手合作,致力于在RISC-V处理器上进行深入的LLVM/CLANG编译器优化以及程序性能优化和调优。

我们不仅优化了LLVM编译器的多个关键环节,提升了代码生成效率和执行性能,还针对视频编解码、性能测试等应用场景进行了深入分析和优化,提高了相关软件的执行效率。

此次合作在RISC-V处理器上实现了一定程度的性能提升,同时,我们也希望能够为RISC-V性能优化领域的同仁们提供一些有益的借鉴和参考。我们相信,通过持续的技术创新和开放的合作精神,我们可以共同推动这一领域的发展和进步。下面是我们本次合作的主要成果。

一、MCPPass冗余指令的删除优化

在LLVM-17.x版本当中,生成的RISC-V端代码会出现冗余数据搬运指令无法删除的问题,详情如下图所示。在两个红框显示的vmv指令当中,v0以及v8寄存器的值都没有得到改变,但LLVM最终生成的RISC-V代码依然会对这两个值进行重复搬运。

0e843102-2858-11ef-91d2-92fbcf53809c.png

冗余vmv指令无法在LLVM/Clang中消除的示例

经过核查,出现该问题的根因是LLVM的Machine Copy Propagation Pass对寄存器使用的Def-Use记录不当所导致。经过对该问题进行修复后,该工作已经提交到了LLVM的上游仓库。该优化亦应用到了LLVM多个后端的代码生成当中,如RISC-V、X86以及AMDGPU的后端代码生成当中。

二、RVV的低精度数据向量化取余以及右移代码生成优化

C语言会采用Promotion Rule来保证混合精度或者是低精度数据运算结果的准确性,当遇到低精度数据如int8或者int16类型的数据进行逐元素(Element-Wise)取余或者是算术右移操作时,会先将相应的数据提升至32位,再将结果进行截断至原来的精度以保证运算结果的正确性。然而,取决于RVV 1.0指令集动态调整元素大小的特性,该过程需要一系列的vsetvli类指令进行操作。

考虑到相关的计算溢出结果以及指令的行为在RVV 1.0指令集中已经得到明确定义,在LLVM编译器生成相关代码时可以进行下图所示的优化:

0e9fdf74-2858-11ef-91d2-92fbcf53809c.png

Element-wise vrem.vv优化前

0eb0ea3a-2858-11ef-91d2-92fbcf53809c.png

Element-wise vrem.vv优化后

0ec36a7a-2858-11ef-91d2-92fbcf53809c.png

Element-wise vsra.vv优化前

0ede5da8-2858-11ef-91d2-92fbcf53809c.png

Element-wise vsra.vv优化后 这些优化不仅可以从指令的语义上保证计算结果的正确性,而且能有效地避免频繁复杂的数据精度提升与下降操作,这些优化工作亦被提交到了LLVM的上游仓库当中。

三、FFMPEGX264编解码热点采集分析

RISC-V Vector 1.0向量化指令集可以被用于视频编解码应用的加速处理当中,而FFMPEG作为最常见的音视频处理软件之一,在其关键核心且可向量化函数当中,大部分亦都利用RVV 1.0汇编或者Intrinsic进行了重写。尽管如此,如何针对其常用的x264编解码功能进行编译优化机会的探索,依然是提高其执行效率的一个重要手段。

我们采集对比了GCC 14.1与LLVM/Clang 17.2编译出来的FFMPEG,在进行x264视频编解码时的热点函数,详情下图所示。根据结果可以看到,热点函数都聚集在了libx264的x264_piexel_sad类函数之上。

0ef63bb2-2858-11ef-91d2-92fbcf53809c.png

FFMPEG X264编码热点分析(GCC)

0f1eda68-2858-11ef-91d2-92fbcf53809c.png

FFMPEG X264编码热点分析(LLVM/Clang)

0f390b7c-2858-11ef-91d2-92fbcf53809c.png

x264_pixel_sad类函数声明

而这类x264_piexel_sad函数本质上就是一系列的abs函数的处理,这类函数的定义可以如上图所示。

以16x16的迭代大小为例子,下面的图分别对比了LLVM/Clang以及GCC在该函数上生成代码的细致区别(开启-O3)。

0f59d7f8-2858-11ef-91d2-92fbcf53809c.png

x264_piexel_sad_16x16函数 GCC生成代码

0f735b56-2858-11ef-91d2-92fbcf53809c.png

x264_piexel_sad_16x16函数 LLVM/Clang生成代码

可以看到,在默认O3的选项下,GCC生成的代码对于这类核心函数的处理效率远不如LLVM/Clang。这是因为GCC默认采用LMUL=1(向量化分组大小为1)的大小进行代码生成,即其生成的RVV代码采用的LMUL大小不能高于1。在探索到这些根因后,可以采用GCC最新14.1版本中所提供的-mrvv-max-lmul=dynamic选项对这类生成的代码进行改进,采用该选项优化后的代码如下图所示:

0f92dbca-2858-11ef-91d2-92fbcf53809c.png

LMUL设置为dyanamic时GCC生成的代码

此时,GCC在此处生成的代码执行效率已经能够和LLVM/Clang相匹配。因此,我们在采用GCC编译的FFMPEG进行x264视频编解码时,为了更高的核心代码执行效率,建议将GCC动态调整LMUL大小的编译选项进行开启。

四、CoreMark的JumpThreading优化

Coremark是评估CPU性能常见的一个测试程序,但是采用LLVM/Clang编译器编译优化coremark程序跑分效果远远比不上GCC,因此我们分析了Coremark程序的热点函数,发现可以通过Jump Threading技术来进行优化,Jump Threading是一种专门用于控制流程图(CFG)优化的一种编译优化技术,它会在执行分支前遇到确定变量的值时,直接执行确认值在分支以后的路径,即采用无条件的跳转替代条件跳转,详情如下图所示:

0fab5df8-2858-11ef-91d2-92fbcf53809c.png

优化前的CFG

0fc2d398-2858-11ef-91d2-92fbcf53809c.png

优化后的CFG

该优化会对CFG路径中变量的值进行扫描遍历,并寻找到可以利用无条件跳转替换条件判断的路径,并进行基本块的克隆与路径的替换。考虑到该扫描过程较为耗时,LLVM中默认的Jump Threading优化采取较为轻量级的扫描方式。通过在芯来编译工具链的LLVM/Clang中引入一系列更为激烈的Jump Threading扫描优化手段后,将采用Clang编译的CoreMark并运行在芯来N300模拟器上的跑分提升约18%。

0feb7ef6-2858-11ef-91d2-92fbcf53809c.png

LLVM/Clang调优前CoreMark跑分

1000579a-2858-11ef-91d2-92fbcf53809c.png

引入额外Jump Threading优化后的CoreMark跑分

五、SPECCPU2006的编译选项调优

SPEC CPU 2006 INT是业界常用的CPU性能基准测试套件,为了提高SPEC CPU 2006 INT的测试跑分,常常需要找到更适合的编译选项来对编译器进行调优,以获得更好的SPEC分数。然而,考虑到目前大部分的最佳跑分配置都是利用业界专用编译器,如Intel的ICC编译器以及AMD的AOCC编译器等进行跑分。对于RISC-V指令集架构平台,这类专用的编译器并不能够适用。同时,假如采用Ref测试集来进行编译选项的调优,则需要消耗大量的测试时间。

为了加速调优,我们采用了一种更为灵活且快捷的基于Qemu仿真器的动态指令计数对比的编译选项调优方法。下图展示了采用GCC-13对SPEC CPU2006 INT的TEST测试集进行选项调优的结果。

10168d26-2858-11ef-91d2-92fbcf53809c.png

SPEC CPU 2006 INT动态指令数目调优结果

经过精心调优的编译选项在SPEC CPU2006 INT的多项测试程序中显著降低了动态指令的数量。进一步地,我们在FPGA开发板上进行了实际的性能对比测试。结果表明,这种基于动态指令计数的调优方法不仅有效,而且在资源受限的开发板或仿真CPU主频受限的FPGA环境中,为编译选项的优化提供了一种切实可行的策略。这一发现为在类似条件下的性能提升开辟了新的探索路径。

此次合作是双方在技术研究和应用开发领域共同努力的成果,它体现了我们团队在探索和实践过程中的专注与努力。同时,我们对于能够参与到产学研合作这一推动技术革新的重要力量中来而深感荣幸。相信通过这样的合作模式,我们能够与业界同仁共同学习、相互启发,为整个技术社区的发展贡献绵薄之力。

审核编辑:彭菁

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

    关注

    30

    文章

    4940

    浏览量

    73118
  • 编译器
    +关注

    关注

    1

    文章

    1669

    浏览量

    51070
  • 视频编解码
    +关注

    关注

    2

    文章

    54

    浏览量

    12047
  • 芯来科技
    +关注

    关注

    0

    文章

    78

    浏览量

    3903

原文标题:芯来科技与华东师范大学SOLE实验室合作推动RISC-V性能优化

文章出处:【微信号:nucleisys,微信公众号:芯来科技】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    性能突破 | SpacemiT-X60 在 LLVM 编译器上实现 16% 显著提升

    2025年10月,在北美RISC-V峰会上,Igalia编译器工程师Mikhail发表专题演讲《Unlocking15%MorePerformance
    的头像 发表于 11-21 18:04 8445次阅读
    性能突破 | SpacemiT-X60 在 <b class='flag-5'>LLVM</b> <b class='flag-5'>编译器</b>上实现 16% 显著提升

    2025开放原子校源行走进阜阳师范大学

    10月29日,由开放原子开源基金会主办,阜阳师范大学、江苏润开鸿数字科技有限公司承办的“开放原子校源行”活动,在阜阳师范大学正行楼报告厅成功举行。活动汇聚了开源领域顶尖专家、头部企业代表与高校师生的思想盛宴,为校园注入了开放的活力与创新的激情,成功点燃了学子们心中的开源之
    的头像 发表于 11-03 16:30 620次阅读

    光峰科技与深圳技术大学签署联合实验室合作协议

    10月16日,光峰科技公告官宣,与深圳技术大学拟签署《光峰科技与深圳技术大学联合实验室合作协议》,围绕半导体激光前沿领域进行合作研发,共同建
    的头像 发表于 10-17 17:32 1166次阅读

    中科创达出席临港汽车软件联盟首场技术沙龙

    2025年8月8日,临港汽车软件联盟(筹)首场技术沙龙"AI如何为OS赋能"在华东师范大学滴水湖国际软件学院成功举办。本次活动由临港新片区管委会指导,临港汽车软件联盟主办,临港
    的头像 发表于 08-15 15:54 942次阅读

    2025意法半导体校企交流活动成功举办

    此前,2025年7月11日,“2025意法半导体校企交流活动”在ST上海办公成功举办。此次活动由意法半导体中国区人力资源团队牵头,联合上海交通大学(SJTU)与华东师范大学(ECNU)半导体领域
    的头像 发表于 08-14 18:13 970次阅读

    李金磊:保持热情和兴趣,勇敢尝试新鲜事物

    嘉宾介绍:李金磊(论坛ID:@jf_07365693),是华东师范大学精密光谱科学与技术国家重点实验室的在读博士研究生,主要从事光学器件和设备的开发和维护,具有三年以上嵌入式开发经验,为实验设备仪器
    的头像 发表于 07-29 08:06 680次阅读
    李金磊:保持热情和兴趣,勇敢尝试新鲜事物

    比亚迪与香港科技大学成立具身智能实验室

    近日,比亚迪汽车工业有限公司与香港科技大学(以下简称“港科大”)签署合作框架协议,共同成立“香港科技大学-比亚迪具身智能联合实验室”。本次合作
    的头像 发表于 07-10 18:08 865次阅读

    紫光展锐“火”科普课堂走进华东师范大学张江实验中学

    科技融合;另一方面致力于推动科普教育,通过“火”课堂等创新公益活动,激发青少年对科学的兴趣,为科技强国建设贡献力量。
    的头像 发表于 05-29 09:26 844次阅读

    龙芯“百计划”联合实验室首批高校名单揭晓

    的研发与应用。经过严格筛选与评估,百计划首批联合实验室合作高校名单正式确定,标志着龙芯中科在推动国产芯片技术自主创新与产业升级的道路上迈出坚实一步。
    的头像 发表于 01-24 11:47 1280次阅读

    Triton编译器优化技巧

    在现代计算环境中,编译器的性能对于软件的运行效率至关重要。Triton 编译器作为一个先进的编译器框架,提供了一系列的优化技术,以确保生成的代码既高效又适应不同的硬件架构。 1. 指令
    的头像 发表于 12-25 09:09 1807次阅读

    Triton编译器与其他编译器的比较

    的GPU编程框架,使开发者能够编写出接近手工优化的高性能GPU内核。 其他编译器 (如GCC、Clang、MSVC等): 定位:通用编译器,支持多种编程语言,广泛应用于各种软件开发场景
    的头像 发表于 12-24 17:25 1572次阅读

    深开鸿与华南师范大学签署战略合作框架协议,共探产学研协同创新

    12月19日上午,深开鸿与华南师范大学(简称“华南师大”)的战略合作框架协议签约仪式在华南师范大学石牌校园举行。深开鸿CEO王成录、高级顾问祝宇清、高级副总裁兼市场体系总裁解伟俊,华南师范大学
    的头像 发表于 12-23 21:29 858次阅读
    深开鸿与华南<b class='flag-5'>师范大学</b>签署战略<b class='flag-5'>合作</b>框架协议,共探产学研协同创新

    HighTec C/C++编译器套件全面支持RISC-V IP

    是基于LLVM开源汽车级C/C++编译器工具,已通过ISO 26262 ASIL D的安全认证。从事RISC-V架构开发的汽车软件开发者受益于这些工具无缝支持
    的头像 发表于 12-23 09:04 1997次阅读
    HighTec C/C++<b class='flag-5'>编译器</b>套件全面支持<b class='flag-5'>芯</b><b class='flag-5'>来</b>RISC-V IP

    DFRobot与西北师范大学教育技术学院签署院企协同育人暨战略合作协议

    2024 年12 月9 日,上海智位机器人股份有限公司(DFRobot)与西北师范大学教育技术学院“院企协同育人交流暨战略合作协议签订仪式”在甘肃省兰州市西北师范大学云亭校区举行。西北师范大学
    的头像 发表于 12-11 15:12 1011次阅读

    分享关于编译器的科普

    源代码分析工具和IDE集成。GCC被构建成一个单一的静态编译器,这使得它非常难以被作为API并集成到其他工具中。 GCC比Clang
    的头像 发表于 12-09 09:49 902次阅读