星期

2020年09月09日

从应用迁移到平台微认证:山西鲲鹏训练营技术干货深度解读

2020-09-09 16:41:11 来源:互联网 阅读:-

从应用迁移到平台微认证:山西鲲鹏训练营技术干货深度解读

8 月 27 日,华为 DevRun 开发者沙龙来到太原,在山西转型综合改革示范区管委会一层西厅会议室举办了“山西鲲鹏开发训练营”活动。本次鲲鹏开发训练营是在山西省工信厅和山西综改示范区管委会创新发展部的指导下,由山西鲲鹏生态创新中心举办的鲲鹏技术赋能活动。训练营主要分为鲲鹏生态介绍、鲲鹏应用代码迁移指导、C/C++ 和 Java 代码迁移沙箱实践及微认证几大环节。

鲲鹏代码迁移指导

软件迁移是鲲鹏生态应用中的重头环节。本期训练营上,鲲鹏计算行业资深专家刘坤带来了鲲鹏软件迁移深度课程。

C/C++ 代码迁移

C/C++ 属于编译型语言,源码编译成可执行文件时要经过几个步骤:首先是预处理,处理一些头文件信息;然后生成预编译文件,再编译成汇编代码;之后经过汇编过程生成目标二进制文件,最后通过链接过程加入 SO 等链接,生成可执行文件。由于 x86 与鲲鹏的指令集架构、寄存器和扩展指令集(SIMD)等底层属性都不同,两者的汇编代码是不一样的,因此跨平台应用移植就需要编译迁移。

C/C++ 代码工程一般分为两类:编译构建脚本(如 makefile、Configure 等),和源码部分。前者迁移时主要涉及编译选项的变化,后者要涉及编译宏移植、builtin 函数、内联汇编、SIMD 等。实际应用迁移中不一定要触及所有层面,有些应用只需源码直接编译,或者修改一两个编译选项即可。应用迁移时首先获取源码,然后准备编译环境,生成 Makefile 文件,对依赖的 SO 库也做迁移处理,最后安装部署。

1. 编译选项移植。

例如应用编译成 64 位时,x86 平台上使用 m64 选项,鲲鹏上则是 mabi=lp64,根据编译文档将有架构差异的编译选项对等替换即可。

3.builtin 函数移植。

builtin 函数是编译器内部实现的函数,需要迁移的不多,主要关注 CRC32 校验值计算的几个函数。

5.SIMD 指令迁移。

SSE、AVX 都是 x86 平台的 SIMD 指令,SIMD 是单指令多数据流的简称,可用来加快计算速度。鲲鹏平台也有自己的 SIMD 指令,名为 Neon。x86 平台下的 SIMD 指令迁移到鲲鹏平台时,只需找到对应的函数替换实现即可。实践中一般不会逐条迁移,更推荐采用开源工程的移植途径。例如华为开源了一个工程,其中实现了大部分 SIMD 指令的替换。实践移植时,只需将开源头文件放到应用目录下引用即可无感知迁移,非常方便。

从应用迁移到平台微认证:山西鲲鹏训练营技术干货深度解读

开源工程无法覆盖到的特殊指令需要手动替换,此时就需要搜索代码的实现原理进行替换,这一步可以请华为的工程师帮助。

从应用迁移到平台微认证:山西鲲鹏训练营技术干货深度解读

为了简化应用迁移工作,华为还开发了 Porting Advisor 工具。它首先会扫描编译构建脚本源码,识别迁移可能涉及的问题;然后根据已有的迁移问题数据库对检测出来的问题给出指导,避免重复工作。前文提到的各类移植问题大都能在工具给出的迁移报告中有对应,按照指导操作即可。

Maven 软件仓构建

Maven 是常用的开源软件构建工具。Maven 仓库主要存放 jar 包,包括本地、远程和中央仓库三种类型。远程仓库是企业内部或第三方组织搭建的服务器,中央仓库是 Maven 团队自己设置的仓库。

Maven 仓库默认的 jar 包搜索顺序是本地 - 远程 - 中央,找到需要的 jar 包就拉取下来执行构建。但如果拉取下来的是包含 x86 平台依赖项的 jar 包,在鲲鹏平台上构建运行就会出错,还需要再分析扫描、打包编译等操作,过程比较繁琐。

从应用迁移到平台微认证:山西鲲鹏训练营技术干货深度解读

为了简化操作,华为开发了鲲鹏专属的 Maven 仓库,包含常见的 jar 包移植版本。开发人员只需将 Maven 仓库的 XMR 配置文件改为优先搜索鲲鹏 Maven 仓就能快速找到鲲鹏平台的对应 jar 包,精简迁移过程,减少 Java 迁移的工作量。

从应用迁移到平台微认证:山西鲲鹏训练营技术干货深度解读

以 Hive 编译实例为例,使用迁移工具扫描,发现应用中有四个带 x86 依赖项的 jar 包,那么配置好 Maven 仓之后就可以拉取对应的鲲鹏平台 jar 包,编译通过就可以完成移植了。

迁移沙箱实践和微认证

微认证

云端实验室有一个微认证模块,其中分为鲲鹏软件迁移与性能调优两门课程。购买认证后可以先学习课程、完成自测和实验,最后参加考试。考试需要实名认证,考试过程中还需要调用摄像头抓拍防止作弊,内容包括判断、单选和多选形式。通过考试后就会在线发放微认证证书。

从应用迁移到平台微认证:山西鲲鹏训练营技术干货深度解读

本期训练营涉及的相关社区资源链接汇总如下:

  • 内联汇编规则参考:https://gcc.gnu.org/onlinedocs/gcc/Using-Assembly-Language-with-C.html#Using-Assembly-Language-with-C

  • 不同架构下差异化 GCC 编译选项查询 (gcc7.3 为例):https://gcc.gnu.org/onlinedocs/gcc-7.3.0/gcc/Submodel-Options.html#Submodel-Options

  • 鲲鹏开发套件——Porting Advisor:https://www.huaweicloud.com/kunpeng/software/portingadvisor.html

  • 鲲鹏 Maven 仓链接:https://mirrors.huaweicloud.com/kunpeng/maven/

  • 鲲鹏社区:https://bbs.huaweicloud.com/forum/forum-923-1.html

  • 鲲鹏小智助手:http://ic-openlabs.huawei.com/chat/#/

  • 华为云端实验室:https://lab.huaweicloud.com/

  • 微认证:https://edu.huaweicloud.com/certifications/


推荐阅读:中国丽江网