【openEuler 2023 年度优秀项目推荐】openEuler Compiler SIG GCC for openEuler项目

-
描述:GCC for openEuler
编译器基于开源 GCC(GNU Compiler Collection,GNU
编译器套装)开发,而 GCC for openEuler 在继承了开源 GCC
能力的基础上,聚焦于 C、C++、Fortran
语言的优化,增强自动反馈优化、软硬件协同、内存优化、自动向量化等特性,并适配国产硬件平台,如鲲鹏、飞腾、龙芯等,充分释放国产硬件算力。
-
推荐人:李彦成@li-yancheng openEuler Compiler SIG maintainer,
黄晓权@huang-xiaoquan openEuler Compiler SIG committer,
丁光亚@dguangya openEuler Compiler SIG committer,伍明川@wumingchuan openEuler Compiler SIG committer
-
社区地址:
https://gitee.com/openEuler/gcc
openEuler
优秀项目衡量标准
-
推荐奖项 openEuler
年度优秀项目。
- 开源开放
项目代码托管在openEuler。
-
行业影响
开源 GCC
是一种支持多种编程语言的跨平台开源编译器,采用 GPLv3(GNU General Public License, version 3)协议,是 Linux
系统上目前应用最广泛的 C/C++ 编译器,基本被认为是跨平台编译器的事实标准。
-
技术创新
GCC for openEuler
致力于在开源 GCC
基础上,提供更多元化的竞争力特性,通过编译优化、反馈优化、内存布局优化等手段,提升上层软件的性能表现。
-
高质量开发和运营 代码符合规范,代码质量高,对用户反馈问题响应及时。
1.
软件介绍
GCC for openEuler
支持鲲鹏、x86
等主流硬件平台,支持与 openEuler 性能 /
安全 / 可靠 / 运维工程进行协同,对接编译器插件框架,提供通用化插件功能,支持多样算力特性支持和微架构优化。在开源GCC的基础上,实现内存智能分配、内存优化、自动矢量化等特性,并通过整合业界领先的反馈优化技术,实现自动反馈优化,提升数据库等场景应用性能。GCC for openEuler
在以下四个方向实现主要突破。
•
基础性能:基于 GCC
开源版本,提升通用场景性能,服务多样算力。
•
反馈优化:整合业界领先的反馈优化技术,实现程序全流程和多模态反馈优化,提升数据库等云原生场景重点应用性能。
•
芯片使能:使能多样算力指令集,围绕内存等硬件系统,发挥算力优势,提升 HPC
等场景化性能。
•
插件框架:使能多样算力差异化编译诉求,一套插件兼容不同编译框架,打通 GCC
和 LLVM 生态。
功能描述:基础性能 (指针压缩)
当结构体域成员出现结构体指针时,8 bytes
的指针大小容易造成结构体成员对齐空隙,而且指针与小于 8 bytes 的基本类型混合使用时容易造成内存 padding,浪费内存空间,造成页表刷新频繁、内存访问延时,程序性能不佳。
结构体指针压缩(以下简称为指针压缩)优化适用于该场景。指针压缩将结构体域成员中的结构体指针由 64 bits
压缩至可选的 8、16 和 32 bits
整型,缩小结构体占用内存大小,降低从内存中读写数据时的带宽压力,从而提升性能。
功能描述:全流程反馈优化(反馈优化)
目前业界主流反馈优化技术分为 PGO、AutoFDO
编译阶段反馈优化,Bolt 二进制阶段反馈优化。
PGO
是一种编译器优化技术。通过收集程序运行时信息(profile)进行优化决策。编译器根据这些运行时信息指导各种编译优化技术进行更准确的优化决策,生成目标程序。
AutoFDO
主要是通过采样方式收集程序的运行信息,间接得到程序的执行情况,使用 perf
收集 profile,对程序性能影响较小,实现程序源码与 profile data
解耦,对程序代码变化相对不那么敏感,开发和测试阶段收集的 profile 可用于优化目标程序,复用性较好。
Bolt
通过在编译器在生成二进制时预置重定位信息,在二进制层面上进行 BB
块重排、函数重排、冷热分区等优化,补齐二进制全局的优化机会。
全流程反馈优化,整合反馈数据,打通传统自动反馈优化(AutoFDO)、反馈优化(PGO)与二进制反馈优化(BOLT)流程,极大提高反馈优化的易用性,并通过
MCF 算法修正、discriminator 支持优化,进一步提升优化效果。
功能描述:智能分配预取(芯片使能)
当前,智能分配预取支持 HPC
应用静态优化分析,通过访存数据复用分析和插入预取指令,部分HPC应用内核函数平均可提升 30%。
• 动静结合编译优化:编译器中增加静态分析和根据动态执行反馈修正的数据复用评分模型,对高并发的热点数据进行分析和识别。
• 内存智能分配预取:通过预取指令生成和插入,显式提供预取信息告知硬件,结合硬件的替换策略提高缓存的利用率和命中率。
• 生态低侵入式编程接口:未来将提供类 CUDA
的变量属性和 OpenMP 导语扩展,编译器自动生成代码,提高开发便利性和兼容性。
应用场景
GCC for openEuler
是基于开源 GCC
开发和发行的 GCC 基础软件,在 openEuler
等 Linux 环境里面应用比较广泛,应用场景涵盖数据库、虚拟化、HPC
等重要场景。实现 Arm 平台下,SPEC2017
基础性能相比开源 GCC 提升 20%,助力运营商、云厂商、安平等行业客户 MySQL
数据库性能提升 15%+。
项目未来计划
在未来,我们专注于进一步提高GCC for openEuler的性能和易用性,和社区贡献者一起讨论,提高编译器的客户体验。在当前四个方向(基础性能、反馈优化、芯片使能、插件框架)的基础上,在高级编译优化能力与编译速度上进一步增强,为openEuler带来更优的用户体验。
2.
社区大事记
-
2022 openEuler Summit
技术分论坛 --
全场景全流程的自动反馈优化
- 2022
openEuler Summit 技术分论坛 --
编译器插件框架
- 2023 openEuler Developer Day --GCC版本规划及特性前瞻
- 2023 openEuler Developer Day --
编译器插件框架亮相展台
- 2023
开放原子全球开源峰会
?C
编译器插件框架亮相展台
- 2023
Open Source Summit Europe主题演讲 -- The Compiler Plugin Framework to Facilitate Customized Compilation and Development
participants (1)
-
liyancheng