写点什么

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

  • 2021-06-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-06-01 10:201368

评论

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

在华为P50 Pro中,听到AI异构通信的朱弦三叹

脑极体

字节大牛的1850页Leetcode刷题笔记外泄!用实力折服众人

Java 程序员 字节跳动 面试 算法

排查指南 | 两个案例学会从埋点排查 iOS 离线包

蚂蚁集团移动开发平台 mPaaS

mPaaS

进化十多年,四足机器人的网红属性有改变吗?

脑极体

牛掰!“基础-中级-高级”Java程序员面试集结,看完献出我的膝盖

Java 编程 面试 IT 计算机

markdown不支持代码块和表格,离开这里了

DBKernel

Go- 基本类型和运算符

HelloBug

Go 语言 布尔类型 基本类型和运算符 数字类型

浅谈云上攻防——Kubelet访问控制机制与提权方法研究

腾讯安全云鼎实验室

k8s 云安全

DevOps如何攻克研发流程六大痛点?

BoCloud博云

腾讯、阿里纷纷看好的NFT,能否成为拯救区块链的良药?

CECBC

坚持“一城市一矿山” 拾起卖争当循环产业领跑者

InfoQ 天津

Fil火爆的原因是什么?fil未来价格会多少钱一枚?

分布式存储 IPFS fil fil价格 fil行情

替换及重置Homebrew默认源以及M1安装

一个大红包

8月日更

凭借一份“面试真经pdf”,我四面字节跳动,拿下1-2级offer

Java 程序员 面试 后端 计算机

腾讯「小借条」引发的思考:区块链+的商业模式让各企业争先恐后的奥秘

CECBC

前端基础五之jQuery基础

ベ布小禅

8月日更

【六顶思考帽】学习心得

LeifChen

8月日更 六顶思考帽 创新思维

Activiti数据库表结构

金陵老街

Go 让 Apache APISIX 如虎添翼

API7.ai 技术团队

Apache 开源 插件 APISIX Go 语言

千字真言,字字珠玑,我的Golang学习笔记,赤诚分享

奔着腾讯去

Go 语言

字节架构师离职后,熬夜整理55W字Java面试手册,逆风翻盘进阿里

Java 编程 程序员 架构 面试

厉害!GitHub星标70K阿里大佬手写的Spring Boot实战手册真不错

Java 编程 程序员 架构 计算机

Apache APISIX 在 Airwallex 的应用 | 专访 Airwallex 技术平台负责人李杨

API7.ai 技术团队

Apache 开源 案例分享 api 网关 APISIX

netty系列之:netty中的懒人编码解码器

程序那些事

Java Netty nio 程序那些事

fil挖矿难度大不大?fil挖矿1T收益是多少?

fil挖矿难度大不大 fil挖矿1T收益是多少

fil挖矿必看!fil挖矿步骤有哪些?fil挖矿的效率如何?

分布式存储 IPFS fil fil挖矿

狂刷《Java权威面试指南(阿里版)》,冲击“金九银十”有望了

Java 程序员 架构 面试 大厂

DevOps 调查第十年,如何借助工具实现落地?

飞算JavaAI开发助手

DevOps 基础软件 自动化平台

「古老」茶产业碰上「年轻」区块链,能否擦出新火花?

CECBC

租房市场是流动的么?

escray

生活记录 8月日更 搜房记 租房

如何利用 SEI 实现音画同步?

ZEGO即构

音视频 音画同步 数据流录制 flv

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