随着移动互联网和物联网技术的兴起,网络加密性要求以及 HTTPS 流量不断提升,x86 架构越发难以满足企业的需求,地位变得越来越不稳固。近年来,在 ARM 优势急速凸显后,x86 应用向 ARM 的迁移也成为一种趋势。但软件迁移环节中无数痛点的出现,也让软件迁移陷入被动之地。
迁移准备、迁移分析、编译迁移、性能调优、测试认证五大步骤是 x86 向 ARM 软件迁移的必经之路。而在 C/C++代码迁移、Java/Python 代码迁、Maven 仓软件构建、软件包迁移几大语言迁移体系中,C/C++编译移植为“硬核点”。作为典型的编译型语言,C/C++开发程序从 X86 到 ARM 需要重新进行加工编译。究其根源,引发移植问题的主要原因有三:
首先是架构差异,x86和鲲鹏处理器(aarch64)属于不同的架构,编译器通常会自定义对应各自的编译宏、编译选项;
其次是指令集的差异,x86是复杂指令集 ,而鲲鹏处理器是精简指令、指令集差异导致汇编指令的不同,进而需要进行汇编指令的迁移;
第三是向量寄存器的差异,x86和鲲鹏处理器使用向量寄存器不同,向量指令集也存在差异。
作为最为硬核的迁移语言,C/C++代码在迁移中也有诸多问题存在,最具代表性的五类迁移问题如下:
编译脚本和编译选项的移植。在其中,需要修改的差异化编译大多都有一个特点,一般与当前编译平台属性强相关,由于平台属性差异才引入移植修改,这些编译选项一般以–m开头;
编译宏的移植。编译宏可理解为编译器去编译和执行当前平台对应分支的路标,一般分为编译器自定义的宏和用户自定义宏两类,两类宏的编译移植方式各不相同;
builtin函数问题。builtin函数可用来优化编译结果,还可实现一些简单快捷的功能方便程序编写。这些函数都以__builtin开头;
硬核难点——内联汇编移植,常用迁移方法有汇编指令方式替换以及builtin函数替换两种;
SSE intrinsic函数移植。一般在多媒体技术开发以及数学矩阵库中应用较多的SSE intrinsic函数移植较为复杂,为重难点。
那么,如何获取源码、准备编译环境、如何替换依赖库以便于可执行程序的安装部署?C/C++语言中,如何达到 builtin 函数的快捷优化?怎样真正触达内联汇编函数移植的硬核点?站在巨人的肩膀上或许是寻找答案的最优捷径。
18 城鲲鹏创新中心开发者创享日已启动
华为在计算产业的成就有目共睹,聚焦于鲲鹏和昇腾处理器、鲲鹏云服务和 AI 云服务等领域的技术创新,立足于“硬件开放、软件开源、使能伙伴”的初心,越来越多的开发者加入到鲲鹏生态中共同推动计算产业的发展。依托于深厚的技术底座,华为鲲鹏也积累了丰富的迁移实战经验,为开发者的迁移之路铺平道路。
7 月 11 日,「18 城鲲鹏创新中心开发者创享日·江苏鲲鹏生态创新中心专场」将在线上为开发者带来一场专业的技术盛会。本次活动将从整体的软件迁移出发,触达 C/C++、JAVA/Python 等高级语言移植等软件迁移核心。针对典型移植类问题进行分析,重点介绍各类移植问题的迁移方法,为开发者带来最详尽的软件迁移指导。
参会收益
与技术大牛共同实操,实现基于 C/C++ 代码的自动迁移;
学习在代码迁移、应用迁移的过程中遇到的问题及解决思路;
了解更多适配开发者的鲲鹏开发者套件,并熟悉使用方法;
学习常用软件在 ARM 架构上的编译及运行测试等内容;
学习使用鲲鹏社区专为开发者所提供的大量的兼容鲲鹏计算平台的开源软件包。
每一次架构的变迁都是企业的生死战,但我们能看到的是,凡是敢于变化,敢于迁移的企业,往往都能取得非凡的成果。通过这场线上沙龙,一同开启变革之旅吧!
点击[阅读原文]直达本节课堂。
评论