首页 > 其他分享 >当GaussDB遇上了毕昇编译器

当GaussDB遇上了毕昇编译器

时间:2023-06-12 17:46:53浏览次数:52  
标签:GaussDB 性能 编译器 指令 应用 优化 遇上

摘要:当应用软件及硬件确定后,编译器对应用的自动优化将成为应用性能的关键。

从应用优化说起

一个应用的优化通常有架构级优化、模块级优化和函数级优化,高性能作为云数据库GaussDB主打特性之一,其在这几方面都进行了大量的优化,也有很强的性能表现。如何进一步提升性能,是否还有其他方面的切入点?

答案之一是编译器,编译器作为人机交流的桥梁,一方面正确地把高级语言翻译成机器语言,另一方通过各种优化变换方法生成更高效的等价语义,所以当应用软件及硬件确定后,编译器对应用的自动优化将成为应用性能的关键。

1.毕昇编译器是什么

毕昇编译器是华为编译器实验室针对通用处理器架构构建,支持C/C++/Fortran编程语言,增强和引入了多种编译优化技术,致力于打造高性能、高可信及易扩展的编译器工具链。毕昇编译器针对鲲鹏架构深度优化,SPEC CPU 2017性能较开源GCC提升30%。

  • 高性能:编译深度优化,增强多核并行化,自动向量化等,大幅提升指令和数据呑吐量。
  • 多算力支持:支持其他Arm架构国产芯片,如飞腾。支持x86、RISC-V、龙芯等架构。
  • 高可信:商业+自研测试套,每日100万+测试用例,全面质量保障;开发态提供多种安全编码工具;社区CVE及时修复;车规级安全认证。

2. 相关编译器优化技术

2.1 函数内联(inline)

函数/过程是编程语言的重要组成部分,函数/过程之间的调用是有一定的开销,比如保存和恢复上下文、传递参数等操作开销。函数内联优化是一种常用的优化技术,它可以将函数调用处直接替换为函数体,从而减少函数调用的开销。下面是一个简单的示例,展示了如何在编译器中应用inline优化。

 int square(int x) { 
 return x * x; 
 } 
 int calculate(int a) { 
 return square(a) + square(a + 1); 
 } 

编译器进行自动内联后,如下:

 int calculate(int a) { 
 return (a * a) + ((a + 1) * (a + 1));
 }

在优化后的代码中,不再有调用square函数的开销,另外内联后可以帮助编译器发现更多的优化机会,比如本例中,可以进一步进行编译期间的计算。

这只是一个简单的例子,实际的编译器inline优化会更为复杂,涉及到更多的优化策略和技术。毕昇编译器进行了inline优化增强,如下是mataERP场景下inline的情况。

函数内联后对应用热补丁机制有一定影响,制作工作量会略有增加。

2.2 指令预取优化

指令预取(Instruction Prefetching)是一种计算机体系结构中的优化技术,用于提前获取未来可能需要执行的指令数据,并将其预加载到指令缓存中,以减少指令访问延迟和提高程序的执行效率。

在执行程序时,处理器需要从内存中获取指令数据并进行解码和执行。由于内存访问的延迟比处理器的执行速度慢,处理器可能需要等待指令数据的到达,导致指令执行的停滞。为了克服这种延迟,指令预取技术被引入。

指令预取的基本原理是根据程序的访存模式和分支预测信息,提前预测和获取未来可能需要执行的指令数据。这样,当处理器执行到需要这些指令的时候,它们已经被预先加载到指令缓存(例如指令高速缓存)中,避免了等待时间。

如下面这个来自GaussDB的函数:

毕昇编译器(右侧)插入了prfm预取指令,prfm是鲲鹏平台上定义的内存数据预取指令,执行指令预取优化。

2.3 自动向量化技术

自动向量化技术是编译器利用硬件架构提供的SIMD(single instruction multiple data)指令,如Arm的NEON/SVE指令,x86平台的SSE/AVX指令,一条指令可以处理多路数据,从而提升应用二进制的执行效率。毕昇编译器做了大量向量化新场景识别和算法增强,并结合鲲鹏SIMD指令特点进行深度优化。

如上图,如有两组四个整形数据相加运算,左侧需要四次操作,而右侧向量化后只需要1次操作。

2.4 链接时优化技术

链接时优化LTO(Link Time Optimization)是程序链接期优化,也叫链接期过程间优化。如下图,编译器在链接时将所有编译单元(过程)合并在一起,这样可以发掘不同过程间的优化机会,比如内联(inline)、函数特化(function specialization)、冗余代码消除、常量传播等等,通常可以获得更高的性能收益。当然同时也带来编译器时间加长的负面收益。

2.5 CFGO优化

对于控制流较多、对数据分段访问较多的应用(例如数据库类应用)非常适合编译器的反馈类优化技术,CFGO(Continuous FGO)通过收集程序运行时信息(profile)进行优化决策。编译器根据这些运行时信息指导各种编译优化技术进行更准确的优化决策,生成目标程序。

3. 性能收益

毕昇编译器协同GaussDB跨域创新,基于应用层优化、编译中端优化、算力优化等多种手段对GaussDB应用场景持续优化。

  • 高性能:对插入、更新、删除等不同负载的业务,毕昇 for GuassDB优化实现 TPCC性能提升30%,TPCH性能提升13%,应用性能提升5%-10%。
  • 高安全:毕昇编译器全面升级代码检测工具,保障安全可信代码开发,实现高质量、高安全的持续集成、交付与部署。

4. 总结与展望

数据库和编译器都是关键的基础软件,为关基行业提供软件根技术,后续将进行如下几方面的工作:

(1)完成GaussDB切换毕昇编译器,直接获取已有的性能收益;

(2)针对典型客户场景,技术能力联合创新和快速验证;

(3)突破编译器/虚拟机关键技术,支撑高斯PLSQL性能提升;

目前GaussDB已启动切换毕昇编译器进程,并在已经在银行、政务云等客户进行了POC验证,相信后续毕昇编译器可以为GaussDB提供更强大的竞争力,从而也为更多行业客户创造更多的商业价值。

另外,毕昇编译器作为通用编译器,也可涵盖金融领域其他应用场景,如优化haproxy应用,助力工行音视频交互服务获得收益;落地上交所CICD,通过协助检测内存安全、代码规范,保障高质量交付。

 

点击关注,第一时间了解华为云新鲜技术~

标签:GaussDB,性能,编译器,指令,应用,优化,遇上
From: https://www.cnblogs.com/huaweiyun/p/17475675.html

相关文章

  • VC6.0编译器参数设置
    VC6.0编译器参数的设置主要通过VC的菜单项Project->Settings->C/C++页来完成。我们可以看到这一页的最下面ProjectOptions中的内容,一般如下:/nologo/MDd/W3/Gm/GX/ZI/Od/D"WIN32"/D"_DEBUG"/D"_WINDOWS"/D"_AFXDLL"/D"_MBCS"/Fp"Debug......
  • 华为云新一代分布式数据库GaussDB,给世界一个更优选择
    摘要:与伙伴一起,共建繁荣开放的GaussDB数据库新生态。本文分享自华为云社区《华为云新一代分布式数据库GaussDB,给世界一个更优选择》,作者:华为云头条。6月7日,在华为全球智慧金融峰会2023上,华为常务董事、华为云CEO张平安以“一切皆服务,做好金融数字化云底座和使能器”为主题发表演讲,......
  • 华为云新一代分布式数据库GaussDB,给世界一个更优选择
    摘要:与伙伴一起,共建繁荣开放的GaussDB数据库新生态。本文分享自华为云社区《华为云新一代分布式数据库GaussDB,给世界一个更优选择》,作者:华为云头条。6月7日,在华为全球智慧金融峰会2023上,华为常务董事、华为云CEO张平安以“一切皆服务,做好金融数字化云底座和使能器”为主题发表演......
  • AI编译器CINN v.s TVM 中CodeGen 源码解读
    如下的技术点梳理仅以「日常优化工作」为牵引点,涉及哪个模块,就具体去看哪个模块的代码。一、CINN框架CINN中CodeGen之后的代码编译主要交给了Compiler类来负责。核心的函数主要是:Build(ir::Module&,string&code)Lookup(string&fn_name)classCompilerfinal{publ......
  • GaussDB(DWS)查询过滤器原理与应用
    摘要:GaussDB(DWS)查询过滤器(黑名单)提供查询过滤功能,支持自动隔离反复被终止的查询,防止烂SQL再次执行。本文分享自华为云社区《GaussDB(DWS)查询过滤器原理与应用》,作者:门前一棵葡萄树。一、概述GaussDB(DWS)查询过滤器(黑名单)提供查询过滤功能,支持自动隔离反复被终止的查询,防止......
  • 当“代码农”遇上“码农”:揭秘主干开发的那些事儿 | 京东云技术团队
    前段时期我负责部门内部主干开发落地相关事宜,这个过程中,也真真切切的体会到了多人开发过程中,面对特性分支管理中,大家遇到的一些困扰,尤其面对敏捷迭代的开发方式,合并冲突,集成测试,代码重用等方面,都与高效两个字背离。当然,我在推进主干开发过程中,也遇到了一些问题和坎坷,在这里,集中的做......
  • 当“代码农”遇上“码农”:揭秘主干开发的那些事儿
    前段时期我负责部门内部主干开发落地相关事宜,这个过程中,也真真切切的体会到了多人开发过程中,面对特性分支管理中,大家遇到的一些困扰,尤其面对敏捷迭代的开发方式,合并冲突,集成测试,代码重用等方面,都与高效两个字背离。当然,我在推进主干开发过程中,也遇到了一些问题和坎坷,在这里,集中的......
  • 如何把一个报表从2分钟优化到1秒?---GaussDB数据库
    报表优化系列文章----如何把一个报表从2分钟优化到1秒?优化需求:报表名:外部数据查询报表\EDM004-外部数据查询量业务类型_部门编号需求说明:原报表SQL运行时长2分钟,感觉慢,让DBA看看是否有优化的空间,给优化一下。优化人:4K/weicat:wx120890945优化日期:2022-03-03数据库类型:Ga......
  • GaussDB数据库事务介绍
    前言随着大数据和互联网技术的不断发展,数据库管理系统的作用越来越重要,实现数据的快速读写以及保证数据的安全性和完整性成为企业在选择数据库技术时最为关注的问题之一。事务是保证数据一致性和完整性的关键机制之一,因此事务管理在数据库技术中占据了极为重要的位置。在这里我们将......
  • 再识华为云数据库——GaussDB
    前言华为云数据库GaussDB是一款拥有云上高可用,高可靠,高安全,弹性伸缩,一键部署,快速备份恢复,监控告警等关键能力,能为企业提供功能全面,稳定可靠,扩展性强,性能优越的企业级数据库服务。同时具有PB级海量数据存储、实时高效访问、自动化运维等特点,广泛应用于金融、电信、物流、电商、政体......