写点什么

鲲鹏 DevKit:鲲鹏平台代码迁移利器|QCon

  • 2021-06-17
  • 本文字数:3382 字

    阅读完需:约 11 分钟

鲲鹏DevKit:鲲鹏平台代码迁移利器|QCon

用户将软件从 x86 平台移植到华为鲲鹏平台时,由于平台间体系结构和指令集各不相同,这时就需要利用跨平台工具链对源代码进行重新构建,这中间就会碰到一些棘手的问题,比如编译器无法直接跨平台编译源代码工程中平台相关的汇编代码,又或者当用户把应用迁移到鲲鹏平台上之后,鲲鹏多核的优势却无法充分发挥。因此,如何把 x86 源代码中的汇编代码高效识别并迁移到鲲鹏平台上,同时保证迁移后的性能,是鲲鹏生态建设和拓展过程中急需解决的一个技术课题。

 

InfoQ 记者有幸在QCon 2021 全球软件开发大会上,就这个问题采访到了华为鲲鹏编译技术专家乐永年,他的主要研究方向是鲲鹏平台的编译技术和应用性能优化。

 

以下是视频采访的全部内容,为方便读者查看,视频下方也附上了文字内容。

 

00:00 / 00:00
    1.0x
    • 3.0x
    • 2.5x
    • 2.0x
    • 1.5x
    • 1.25x
    • 1.0x
    • 0.75x
    • 0.5x
    网页全屏
    全屏
    00:00


    InfoQ:乐老师您好,欢迎来到 QCon 并接受我们的采访,请您先自我介绍一下吧。

     

    乐老师:好的,我的名字叫乐永年,加入华为之前我从事了 20 多年的软件开发工作,包括编译器、加速库以及软件的性能调优我都干过,目前我在华为鲲鹏担任编译器专家,从事鲲鹏开发套件相关的设计和架构工作。

     

    InfoQ:您选择加入华为鲲鹏主要有哪些方面的考虑?

     

    乐老师:刚才也提到了,我之前从事了相当多的软件开发工作。最近鲲鹏正在下一盘大棋,它实际上从硬件开放、从基础软件的开源、到面向生态开发者的DevKit开发套件以及鲲鹏应用使能套件BoostKit,全系列全栈投入,打造一个新的计算底座以及新的计算生态,让我觉得这里面有很多机会。我之前一直有一个梦想,我希望我做的产品能够为广大用户所使用,同时做的工作能够改变大众的生活,这样看的话鲲鹏对我来说是个理想的工作,能帮助我实现梦想,我也希望在鲲鹏这一块继续努力添砖加瓦。

     

    InfoQ:那您现在在鲲鹏做的事情主要有哪些技术挑战?

     

    乐老师:从大的角度来说,计算主要是通过算力来衡量,算力是数据处理的能力,它广泛存在于各个硬件设备里面,包括我们的手机,包括我们的 PC,包括我们的硬件服务器。从我们各领域角度来看,我们的数据中心,以及我们的高铁,行行业业方方面面都需要算力的支撑。但是随着最近大数据以及 AI 的蓬勃发展,原有的算力已经跟不上现有发展的需要,人民日益增长的物质文化需求满足不了了,所以我们需要从各个方面考虑,比如说我们的硬件,包括我们的硬件开放、软件开源,拧在一起,和我们的生态伙伴一起形成合力,打造新的生态,打造新的算力。这里有很多挑战,比如传统的摩尔定律,已经不能满足发展需要,原来的单一架构也不能满足算力的增长需要,这里我们要和生态同仁一起把这个新的生态、新的算力打造好。

     

    InfoQ:您在会议上演讲主题是关于跨平台迁移的,那么从其他平台到华为鲲鹏的跨平台迁移过程中,有哪些技术难点?你们是怎么解决的?

     

    乐老师:我们打造了 DevKit 这个面向开发者的开发套件,它提供了一站式全流程的工作方式,包含了迁移,包含了调优,也包含了编译以及诊断等一系列能力。在这里它主要解决两方面的问题。第一个是把应用从 X86 平台迁移到鲲鹏平台,同时保持迁移以后的性能,因此迁移在这里占了一个主要的地位。在这个迁移过程中有两套方案,针对不同的场景。一个就是有源码迁移,一个就是无源码迁移。

     

    对于有源码迁移,这里碰到的挑战不少。首先,应用的语言多种多样。其次,编译的选项很复杂,很多编译的选项跟平台密切绑定,密切相关。第三个点就是在构建脚本里,很多构建脚本是动态执行的,这些都需要在开发套件里,通过代码迁移工具插件得到一个很好的解决。比如说这里的代码迁移工具插件能够提供八种语言的支持,同时这里需要提供一个静态的扫描,把用户和平台相关的一些编译选项提示出来,让用户修改。我们也在攻关的动态执行技术,能够让构建脚本在静态的方式下得到解释执行,把平台相关的问题都找到,这些是有源码迁移的难点。

     

    对于无源码迁移也有不少挑战,比如说我们怎么保证迁移后的应用性能衰减尽量少,这里动态二进制的优化技术可以帮助我们把这个问题克服。

     

    InfoQ:华为鲲鹏原生编译器毕昇是你们的产品,在设计这个编译器的过程中,有哪些有意思的技术难点?

     

    乐老师:毕昇编译器是我们华为鲲鹏原生的编译器,它通过挖掘鲲鹏架构特点,提供最佳的代码质量,发挥鲲鹏原生性能优势,这里竞争力构筑的方向就是高性能。

     

    对于服务器而言大概有这几个模块,第一块是 CPU,第二块是内存,第三块是存储 I/O,第四块网络 I/O,这四块是密切相关的,对性能最有影响。编译器主要影响第一和第二这两个部件,一个是 CPU,一个是内存,围绕这两个部件,我们绞尽脑汁想各种各样优化的手段,我们这里的毕昇编译器的架构师魏伟为此头发也慢慢变白了。

     

    我这里具体展开讲一讲,对于 CPU 而言这里是比较传统的一种优化,对于鲲鹏特有的流水线架构,这里进行了指令调度优化。对于鲲鹏特有的 NEON 指令集,我们也开发了不少并行化和矢量化的优化技术,把 NEON 指令的能力给充分利用起来,这是传统优化。

     

    对于内存而言,它实际上越来越成为性能的瓶颈,因为 CPU 的速度越来越快,但是内存的访存速度还是赶不上 CPU 发展的速度,我们在这里也开发了很多的优化手段,比如说我们对数组进行重排,同时对结构体进行布局的优化,通过一系列内存排布的优化大幅提升应用性能,除此之外我们还对鲲鹏本身的架构有针对性地对内存缓存的预取做了调整和增强,通过这些手段从 CPU 和内存的角度发挥硬件本身的能力,大幅提升了软件的性能。

     

    InfoQ:刚才我们一直在谈性能的问题,我想深入了解一下,你们是怎么保证程序移植后的性能问题呢?在性能保障这方面有哪些措施?

     

    乐老师:鲲鹏 DevKit 主要的工作,或者业务基本面,就是保证应用迁移,其次是保证应用迁移以后的性能得到维持,现在你这个问题就是关于性能维持方面。

     

    性能维持肯定不能只是靠一两个手段,我们从全流程开发套件使用过程中,在每个阶段都要考虑性能,在代码迁移阶段,我们有加速库插件,它能够针对代码里面常用的热点函数,进行自动识别和智能联想,做到鲲鹏亲和加速库的函数的一键替换,这是第一个。

     

    其次是在编译阶段,我们这里还有鲲鹏原生的毕昇编译器,能够挖掘架构本身特点,把我们应用的性能潜力充分发挥出来,这是第二个。

     

    第三个是我们还有一个独特的专门针对性能的调优工具,叫做性能分析工具。这个性能分析工具能够提供场景化和全系统的分析能力。帮助用户查找应用中性能的瓶颈,提供专业化的性能调优的建议,这是第三点。

     

    第四点是我们还打造了一个新的工具,这个工具就是异常诊断工具,这个异常诊断工具能够帮助用户诊断常见的性能异常,同时快速定位性能问题。

     

    通过这四种工具在源码级别的优化,保证迁移以后的性能能够维持。

     

    对于二进制代码没有源码的情况,我们这里还提供了动态二进制的翻译工具,这个翻译工具里面包含了大量的动态优化,能够把迁移过程中的的性能损耗降到最小,保证应用迁移后性能得到维持。

     

    InfoQ:除了快速迁移汇编代码的技术,DevKit 在设计过程中还解决了哪些关键难题?

     

    乐老师:我们还有无源码迁移的动态二进制翻译技术。实际上这两个问题是有点类似的,对于有源码的应用而言,有源码的代码里它有汇编,需要通过指令的翻译把原有的汇编代码变成在鲲鹏上的汇编代码,是种语言到语言的翻译。这是汇编代码范畴,和它对应的是指令。一个二进制应用程序,它没有源代码了,这时候我怎么在鲲鹏平台上很好地执行这个应用,这里用了一个类似的技术,叫动态二进制翻译技术,这个动态二进制翻译技术就是把一条条指令拆解出来,去动态地解释和执行,当然这个解释执行过程中性能肯定会有损耗,而且损耗还不少,所以在这个过程中会有大量的动态二进制优化技术在里面起作用,把性能损耗降到最少,保证迁移以后用户还可以使用这个应用。到目前为止,我们能够把性能损耗控制在 15%到 20%以内。

     

    InfoQ:DevKit 在哪些领域和行业有成功的应用呢?

     

    乐老师:DevKit 实际上跟鲲鹏平台密切相关,我们的鲲鹏平台在政府、金融、交通、电力各个领域都有非常不错的进展。在这里 DevKit 作为面向开发者使能的重要抓手,对于整个鲲鹏平台的拓展起了一个非常大的促进作用。到目前为止,我们鲲鹏的 DevKit,已经有五万开发用户,有三百多个合作伙伴,和我们一起打造鲲鹏的算力新生态。同时,这里打个广告,我们还有鲲鹏应用创新大赛,所有的参赛团队都会使用鲲鹏开发套件,打造他们的参赛作品,进行应用迁移、开发、调优和调试。

     

    InfoQ:好的,谢谢乐老师。

    2021-06-17 16:084090

    评论

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

    阿里P7亲自讲解!整理几个重要的Android知识,最全Android知识总结

    欢喜学安卓

    android 程序员 面试 移动开发

    写代码这件事

    ES_her0

    28天写作 3月日更

    书单|互联网企业面试案头书之程序员软技能篇

    博文视点Broadview

    Spring AOP 执行顺序 && Spring循环依赖(面试必问)

    hepingfly

    Java spring aop 循环依赖

    一文搞懂PID控制算法

    不脱发的程序猿

    3月日更 PID 控制算法 智能控制 工业控制

    整理 自动备份MYSQL数据库shell脚本

    edd

    高并发HTTP请求实践

    高性能架构探索

    面试官再问你优先级队列,请把这篇文章丢给他

    Silently9527

    Java 优先级队列 二叉堆

    Hadoop之YARN的内部机制

    hanke

    大数据 hadoop 开源 YARN

    数据营销“教父”宋星十年倾心之作,让数据真正赋能企业

    博文视点Broadview

    集成融云 IMLib 时,如何实现一套类似于 IMKit 的用户信息管理机制

    融云 RongCloud

    利用深度元学习对城市销量进行预测 | AAAI 2021论文解读

    京东科技开发者

    零售 预测

    Ubuntu 日常系列:常用软件

    TroyLiu

    Linux ubuntu Ubuntu20.04

    Elasticsearch Segments Merging 磁盘文件合并

    escray

    elastic 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 3月日更

    AI开发效率低,你可以试试华为NAIE AutoML

    华为云开发者联盟

    华为 AI 框架 AutoML NAIE平台

    学无定法——知识反转效应

    Justin

    心理学 28天写作 游戏设计

    混合编程:如何用python11调用C++

    华为云开发者联盟

    c++ 编程 语言 python11 混合编程

    有状态容器应用,从入门到实践

    焱融科技

    Kubernetes 容器 云原生 焱融科技 分布式存储

    啥子叫递归哟!!!(阶乘)

    依旧廖凯

    28天写作 3月日更

    万物互联网络在企业中的价值和展望 | 趋势解读

    物联网

    52条SQL语句性能优化策略,建议收藏

    Java小咖秀

    MySQL 性能优化 后端 MySQL性能优化

    Navicat操作MySQL简易教程

    Simon

    MySQL navicat

    学以至用-从“0”到“1”设计千万级交易系统

    ninetyhe

    高可用 分布式系统 海量数据库的设计与实践 异步削峰

    在PostgreSQL中使用ltree处理层次结构数据

    PostgreSQLChina

    数据库 postgresql 开源 软件 开源社区

    【LeetCode】螺旋矩阵Java题解

    Albert

    算法 LeetCode 28天写作 3月日更

    解析分布式应用框架Ray架构源码

    华为云开发者联盟

    gRPC API 框架 ray 分布式应用框架

    镁信健康“互联网+医+药+险”模式能否打造出中国版联合健康?

    E科讯

    javascript中的Strict模式

    程序那些事

    JavaScript ES6 程序那些事

    初识Golang之聊聊类型

    Kylin

    3月日更 21天挑战 Java转go Go 语言

    用户行为分析模型实践(一)—— 路径分析模型

    vivo互联网技术

    大数据 数据分析 用户行为分析

    基于 SparkMLlib 智能课堂教学评价系统 - 系统实现(四)

    大数据技术指南

    大数据 spark 智能时代 28天写作 3月日更

    鲲鹏DevKit:鲲鹏平台代码迁移利器|QCon_文化 & 方法_张浩_InfoQ精选文章