实验:通过鲲鹏开发套件实现源码迁移
一、实验目的
1.基于华为云弹性云服务器实现从x86平台到kunpeng平台的源码迁移
2.掌握鲲鹏代码迁移工具中源码迁移功能的操作流程
3.完成Megahit项目代码的调优实践
二、实验内容
1.安装工具
1.1登录弹性云服务器ECS
LANG=en_us.UTF-8 ssh root@EIP(将EIP改为你的公网IP)
1.2准备工具源码包
·在Terminal窗口中执行以下命令下载源码包:
Wget https://mirror.iscas.ac.cn/kunpeng/archive/Porting_Dependency/Packages/Porting-advisor_2.3.0_linux-Kunpeng.tar.gz
·执行以下命令解压源码包:
tar -zxvf Porting-advisor_2.3.0_linux-Kunpeng.tar.gz
1.3安装porting工具
·执行以下命令进入已解压源码包目录:
cd Porting-advisor_2.3.0_linux-Kunpeng
·执行以下命令安装porting工具:
./install web
·安装成功如下图所示:
1.4安装工具cmake
·执行以下命令下载cmake工具:
cd ~ && wget https://sandbox-experiment-resource-east-1.obs.cn-east-3.myhuaweicloud.com/code-migration-cn-east-3/cmake-3.3.2.tar.gz
·下载成功如下图所示:
·执行以下命令解压cmake安装包:
tar -xzvf cmake-3.3.2.tar.gz
·执行以下命令编译cmake:
cd cmake-3.3.2 && ./configure
·编译成功如下图所示:
·依次执行以下命令安装cmak工具:
gmake
make install
·安装成功如下图所示:
2.配置VS Code环境
2.1配置远端服务器连接
·点击打开“Visual Studio Code”,打开后点击鲲鹏Porting工具图标,
点击“Configure Server”配置远端服务器连接,如下图所示:
(1) “Ip Address”:填写1.1步骤查看到的公网IP;
(2) “HTTPS Port”:默认(8084);
说明:云服务器的弹性公网IP地址,可以通过鼠标移动到云桌面浏览器页面中左侧菜单栏,
点击“服务列表”->“计算”->“弹性云服务器ECS”进入服务器列表,进行查看并复制;
(3)“Service Certificate Settings”,可选择“Trust the current service certificate”。填写完成点击“Save”,保存成功后如下图所示:
注:若点击Save后,出现如下提示:
则需要手动修改VSCode的代理服务器,点击settings->Application->proxy
“Proxy Strict SSL”选项不勾选,“Proxy Support”设置项,下拉框内选择“off”,然后再配置服务器页面重新点击保存即可,如下图所示:
2.2点击“Log In”,创建用户“portadmin”,密码自定义,如vcIL6Koun4LstG7o,如下图所示:
设置完成点击“OK”完成远端服务器连接配置。
3.源码准备
·Terminal窗口执行以下命令进入鲲鹏代码迁移工具源码文件存放路径:
cd /opt/portadv/portadmin/sourcecode/
·执行以下命令下载Megahit源码:
git clone https://codehub.devcloud.cn-north-4.huaweicloud.com/experiment00001/megahit.git
·下载成功如下图所示:
·执行以下命令将代码进行合并:
cd megahit && git submodule update --init
·执行以下命令创建构建文件夹并进入:
mkdir build && cd build
·执行以下命令生成Makefile文件:
cmake .. -DCMAKE_BUILD_TYPE=Release
·执行成功如下图所示:
·执行以下命令修改megahit目录群组:
cd ../ && chown -R porting:porting /opt/portadv/portadmin/sourcecode/* && ll ./
(说明:porting工具的待扫描的源码目录群组必须为porting才能扫描。)
4.源码迁移
4.1代码扫描工具扫描源码并迁移
·在打开的“Visual Studio Code”中,点击“Log In”输入账号“portadmin”密码(2.2步骤创建的连接密码)如:vcIL6Koun4LstG7o,
进行连接工具登录,如下图所示:
·登录成功,选择“Source Code Porting”,手动输入选择“megahit/build”源码包路径 ,其他参数默认,如下图所示:
(说明:若登录成功时有弹窗点击“OK”即可)
·点击“Analyze”分析成功如下图所示:
分析完成后,点击文件列表, 查看文件中需要迁移的文件,点击“View Suggestion Code”查看具体文件的迁移建议。
·修改文件“megahit_core_popcnt.dir/flags.make”,鼠标拖动到待修改处(向右拖动到当前代码末尾即可看到), 可以看到一处待修改点,如下图所示:
·删除提示修改代码,修改完成“Ctrl+s”保存该文件,如下图所示:
·修改文件“megahit_core.dir/flags.make”,鼠标悬停到代码上, 可以看到修改建议,如下图所示:
·根据建议提示Kunpeng platform 不支持BMI2和POPCNT指令,手工修改代码,删除指令“-mbmi2”和“-mpopcnt”指令(向右拖动到当前代码末尾即可看到),修改完成“Ctrl+s”保存该文件如下图所示:
·修改文件“cpu_dispatch.h”,光标悬停到代码上, 可以看到修改建议,如下图所示:
·分别在每部分需要修改的代码,鼠标悬停后出现“Quick Fix…”,选择“Replace the code with the suggested code”点击进行快速修改,如下图所示:说明:“Quick Fix…”未出现时鼠标滚轮向下滑动即可看到。
·修改完成去掉修改代码注释,“Ctrl+s”保存该文件,最终如下图所示:
·Terminal窗口执行以下命令将“KunpengTrans.h”头文件添加到目录下到/opt/portadv/portadmin/sourcecode/megahit/src/utils:
cp /opt/portadv/tools/inline_asm/config/KunpengTrans.h /opt/portadv/portadmin/sourcecode/megahit/src/utils/
4.2重新编译并验证
·在Terminal窗口执行make命令:
cd /opt/portadv/portadmin/sourcecode/megahit/build && make
·报错如下图所示:
·执行以下命令修改
“/opt/portadv/portadmin/sourcecode/megahitkmlib/kmrns.h”:
vim /opt/portadv/portadmin/sourcecode/megahit/src/kmlib/kmrns.h
“<x86intrin.h>”为x86平台的系统头文件,在arm平台上没有此系统头文件。点击键盘“i”命令进入文本输入模式,注释如下图所示代码:
(说明:“#include <x86intrin.h>”改为“//#include <x86intrin.h>”。)
修改完成,点击键盘“ESC”退出输入模式,输入以下命令后回车保存:
:wq
再次执行make命令:
make
编译通过如下图所示:
编译完成执行以下命令进行验证:
make simple_test
(说明:Make simple_test里用到的.fa文件是github上下载软件包的时候就自带了无需额外下载。)
·运行成功如下图所示:
至此源码成功迁移。