第一系列,使用源代码迁移工具实现源码迁移
收藏回复举报
第一系列,使用源代码迁移工具实现源码迁移
新人帖
发表于2022-12-04 21:03:00
0 查看

软件迁移

迁移准备:收集软件栈信息,准备迁移环境 

信息收集 

软件信息:自研软件 ,开源软件 ,商业软件  ,开源软件 ,商业软件 ,软件信息 ,中间件/编译器 

硬件信息 :芯片/服务器信息 

迁移分析:分析软件栈,制定迁移策略

·开源软件:获取开源软件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文件


本帖最后由 匿名用户2023/11/20 17:27:12 编辑

我要发帖子