【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

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

  • 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 的的各大使能工具,与会者不仅了解了鲲鹏平台软件迁移过程中的关键技术,也收获了应用调优上的相应技巧。

 

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

公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2021-06-01 10:20895

评论

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

叮~点击定制你的数字车手证,参与挑战吉尼斯世界纪录™ 称号

亚马逊云科技 (Amazon Web Services)

Amaozn DeepRacer

Linux进阶新增用户组

flow

8月月更

Substrate 源码更新导读八月第1周: 新版事务化存储层启用默认模式, Polkadot v0.9.27发布

彭亚伦

Substrate polkadot 波卡

艺术与科技的狂欢,云端XR支撑阿那亚2022砂之盒沉浸艺术季

阿里云弹性计算

vr 视觉计算 云XR平台 沉浸式体验 GPU实例

怎样选择一个好的SaaS知识库工具?

Geek_da0866

MySQL数据指令

武师叔

8月月更

【Python】:如何处理异常报错?

翼同学

Python 编程语言 异常处理 8月月更 入门学习

crm系统哪家好?好用的crm管理系统推荐

优秀

CRM系统

Linux进阶删除用户组

flow

8月月更

【燃】是时候展现真正的实力了!一文看懂2022华为开发者大赛技术亮点

华为云开发者联盟

云计算 华为云 开发者大赛

秋招面试大厂总被刷下来,你这样做保准你事半功倍!

简说Linux内核

面试题 Linux服务器开发 C/C++后台开发 秋招+

不是吧,连公司里的卷王写代码都复制粘贴,这合理?

Liam

前端 代码 手写代码 代码阅读 写好代码

对数学直观、感性的认知是理解数学、喜爱数学的必经之路,这本书做到了!

图灵教育

高中数学

阿里云张新涛:支持沉浸式体验应用快速落地,阿里云云XR平台发布

阿里云弹性计算

视觉计算 云XR平台 沉浸式体验 GPU实例

进行知识管理的好处有哪些?

Geek_da0866

Linux进阶删除用户

flow

8月月更

作为开发人员,您应该熟悉的 7 个 JavaScript 概念

flow

8月月更

Linux进阶切换用户

flow

8月月更

Go-Excelize API源码阅读(五)—— Close()

Regan Yue

Go 开源 源码刨析 8月日更 8月月更

【Python】:如何利用Python实现文件操作

翼同学

Python 编程语言 文件操作 8月日更 入门学习

传统数据中台又贵又复杂?何不试一试永久免费的下一代数据中台

雨果

数据中台 DaaS数据即服务

说了半天跨平台,今儿咱就来跨跨!(完结篇)——Kubernetes上手实践

为自己带盐

Docker WSL2 k8s入门 签约计划第三季 8月月更

论文分享:「FED BN」使用LOCAL BATCH NORMALIZATION方法解决Non-iid问题

隐语SecretFlow

密码学和算法 机器学习/深度学习

用Python自动生成 图文并茂的数据分析 报告

程序员晚枫

Python pip Office 自动化办公

Linux进阶显示用户UID和GID

flow

8月月更

Wallys/QCA 9880/802.11ac Mini PCIe Wi-Fi Module, Dual Band, 2,4GHz / 5GHz advanced edition

wallys-wifi6

华为云全流程护航《流浪方舟》破竹首发,打造口碑爆款

华为云开发者联盟

云计算 后端 华为云 流浪方舟

体验远超Hue,这才是技术人员最喜欢的SQL工具

雨果

sql hue DaaS数据即服务

分贝通SAAS企业大数据体系建设经验分享

阿里云大数据AI技术

大数据

OpenHarmony——内核对象队列之算法详解(下)

OpenHarmony开发者

OpenHarmony

毕昇编译器优化:Lazy Code Motion

华为云开发者联盟

云计算 后端 表达式 毕昇编译器

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