【鲲鹏经典直播征文】体验鲲鹏代码迁移工具的极致效率
一、软件的平台相关性及迁移挑战
1.多样性算力成为下一代计算产业的主流趋势
在计算产业发展的这几十年来,算力的发展越来越趋向于开放、多样性。从最早的封闭模式的大/小型机时期,发展到相对不那么封闭,实现了软硬件解耦的X86时代,一直到到现在开放的多种算力结合的多样性时代,特别是ARM架构的异军突起,从端侧开始,慢慢形成了端、边、云协同的新形式。
2.ARM架构渐成服务器头部厂商的新选择
ARM架构的发展是大势所趋,ARM架构的服务器出现在了越来越多的应用场景中:
- HPC场景:Fujitsu Fugaku富岳ARM系统登顶TOP500超算榜首;欧洲处理器计划(EPI)推动融合ARM、RISC-V技术的本土首款百亿亿级超算处理器落地;
- 公有云场景:亚马逊、微软、华为云等TOP云服务厂商上线基于ARM的Web、大数据等主流公有云服务;
- 数据中心场景:基于华为(64核)、Ampere ( 80核)、Marvell ( 96核)等多核高并发ARM架构的服务器成熟商用;
3.软件-语言-平台兼容性
现在在X86平台上已经有海量的软件,常用的开发语言也有几十种之多,那么,在把软件从X86平台迁移到鲲鹏平台的时候,会有哪些兼容性问题呢?如何解决?
一般来说,把语言类型分为三种,一种是编译型、一种是解释型,另一种是专有型,如下图所示:
从上图可以看出,对于编译型语言开发的应用或依赖文件,需要进行软件迁移并重新编译,具体来说对于依赖文件,可以将x86平台的依赖文件用鲲鹏对应依赖文件替代,再重新编译或打包;对于源码及编译脚本中涉及平台相关内容,修改为鲲鹏平台兼容代码,再用对应编译器重新编译。
4.软件迁移策略
根据上一节所示的平台兼容性,可以把软件迁移策略分为解释型语言、编译型语言、Windows开发语言3类,它们具体的迁移策略如下图所示:
(1)解释型语言
JAVA、Python等解释型语言,因为语言本身支持跨平台,迁移起来最简单,找到合适的解释器,只要运行环境没问题,就可以直接使用。当然,有些解释型语言的软件还有对编译型语言的调用,比如so库等,这些被调用的文件也需要找到合适的鲲鹏架构下的替代文件。
(2)编译型语言
C/C++/Fortran/GO等编译型语言,需要根据软件本身的性质来选择合适的迁移策略。
- 开源软件:可以和社区协同,获取源代码,然后执行迁移、重新编译的流程,获得在鲲鹏计算平台运行的软件。
- 自研软件:自己开发的软件,可以通过商业合作的形式进行迁移,或者直接自己迁移。
- 商业闭源软件:如果可以通过商业合作的形式,就通过商业合作;如果不能进行商业合作,可以选择替代的其他软件;对于性能要求不高的,也可以通过动态翻译工具Exagear在鲲鹏计算平台上直接运行,如果性能要求较高,可以在X86平台上部署这些软件,形成鲲鹏平台和X86平台的混合部署。
(3)Windows开发语言
因为鲲鹏计算平台目前尚不支持Windows,对于这种开发语言开发的程序,可以通过混合部署的模式部署到X86平台上。
5.鲲鹏处理器与x86处理器的架构和指令差异
鲲鹏架构和X86架构在多个层面都有较大的差异,以一个简单的加法为例,如下图所示:
可以看到,两者在指令长度、指令操作符和操作数、汇编指令含义等都存在非常大的不同。
两者的不同还体现在下面的几点:
- char数据类型的符号
- 内嵌汇编指令重写
- 双精度浮点型转整形溢出处理
- -m64编译选项的替换
- 宏定义
- Built-in函数
- SSE Intrinsic
在进行迁移的时候,这些方面都需要考虑到,在鲲鹏平台上找到相应的解决方法,然后进行替换。
6.软件迁移面临的挑战
因为X86和鲲鹏架构之间的巨大差异,导致迁移工作面临较大的挑战,如图所示:
不管是迁移的可行性分析、实际的迁移,还是迁移后的性能调优,都存在着门槛高、准确率低、周期长、人工分析困难等情况。
二、鲲鹏开发套件全景介绍
针对软件迁移存在的这种痛点,华为推出了鲲鹏DevKit一站式开发套件,帮助开发者完成软件的代码迁移、编译调试、性能调优、异常诊断。
鲲鹏开发套件支持浏览器和IDE插件两种模式,对于轻度使用者可以使用浏览器模式,重度使用者可以使用IDE模式,在编码的时候就可以随时在IDE里使用鲲鹏开发套件的功能。鲲鹏开发套件安装的时候需要服务器,如果没有服务器的话,可以免费申请鲲鹏开发套件专属远程云环境。
1.IDE插件
鲲鹏开发套件的插件主要支持Visual Studio Code和IntelliJ IDEA两种开发工具,以Visual Studio Code为例,在扩展:商店里输入“kunpeng”可以找到鲲鹏开发套件的插件“Kunpeng DevKit”,如图所示:
单击“安装”按钮可以一键安装所有的4个扩展包(也可以根据需要安装特定的扩展包):
- 鲲鹏代码迁移插件
鲲鹏加速库插件
鲲鹏编译插件
鲲鹏性能分析插件
2.一键式安装&链接服务器端工具
工具支持一键式部署服务端工具,以代码迁移工具为例,步骤如下:
首先进入配置远端服务器窗口:
然后单击“点击此处部署”超链接,打开安装代码迁移工具的窗口:
输入目标服务器信息,单击“检测连接”按钮,检测通过后,“开始部署”按钮变成有效状态,单击该按钮,即可启动工具部署流程,安装终端的提示操作即可:
部署成功后,再配置远端服务器,即可完成服务器的连接。
三、代码迁移工具链解读
代码迁移工具主要包括5大功能:软件迁移评估、源码迁移、软件包重构、专项软件迁移、增强功能。
1.软件迁移评估
- 检查用户软件包(RPM、DEB、TAR、ZIP、GZIP等文件)中包含的SO(Shared Object)依赖库和可执行文件,并评估SO依赖库和可执行文件的可迁移性。
- 检查用户Java类软件包(JAR、WAR)中包含的SO依赖库和二进制文件,并评估SO依赖库和二进制文件的可迁移性。
- 检查指定的用户软件安装路径下的SO依赖库和可执行文件,并评估SO依赖库和可执行文件的可迁移性。
2.源码迁移
- 检查用户C/C++/Fortran软件构建工程文件,并指导用户如何迁移该文件。
- 检查用户C/C++/Fortran/Python软件构建工程文件使用的链接库,并提供可迁移性信息。
- 检查用户C/C++/Fortran/Python软件源码,并指导用户如何迁移源文件。其中,Fortran源码支持从Intel Fortran编译器迁移到GCC Fortran编译器,并进行编译器支持特性、语法扩展的检查。
- 检查用户Python程序通过ctypes模块加载的SO文件的兼容性。
- x86汇编指令转换,分析部分x86汇编指令,并转换成功能对等的鲲鹏汇编指令。
源码分析完毕后会生成分析报告:
分析报告分为迁移报告和源码迁移建议两个部分,默认显示迁移报告。
迁移报告分为5个区域,分别解释如下:
- 配置信息:记录被扫描分析的源码路径、是否增强检查、编译器版本,构建工具,编译命令,目标操作系统,目标系统内核版本等信息。
- 迁移统计信息:分为两个部分,一部分是依赖文件信息,包括需要迁移的依赖文件总数、可兼容替换的数量、待验证替换的数量;另一部分是源码迁移统计,包括需要的人月、源文件数及代码行数。
- 与架构相关的依赖库文件:显示依赖文件信息以及处理建议,在“分析结果”列可以看到是否已经有兼容鲲鹏平台的替换文件,如果有的话可以在“处理建议”列单击“下载”超链接下载适配好的依赖文件。
- 需要迁移的源文件:显示需要迁移的源文件个数、具体文件信息和需要迁移的代码行数,在每一个文件的操作列,可以单击“查看建议源码”超链接来查看修改建议。
- 下载报告:可以下载.CSV格式和.html格式的报告,单击对应的按钮即可以下载。
源码迁移建议页面分为两个部分,左侧是文件列表,右侧是选定源码文件的内容及迁移建议。
在文件列表栏选中文件,在原始源代码区域会用红色波浪线标出需要修改的代码,把鼠标放在待修改代码上面,会弹出修改建议,可以按照修改建议自动或者手动修改代码。
3.软件包重构
在鲲鹏平台上,分析待迁移软件包构成,重构并生成鲲鹏平台兼容的软件包,或直接提供已迁移了的软件包。
软件包重构流程一般如下:
步骤1:准备要重构的软件包;
步骤2:评估迁移需要重构的软件包;
步骤3:分析软件包,生成分析报告,下载可兼容替换的jar包;
步骤4:进入软件包重构界面,上传要重构的软件包;
步骤5:配置依赖文件;
步骤6:执行软件包重构;
步骤7:下载重构后的软件包;
4.专项软件迁移
专项软件迁移提供开源软件迁移、调优的工具化解决方案。用户可以按照解决方案的粒度选择相应的软件,进行工具化快速迁移软件。专项软件迁移包含软件下载、修改、编译和软件包构建功能,需要用户在基于鲲鹏的服务器环境使用。
5.增强功能
鲲鹏代码迁移工具提供下面三种增强功能:
- 64位运行模式检查
对用户C/C++软件从32位模式迁移到64位模式进行检查。工具强制以64位模式编译用户软件,并通过编译选项发现从32位模式迁移到64位模式的必要修改,并提示用户进行进一步检查。
- 结构体字节对齐检查
- 内存一致性检查
对用户软件迁移到鲲鹏平台可能存在的内存一致性问题进行检查、修复。自动修复工具需要更新用户使用的GCC编译器,随后在用户软件的编译过程中自动完成内存一致性问题的修复。
四、加速库
为了充分发挥鲲鹏CPU硬件设计的优良性能以及ARM指令本身的优势,华为推出了一系列基于硬件加速和软件指令加速的鲲鹏加速库,这些加速库以基础库的形式提供,兼容开放的接口,在保证上层应用基本不需要更改代码的前提下,为鲲鹏平台的应用提供更强的能力。
鲲鹏加速库插件即插即用,支持从Visual Studio Marketplace及JetBrains Marketplace下载并在线安装插件客户端,能够扫描代码文件中可使用鲲鹏加速库优化后的函数或汇编指令,生成可视化报告;编码时能够自动匹配鲲鹏加速库函数字典,智能提示、高亮、联想字典中可以替换的库和函数。
五、编译器
由于鲲鹏处理器与x86处理器的指令差异,编译型代码/软件包从x86迁移到鲲鹏处理器时,通常需要重新编译才能运行;为解决这种问题,鲲鹏提供一键式部署的GCC编译器及包含毕昇编译器、JDK在内的全套编译软件,发挥鲲鹏平台极致性能,使能开发者高效创新。
- 毕昇编译器:基于开源LLVM开发,并进行了优化和改进,同时将Flang作为默认的Fortran语言前端编译器,是针对鲲鹏平台的高性能编译器;
- 毕昇JDK:基于OpenJDK开发的一款高性能JDK,可用于生产环境;
- 鲲鹏GCC:基于开源GCC开发的编译器工具链(包含编译器,汇编器,链接器);
六、亮点与优势
鲲鹏开发套件具有入门简单、自动化、高效、便捷、可视化的优势。
1.入门简单
不改变开发者开发习惯,快速上手。
2.自动化
迁移内容自动识别,汇编代码自动翻译。
3.高效
代码修改建议自动生成,开发效率倍增。
- 识别C/C++/Fortran/汇编源代码,提供修改建议;Make、CMake、Automake编译选项、编译宏的解析及迁移建议;
- 支持100%Intrinsic函数转换(6000+个),包括MMX 、SSE及AVX Intrinsic 等;
- 快速64位检查与结构体字节对齐修改建议;
4.便捷
远程调测,提供更便捷的调测能力。
5.可视化
全场景性能分析可视,性能瓶颈一目了然、调优尽在掌握。
详细的鲲鹏开发套件介绍见官网:https://www.hikunpeng.com/zh/developer/devkit
- 点赞
- 收藏
- 关注作者
评论(0)