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分数。然而,考虑到目前大部分的最佳跑分配置都是利用业界专用编译器,如IntelICC编译器以及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

    文章

    4805

    浏览量

    68777
  • 编译器
    +关注

    关注

    1

    文章

    1637

    浏览量

    49186
  • 视频编解码
    +关注

    关注

    2

    文章

    54

    浏览量

    11769
  • 芯来科技
    +关注

    关注

    0

    文章

    61

    浏览量

    3046

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

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

收藏 人收藏

    评论

    相关推荐

    Triton编译器优化技巧

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

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

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

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

    12月19日上午,深开鸿与华南师范大学(简称“华南师大”)的战略合作框架协议签约仪式在华南师范大学石牌校园举行。深开鸿CEO王成录、高级顾问祝宇清、高级副总裁兼市场体系总裁解伟俊,华南师范大学
    的头像 发表于 12-23 21:29 151次阅读
    深开鸿与华南<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 232次阅读
    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 176次阅读

    分享关于编译器的科普

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

    Keil编译器优化方法

    我们都知道,代码是可以通过编译器优化的,有的时候,为了提高运行速度或者减少代码尺寸,会开启优化选项。
    的头像 发表于 10-23 16:35 661次阅读
    Keil<b class='flag-5'>编译器</b><b class='flag-5'>优化</b>方法

    龙芯中科与南京师范大学达成产教合作

    近日,龙芯中科副总裁杜安利一行前往南京师范大学电气与自动化工程学院(以下简称“南师大电自学院”),双方就科研合作实验室共建、3D打印装备、人才培养、课程思政等展开深入交流合作。南师大
    的头像 发表于 07-17 14:51 594次阅读

    华东师范大学的老师 上课已经用上了大模型

    数据具有非独占性、非排他性和非稀缺性。海量数据的产生和数据处理技术的飞速进步,驱动了人工智能等新兴技术的崛起。 科学研究作为认识世界的重要手段,其范式也受到数据和技术发展的影响。原有很多科学理论是建立在长期观察、抽象归纳的基础上。但在大数据时代,研究者往往先有海量的数据,再通过机器学习等技术从数据中发现规律和洞见,用数据驱动科学发现。
    的头像 发表于 07-01 15:18 208次阅读
    <b class='flag-5'>华东师范大学</b>的老师 上课已经用上了大模型

    极海半导体-武汉大学MCU联合实验室揭牌

    极海半导体-武汉大学 MCU联合实验室揭牌仪式在武汉大学信息学部教学实验大楼隆重举行。此次仪式标志着极海大学计划正式落子武汉,双方在微控制
    的头像 发表于 06-28 11:36 851次阅读

    SEGGER编译器优化和安全技术介绍 支持最新C和C++语言

    SEGGER编译器是专门为ARM和RISC-V微控制设计的优化C/C++编译器。它建立在强大的Clang前端上,支持最新的C和C++语言功
    的头像 发表于 06-04 15:31 1495次阅读
    SEGGER<b class='flag-5'>编译器</b><b class='flag-5'>优化</b>和安全技术介绍 支持最新C和C++语言

    采用OpenACC框架的FVCOM模型实现超百倍计算加速

    华东师范大学河口海岸学国家重点实验室葛建忠教授团队作为国际先进海洋数值模型 FVCOM 开发团队核心成员
    的头像 发表于 04-26 09:44 497次阅读
    采用OpenACC框架的FVCOM模型实现超百倍计算加速

    科大讯飞与华中师范大学合作 大模型赋能教育

    科大讯飞与华中师范大学合作 大模型赋能教育 日前 华中师范大学与科大讯飞股份有限公司签署战略合作协议;双方将围绕大模型赋能教育教学、科研创新、人才培养、校园服务等方面展开
    的头像 发表于 04-15 15:12 913次阅读

    浙江大学与燧原科技共建“云边智能联合实验室

    浙江大学控制科学与工程学院与上海燧原科技股份有限公司共同打造的“云边智能联合实验室”近日在浙江大学玉泉校区举行了隆重的揭牌仪式。这一创新性的合作旨在深度整合双方资源,共同
    的头像 发表于 03-28 09:47 540次阅读

    华东师范大学教授:生活中的传感

    大家·科技前沿 李波 华东师范大学物理与电子科学学院教授,博士生导师 当我们逛街购物时,很多商店的大门都会自动打开,迎接顾客的到来;盥洗室里的水龙头会在你需要的时候自动出水,从而带来更加卫生的环境
    的头像 发表于 02-20 08:41 414次阅读
    <b class='flag-5'>华东师范大学</b>教授:生活中的传感<b class='flag-5'>器</b>