为什么必须将代码从x86迁移到ARM,这篇文章给你答案( 四 )

SSEintrinsic函数移植(SIMD技术):Intel的SIMD扩展指令统称SSE,主要分为三类,MMX是64位寄存器,SSE到SSE4是28位的,三是AVX256和AVX512 。 鯤鹏基于SIMD的技术发展比较成熟,现在有些基于开源量的NEON库主要是在图象处理和视频处理层面 。

SSEintrinsic函数移植(MMX/SSE):针对MMX指令,x86上用的是-m64的向量做加法运算,对应到鲲鹏上是int32×2然后再做加法运算,类似于常用的C函数规则;针对SSE指令,从内存中加载4个单精度浮点数据到寄存器,x86是load,对应到鲲鹏用的是vld1q 。

SSEintrinsic函数移植(AVX):以AVX指令使用了256位寄存器运算为例,向量A和向量B中分别存储了8个单精度浮点型(32位),对应到鲲鹏处理器上,使用128位寄存器实现SIMD(SingleInstructionMultiData)进行计算 。

尽管解释性语言难度降低,但Java、Python代码迁移过程中同样有一些问题需要注意 。


为什么必须将代码从x86迁移到ARM,这篇文章给你答案

----为什么必须将代码从x86迁移到ARM , 这篇文章给你答案//----

如上图所示,Java想要进行迁移的话,首先需要安装运行环境JDK,Java源码通过Java编译器之后就会生成一个Java的字节码,这时候可能jar包会有一些SO库的依赖,那就需要链接进行打包 。

这整个的过程,存在迁移修改点的地方有二,一是JDK的安装,迁移过来推荐使用华为的JDK或者OpenJDK;二是对SO库这个二进制库的依赖,如果你是在x86下编译的,毫无疑问,这在鲲鹏下面是没办法进行运行的,所以你需要拿到相应的源码或者找到aarch64的SO库来进行替换,最后进行重新打包 。

为什么必须将代码从x86迁移到ARM,这篇文章给你答案。再来看Python源码的迁移,其实与Java很类似,也是需要从编译环境和SO库两大方面入手修改 。 环境上推荐使用A32,Python3你也可以通过样本安装,也可以通过源码安装;SO库有多种类型,但对于各种方式的SO库,最后都是对应为一个SO,定义为SO库,需要的步骤也都是一致的,即装配环境、重新编译、重新替换 。

不同的地方只是前面安装的是Python的运行环境 。 Python源码同样通过解释器生成一个字节码,这时候可能我们会依赖外部的一些Pythonimport模块进来,这些模块里面可能有一些SO库,Python解释器的解释执行后就是部署运行了 。

相对于C++来说,Java/Python的迁移点并不是太多,总结下来,主要需要注意两点:

编译器包括解释器的安装、迁移,这里有两种方式,方式一是通过YAM源的方式进行安装,方式二是找到源码进行编译重新安装 。

x86依赖SO库的情况下,需要找到SO库相应的源码,进行重新编译后实现替换 。

写在最后

“拿华为的话说,就是自己的降落伞自己先跳 。 长虹大数据平台的规模比较大,有一百多个服务器,原来是一个PB级的数据存储,涉及到的整个生态组件有20多个,我们将原来存在的1700多万的终端业务迁移到基于鲲鹏的大数据计算平台,耗时近5个月 。 鲲鹏的架构在HBS场景下优势凸出,另外在存储、IO等方面基本上是持平,总体来说,鲲鹏的芯片表现性能都还不错 。 ”长虹计算产业事业部技术总监蒲文龙这样评价到同行者华为鲲鹏 。


推荐阅读