当前,千行百业数字化转型步伐加快,对算力提出了更高的要求,与此同时,行业应用的多样性也带来了数据和算力的多样性。
在此背景下,华为通过构建鲲鹏计算产业,拥抱多样性计算新时代。围绕“硬件开放、软件开源、使能伙伴、发展人才”的策略,鲲鹏生态已交出了一份高分答卷。不过当前,鲲鹏生态发展仍面临诸多挑战。其中,应用软件的迁移尤为关键。为了帮助开发人员更快熟悉鲲鹏平台,更好地完成基于传统架构的应用服务迁移工作,鲲鹏发布了开发使能套件 DevKit,提供覆盖代码扫描、迁移、编译、调优等研发全流程。
在 2021 年 5 月 29 日 QCon 2021 北京站上,华为鲲鹏编译技术专家乐永年作为“鲲鹏平台软件迁移和调优实践”专题出品人兼讲师,携手薛永辉、魏伟、吕研冬博士三位华为技术专家为开发者深度解读鲲鹏一站式开发套件 DevKit 的工具套件和关键技术。
编译器无法编译源码中其他平台的汇编代码,因此如何高效识别 x86 中的汇编代码并快速迁移到鲲鹏平台上,是鲲鹏生态快速建设和拓展亟需解决的一个技术课题。
华为鲲鹏编译技术专家乐永年表示,在具体解决思路上,首先需要提供高效汇编翻译的能力;其次,针对用户汇编代码的使用情况,有重点的解决汇编翻译;最后,帮助用户维持项目中的源码,从而提供源码级的高可维护性。
基于此,鲲鹏汇编总体设计方案为“W+二”。其中,“W”由四个步骤完成,分别是汇编注解、局部异构平台反编译、编译优化和代码生成。汇编注解解决了汇编样式多样的问题,局部异构平台反编译解决平台差异问题,代码质量由编译器的编译优化和代码生成完成。“二”是两条快速翻译路径,一条是基于规则的快速指令翻译,用于简单嵌入汇编翻译,另一条是编译器里基于向量化语义函数的 SIMD 指令翻译。
通过这个方案,鲲鹏 DevKit 中的代码迁移工具能快速实现 x86 汇编代码到鲲鹏平台的自动迁移,保障应用迁移高效率完成。总的来说,“W+二”方案做到了“能用则用、需改尽改、当快则快、曲折前行”,沿着问题本身的逻辑,利用对现有的技术的改造和增删,完成最终的翻译。
在介绍具体的解决方案外,乐永年还分享了汇编代码翻译中的几个细节问题。比如在汇编代码的识别上,如果用传统的方式去查找,会漏掉很多汇编代码,因此需要使用编译器的语法能力,如 LLVM 的 Clang-Tidy 工具框架,通过在源代码里生成的抽象语法树,找到汇编代码并进行自动翻译,用语法解析的方式避免代码漏扫,从而精准地识别需要迁移的汇编代码。
在嵌入汇编的翻译问题上,对于简单的嵌入汇编,可以通过扩展检查规则,把嵌入汇编的语法植入,查找嵌入汇编对应的语法元素,然后进行翻译。至于复杂的汇编,虽然情况各有不同,但也可以一键翻译成为鲲鹏的汇编代码。
最后乐永年表示,在未来,鲲鹏 DevKit 还会根据用户的需要,不断地优化汇编翻译能力,具体包括指令语义的众筹、更多场景的支持以及新硬件指令支持。
在开发过程中,加速库(即高性能软件库)的意义不言而喻。具体来说,加速库的意义体现在以下两个方面:
第一,通过加速库开发,可以实现计算效率的极大提升。加速库通过改进软件实现流程或算法,从而充分利用芯片计算能力,提升代码执行效率,使用户获得更好的性价比。
第二,加速库是系统工程重要的组成部分。IT 系统是多组件、不可分割的,任何一个组成部分的改进对于整体性都会带来改进,而加速库在其实的提升作用更加重要。
总的来说,加速库是应用软件性能调优的最佳实践方法之一,也是解决方案的基石。
华为鲲鹏数学库架构师薛永辉表示,要想做好加速库,首先需要熟悉硬件平台的能力,再配合扎实的软件技术栈,通过有效利用编译器技术和工具链能力进行构建。在开发加速库的过程中,要先识别出来瓶颈在哪里,其次进行算法优化设计,再基于优化方案完成编码,最后再通过相应的工具评估加速库是否能够达到性能要求。加速库开发是一个循环往复的有趣过程。
基于鲲鹏微架构的加速技术,华为构建了鲲鹏加速库。薛永辉介绍说,鲲鹏基于行业常用的软件库,通过软硬协同、算法创新,打破性能瓶颈,充分释放鲲鹏处理器的澎湃算力。目前已经覆盖了压缩库、加解密库、系统库、媒体库、数学库和存储库等常用的基础软件库,为鲲鹏应用提供极致的性能保障。
硬件加速库方面,鲲鹏加速引擎基于华为自研 UACCE 加速器内核框架,通过 UIO,池化,分块等技术,提供最佳能力,且 100% 继承 OpenSSL 和 Zlib 接口,应用层代码逻辑无需调整,使用简单。在优化效果上,Web 应用使用 KAE 硬加速 Nginx,相比主流加速卡性能提升 35%;大数据使用硬加速库启用数据安全加解密,CPU 性能损耗小于 5%;分布式存储使用硬加速库,混合读写(7:3)带宽性能最高提升 40%。在未来芯片发展的过程中,鲲鹏硬件加速库也会根据市场需求进一步研发更多更好的功能。
软件加速库方面,薛永辉重点介绍了如何通过软件编码提升软件性能的几个技巧,如通过解决 IO(访存)瓶颈、改善流水线、算法优化提升性能等,此外,还有一些其他的常见优化技巧,如指令重排、循环展开、标量替换、循环分块、强度削弱、重复利用。
目前,DevKit 加速库插件支持加速函数一键识别、智能联想,支撑应用快速集成鲲鹏高性能软件库,为应用迁移后的性能保驾护航。
毕昇编译器是一种 Linux 下针对鲲鹏处理器的高性能编译器,于 2020 年正式发布上线。它基于开源 LLVM 10.0.1 版本开发,并进行了优化和改进,同时将 flang 作为默认的 Fortran 语言前端编译器。除支持 LLVM 通用功能和优化外,毕昇编译器还做了以下增强:
华为毕昇编译器架构师魏伟表示,毕昇编译器结合鲲鹏架构特点,针对不同场景,不同应用特点,使用不同的编译优化手段,通过深度优化指令编译,引入或增强优化算法等,发挥鲲鹏极致算力。
会上,魏伟还分享了毕昇编译器的几个优化技术,如:
效果方面,毕昇编译器与鲲鹏芯片协同,通过编译器技术充分发挥芯片的性能,提升鲲鹏硬件平台上业务的性能体验。基于鲲鹏上编译器优化,SPEC2017 性能比 gcc 平均高 20% 以上。
据魏伟介绍,毕昇编译器 1.3.3 版本将于今年 6 月 30 日正式发布,新版本支持基于 Structure Peeling 的特性增强及指针压缩优化,完善 Fortran2003/2008 语言特性,同时新增大量优化特性,增强与完善 Autotuner 特性,改善调优时间。
ExaGear 是华为自主可控的动态二进制翻译软件,通过利用动态二进制翻译技术,结合动态二进制优化能力,能够稳定支持无源码的 x86 和 ARM32 存量业务运行在鲲鹏平台上。具体实现上,ExaGear 将 guest 应用的 x86 或 ARM32 指令翻译成 ARM64 指令,并模拟 guest 应用调用的操作系统 API。
简单来说,ExaGear 是一种“中间件”软件解决方案,位于 guest 应用程序和 ARM Linux OS 之间。它主要具有以下几方面优势:
华为二进制翻译技术专家吕研冬博士表示,开发者使用 ExaGear,通过无源码应用迁移,大幅降低了存量业务部署门槛,让用户以最低的人力和时间成本平滑迁移业务,实现了应用业务快速迁移到鲲鹏。
四位华为技术专家为开发者们详细解读了鲲鹏一站式开发套件 DevKit 的的各大使能工具,与会者不仅了解了鲲鹏平台软件迁移过程中的关键技术,也收获了应用调优上的相应技巧。
围绕着硬件使能、基础使能、应用使能和开发使能层持续投入,华为通过全栈开放开源,构建鲲鹏计算生态。未来,华为将会把更多优秀的技术推向市场,为企业和开发者提供完备、易用和高效的工具链,加速鲲鹏生态繁荣和产业成功。
领取专属 10元无门槛券
私享最新 技术干货