写点什么

多样性计算时代,鲲鹏迁移和调优关键技术全解读

  • 2021 年 6 月 01 日
  • 本文字数:3731 字

    阅读完需:约 12 分钟

多样性计算时代,鲲鹏迁移和调优关键技术全解读

当前,千行百业数字化转型步伐加快,对算力提出了更高的要求,与此同时,行业应用的多样性也带来了数据和算力的多样性。

 

在此背景下,华为通过构建鲲鹏计算产业,拥抱多样性计算新时代。围绕“硬件开放、软件开源、使能伙伴、发展人才”的策略,鲲鹏生态已交出了一份高分答卷。不过当前,鲲鹏生态发展仍面临诸多挑战。其中,应用软件的迁移尤为关键。为了帮助开发人员更快熟悉鲲鹏平台,更好地完成基于传统架构的应用服务迁移工作,鲲鹏发布了开发使能套件 DevKit,提供覆盖代码扫描、迁移、编译、调优等研发全流程。

 

在 2021 年 5 月 29 日 QCon 2021 北京站上,华为鲲鹏编译技术专家乐永年作为“鲲鹏平台软件迁移和调优实践”专题出品人兼讲师,携手薛永辉、魏伟、吕研冬博士三位华为技术专家为开发者深度解读鲲鹏一站式开发套件 DevKit 的工具套件和关键技术。

鲲鹏 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 通用功能和优化外,毕昇编译器还做了以下增强:

 

  1. 高性能编译算法。编译深度优化,增强多核并行化,自动矢量化等,大幅提升指令和数据吞吐量。

  2. 加速指令集。结合 NEON/SVE 等内嵌指令技术,深度优化指令编译和运行时库,发挥鲲鹏架构最佳表现。

  3. AI 迭代调优。内置 AI 自学习模型,自动优化编译配置,迭代提升程序性能,完成最优编译。

 

华为毕昇编译器架构师魏伟表示,毕昇编译器结合鲲鹏架构特点,针对不同场景,不同应用特点,使用不同的编译优化手段,通过深度优化指令编译,引入或增强优化算法等,发挥鲲鹏极致算力。

 

会上,魏伟还分享了毕昇编译器的几个优化技术,如:

 

  • 循环优化。循环优化是编译器中极为重要的一个优化手段,具有极为广泛及多样化的优化措施。编译器通过不同的优化方法来提高循环的性能。

  • 结构体内存布局优化。基于全程序优化来提高缓存利用率,优化的主要手段是将结构体数组转换为数组结构体。

  • 结构体指针压缩优化。通过将指针成员由 64bits 压缩至 32bits,减小每个结构体 node 的内存体积。这一概念同结构体内存布局优化有些类似,目的都是改善访存局部性,提升缓存利用率。

  • 自动向量化。毕昇编译器重点优化了循环矢量化及 SLP 矢量化,充分保持程序局部性,高效提升计算密集型场景的性能。

  • Pipeline 优化。编译器在做后端基于硬件流水线的优化,在特定场景下可以带来很多收益。

  • Autotuner。其引入了基于 ML 的自动搜索技术,可以节省调优时间。

 

效果方面,毕昇编译器与鲲鹏芯片协同,通过编译器技术充分发挥芯片的性能,提升鲲鹏硬件平台上业务的性能体验。基于鲲鹏上编译器优化,SPEC2017 性能比 gcc 平均高 20% 以上。

 

据魏伟介绍,毕昇编译器 1.3.3 版本将于今年 6 月 30 日正式发布,新版本支持基于 Structure Peeling 的特性增强及指针压缩优化,完善 Fortran2003/2008 语言特性,同时新增大量优化特性,增强与完善 Autotuner 特性,改善调优时间。

ExaGear:动态二进制翻译技术原理及应用实践

 

ExaGear 是华为自主可控的动态二进制翻译软件,通过利用动态二进制翻译技术,结合动态二进制优化能力,能够稳定支持无源码的 x86 和 ARM32 存量业务运行在鲲鹏平台上。具体实现上,ExaGear 将 guest 应用的 x86 或 ARM32 指令翻译成 ARM64 指令,并模拟 guest 应用调用的操作系统 API。

 

简单来说,ExaGear 是一种“中间件”软件解决方案,位于 guest 应用程序和 ARM Linux OS 之间。它主要具有以下几方面优势:

 

  1. 代码 0 修改。直接加载被翻译执行的二进制应用程序文件,用户无需重新编译或修改二进制应用程序,无需对业务应用进行额外的二次开发,最小化业务迁移成本。

  2. 业务无损。经过翻译执行的业务逻辑与原生业务行为一致,保证翻译过程自身透明性,翻译工具无需解释业务逻辑,不直接处理用户数据。

  3. 性能领先。集成高性能编译技术,实现一种指令集到另一种指令集的跨指令体系结构实时转换,识别热点指令并在线深度优化热点指令翻译过程,达到指令翻译性能业界领先。

 

华为二进制翻译技术专家吕研冬博士表示,开发者使用 ExaGear,通过无源码应用迁移,大幅降低了存量业务部署门槛,让用户以最低的人力和时间成本平滑迁移业务,实现了应用业务快速迁移到鲲鹏

 

四位华为技术专家为开发者们详细解读了鲲鹏一站式开发套件 DevKit 的的各大使能工具,与会者不仅了解了鲲鹏平台软件迁移过程中的关键技术,也收获了应用调优上的相应技巧。

 

围绕着硬件使能、基础使能、应用使能和开发使能层持续投入,华为通过全栈开放开源,构建鲲鹏计算生态。未来,华为将会把更多优秀的技术推向市场,为企业和开发者提供完备、易用和高效的工具链,加速鲲鹏生态繁荣和产业成功。

2021 年 6 月 01 日 10:20505

评论

发布
暂无评论
发现更多内容

带你换个角度理解图卷积网络

华为云开发者社区

神经网络 卷积神经网络 图神经网络 卷积 图网络

Go 学习笔记之 方法

架构精进之路

Go 语言 7月日更

对话系统简介与OPPO小布助手的工程实践

OPPO小布助手

人工智能 对话 智能助手 智能对话

区块链的风险与防范

CECBC

初学汇编

若尘

汇编 汇编语言 7月日更

智汇华云 | kata container virtiofs测试和技术分析

华云数据

IPFS挖矿值得投资吗?IPFS挖矿前景如何?

Git工作流中常见的三种分支策略:GitFlow、GitHubFlow和GitLabFlow

华为云开发者社区

git 软件开发 工作流 GitFlow GitHubFlow

北鲲云超算平台解决生物科学领域困境,探索更多可能性

北鲲云

Serverless 时代下大规模微服务应用运维的最佳实践

阿里巴巴中间件

云计算 Serverless 微服务 云原生 中间件

极狐 GitLab 初探(上)

极狐GitLab

ci DevOps gitlab CD 敏捷开发管理

中国移动5G消息开发者社区强势助力,创客马拉松大赛5G消息专题赛重磅来袭!

5G消息

开发者 开发者社区 应用开发 开发者大赛 5G消息

对产品来说,颜值、体验是不是很重要?

石云升

用户体验 职场经验 7月日更

《面试补习》- 你来说说什么是限流?

九灵

Java 面试 分布式 sentinel 限流

官宣!DataPipeline2021数据管理与创新大会将于7.29北京重装开启!

DataPipeline数见科技

大数据 数据融合 数据管理

工卡融合柔性屏,办公效率和信息安全性可能会有质的飞跃?

船医特拉法尔加

mysql常用命令

阿呆

mysql命令

IPFS算力挖矿排行榜,IPFS挖矿公司排行榜

图扑软件受邀核电数字化技术大会,技术创新助力行业革新

一只数据鲸鱼

数据可视化 核电 核电站 数字大会

通证经济最核心的价值,就是带来了流动性的质变

CECBC

自学编程找工作!46道面试题带你了解中高级Android面试

欢喜学安卓

android 程序员 面试 移动开发

(ROYOLE)全球首款柔性屏开发套件,柔宇RoKit终于来了!

Vsir·横磨剑

呱呱乐园软件开发|呱呱乐园系统APP开发

超视频化到来,你能看见什么?

阿里云视频云

阿里云 计算机视觉 音视频 视频 视频云

万万没想到,低功耗也会烧毁元器件?

不脱发的程序猿

嵌入式 电路设计 低功耗 ADI 稳压器

数字人民币热度不断攀升 多地再迎大规模试点

CECBC

揭秘百度微服务监控:百度游戏服务监控的演进

百度Geek说

微服务 大前端 游戏

手写QuickSort算法

实力程序员

程序员 算法 成长 C语言

数据驱动决策,可视化推动传统电力发展革命史?

一只数据鲸鱼

数据可视化 智慧能源 水力发电 智慧水利

自学者福利!BAT常见的20道Android面试题详解

欢喜学安卓

android 程序员 面试 移动开发

架构之路,道阻且长

長庚

多样性计算时代,鲲鹏迁移和调优关键技术全解读_文化 & 方法_凌敏_InfoQ精选文章