软件迁移
迁移准备:收集软件栈信息,准备迁移环境
信息收集
软件信息:自研软件 ,开源软件 ,商业软件 ,开源软件 ,商业软件 ,软件信息 ,中间件/编译器
硬件信息 :芯片/服务器信息
迁移分析:分析软件栈,制定迁移策略
·开源软件:获取开源软件ARM64软件包或下载源码重新编译
·依赖组件:获取ARM64包或获取源码重新编译,闭源组件需升级替换ARM版本或替换类似组件库
·编译语言:C/C++/Go类编译语言重新编译
·解释语言:Java/Python等解释型语言替换ARM版本JDK或PVM虚拟机
·获取支持鲲鹏处理器或TaiShan服务器的软件版本
·如无法获取到兼容版本,需更换其它类似软件
·替换支持鲲鹏版本JDK,如OpenJDK
·使用操作系统自带的编译器或者下载源码重新编译,如GCC7.3
·普换支持鲲鹏操作系统,可使用智能计算产品兼容性查询助手查询
迁移分析:分析软件栈,制定迁移策略
修改点
·代码修改:源码中对指令集依赖的宏定义及builtin函数
·脚本修改:替换成支持鲲鹏的编译选项
·内联汇编:替换后重新编译,比如rdtsc指令等
·不兼容指令:如SSE Intrinsic类加速指令,需重新编写
·直接翻译:纯解释型语言开发的应用程序,代码无需修改,程序也不需要重新编译,如Java软件安装ARM版本JDK即可
·依赖库编译:如果软件含依赖库,则需要重新编译
·扫描依赖:扫描软件包的运行依赖库/可执行程序
·依赖库编译:编译型语言需重新编译,解释型语言基于对应的虚拟机运行
·软件打包:按照软件安装包原有结构重新制作成鲲鹏的软件包
编译型语言的代码迁移
·编译型语言:典型的如C/C++/Go语言,都属于编译型语言。编译型语言开发的程序在从×86处理器迁移到鲲鹏处理器时,必须经过重新编译才能运行。
·从源码到程序的过程:源码需要由编译器、汇编器翻译成机器指令,再通过链接器链接库函数生成机器语言程序。
C/C++代码需移植的原因:
·架构差异:X86和鲲鹏处理器(aarch64)属于不同的架构。
指令集差异:X86-复杂指令集,鲲鹏处理器-精简指令集。
·向量寄存器差异:X86和鲲鹏处理器使用向量寄存器不同,向量指令集也存在差异。
编译型语言构建的过程
C/C++代码工程主要包括两类文件:编译构建脚本、C/C++源码
可能涉及的移植项:
编译构建脚本类文件
编译选项的移植(指定数据类型、生成代码特性、目标执行器架构、处理器硬件加速功能等)
C/C++源码类文件
编译宏移植(用户自定义宏移植、编译器自定义宏移植)
编译器自带builtin函数移植
内联汇编移植
SSE intrinsic函数移植(MMX/SSE类函数移植、AVX函数移植)
过程:
1、获取源码:通过github或第三方开源社区获取
2、准备编译环境:安装编译器gcc等
3、使用源码中的CMakeLists.txt或configure脚本生成makefile
4.执行makefile编译可执行程序

5、替换依赖库:重编译或替换依赖X86平台的so库
6、将可执行程序安装部署到生产或测试系统
代码迁移——SSE intrinsic函数移植(SIMD技术简介)
SIMD(Single instruction Multi Data)是一种单指令处理多数据流的并行处理技术,能够在批量数据操作时进行向量化运算加速,具有较高的执行效率,在多媒体处理、矩阵运算等场景都有广泛的应用。
解释型语言代码的迁移
Java代码迁移:包含SO库调用的jar包迁移方法
重新编译SO库替换,完成迁移迁移步骤:
·Porting Advisor工具分析扫描jar包
·识别依赖SO库
·下载SO库源码
·安装maven
·安装GCC
·设置参数-fsigned-char
·编译aarch64版本SO库
·替换SO库
·重新打包jar文件
软件迁移
迁移准备:收集软件栈信息,准备迁移环境
信息收集
软件信息:自研软件 ,开源软件 ,商业软件 ,开源软件 ,商业软件 ,软件信息 ,中间件/编译器
硬件信息 :芯片/服务器信息
迁移分析:分析软件栈,制定迁移策略
·开源软件:获取开源软件ARM64软件包或下载源码重新编译
·依赖组件:获取ARM64包或获取源码重新编译,闭源组件需升级替换ARM版本或替换类似组件库
·编译语言:C/C++/Go类编译语言重新编译
·解释语言:Java/Python等解释型语言替换ARM版本JDK或PVM虚拟机
·获取支持鲲鹏处理器或TaiShan服务器的软件版本
·如无法获取到兼容版本,需更换其它类似软件
·替换支持鲲鹏版本JDK,如OpenJDK
·使用操作系统自带的编译器或者下载源码重新编译,如GCC7.3
·普换支持鲲鹏操作系统,可使用智能计算产品兼容性查询助手查询
迁移分析:分析软件栈,制定迁移策略
修改点
·代码修改:源码中对指令集依赖的宏定义及builtin函数
·脚本修改:替换成支持鲲鹏的编译选项
·内联汇编:替换后重新编译,比如rdtsc指令等
·不兼容指令:如SSE Intrinsic类加速指令,需重新编写
·直接翻译:纯解释型语言开发的应用程序,代码无需修改,程序也不需要重新编译,如Java软件安装ARM版本JDK即可
·依赖库编译:如果软件含依赖库,则需要重新编译
·扫描依赖:扫描软件包的运行依赖库/可执行程序
·依赖库编译:编译型语言需重新编译,解释型语言基于对应的虚拟机运行
·软件打包:按照软件安装包原有结构重新制作成鲲鹏的软件包
编译型语言的代码迁移
·编译型语言:典型的如C/C++/Go语言,都属于编译型语言。编译型语言开发的程序在从×86处理器迁移到鲲鹏处理器时,必须经过重新编译才能运行。
·从源码到程序的过程:源码需要由编译器、汇编器翻译成机器指令,再通过链接器链接库函数生成机器语言程序。
C/C++代码需移植的原因:
·架构差异:X86和鲲鹏处理器(aarch64)属于不同的架构。
指令集差异:X86-复杂指令集,鲲鹏处理器-精简指令集。
·向量寄存器差异:X86和鲲鹏处理器使用向量寄存器不同,向量指令集也存在差异。
编译型语言构建的过程
C/C++代码工程主要包括两类文件:编译构建脚本、C/C++源码
可能涉及的移植项:
编译构建脚本类文件
编译选项的移植(指定数据类型、生成代码特性、目标执行器架构、处理器硬件加速功能等)
C/C++源码类文件
编译宏移植(用户自定义宏移植、编译器自定义宏移植)
编译器自带builtin函数移植
内联汇编移植
SSE intrinsic函数移植(MMX/SSE类函数移植、AVX函数移植)
过程:
1、获取源码:通过github或第三方开源社区获取
2、准备编译环境:安装编译器gcc等
3、使用源码中的CMakeLists.txt或configure脚本生成makefile
4.执行makefile编译可执行程序
5、替换依赖库:重编译或替换依赖X86平台的so库
6、将可执行程序安装部署到生产或测试系统
代码迁移——SSE intrinsic函数移植(SIMD技术简介)
SIMD(Single instruction Multi Data)是一种单指令处理多数据流的并行处理技术,能够在批量数据操作时进行向量化运算加速,具有较高的执行效率,在多媒体处理、矩阵运算等场景都有广泛的应用。
解释型语言代码的迁移
Java代码迁移:包含SO库调用的jar包迁移方法
重新编译SO库替换,完成迁移迁移步骤:
·Porting Advisor工具分析扫描jar包
·识别依赖SO库
·下载SO库源码
·安装maven
·安装GCC
·设置参数-fsigned-char
·编译aarch64版本SO库
·替换SO库
·重新打包jar文件