软件迁移中,这些硬核C/C++移植法则“爆”了!

于曦

2020 年 7 月 08 日

软件迁移中,这些硬核C/C++移植法则“爆”了!

随着移动互联网和物联网技术的兴起,网络加密性要求以及 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 架构上的编译及运行测试等内容;

  • 学习使用鲲鹏社区专为开发者所提供的大量的兼容鲲鹏计算平台的开源软件包。



每一次架构的变迁都是企业的生死战,但我们能看到的是,凡是敢于变化,敢于迁移的企业,往往都能取得非凡的成果。通过这场线上沙龙,一同开启变革之旅吧!


点击[阅读原文]直达本节课堂。


2020 年 7 月 08 日 08:08475

评论

发布
暂无评论
发现更多内容

Dataway 配置数据接口时和前端进行参数对接

哈库纳

Spring Boot DataQL Dataway Hasor

在培训机构花了好几万学Java,当了程序员还常被鄙视,这是招谁惹谁了?

四猿外

Java 学习 程序员 个人成长 转行程序员

【快点查查】微信小程序使用流程

tomatocc

小谈校招offer选择

dongh11

职场 职业规划 应届毕业 心态 招聘

tput命令介绍

唯爱

服务化架构-状态码设计要点

图南日晟

微服务 RESTful 架构设计

金灿灿的季节 - Apache DolphinScheduler收获5位新Committer

海豚调度

深入浅出Mysql索引的那些事儿

猿人谷

MySQL 性能优化 索引

磁盘挂载

唯爱

Vol.7 聊聊我热爱的陕西省图书馆

Lanpeng20

记录 生活,随想

Vol.8 云栖小镇游记

Lanpeng20

阿里云 随笔 数字化转型

Wi-Fi p2p & ap 共存

贾献华

wifi p2p ap

绝了!Dataway让Spring Boot不再需要Controller、Service、DAO、Mapper

哈库纳

StringBoot DataQL

完美兼容老项目!Dataway 4.1.6 返回结构的全面控制

哈库纳

spring Spring Boot Dataway Hasor

游戏夜读 | vim,vim,vim

game1night

XSKY发布XMotion纳管热迁移技术,OpenStack集群迁移效率提升超10倍

XSKY融合存储

安装R语言编译器:

唯爱

Java 学习笔记(三)数据类型

杜朋

超简单入门MyBatis,看了就会了~

程序员的时光

mybatis

我来聊聊模型驱动的前端开发

欧雷

软件工程 软件开发 前端开发 前端工程 前端架构

艺术生,我劝你Mac

zhoo299

Mac CG 艺术

Dataway 4.1.5 以上版本升级指南

哈库纳

string StringBoot Dataway Hasor

系统服务化构建-两方OAuth

图南日晟

微服务 软件工程 身份认证 架构设计

服务化构建-多维度的认识中台

图南日晟

软件工程 分层架构 架构设计

珍藏已久的 OS 学习网站拿出来分享给大家

cxuan

操作系统

ARTS-WEEK01

lee

ARTS 打卡计划

Vol.6 几个数据库相关的词

Lanpeng20

数据库 大数据 新手指南

免费领课的活动你错过了么?

池建强

极客时间

无需代码!通过 Dataway 配置一个带有分页查询的接口

哈库纳

spring springboot Dataway Hasor

Dataway 整合 Swagger2,让 API 管理更顺畅

哈库纳

Spring Boot DataQL Dataway Hasor

【写作群星榜】5.22~5.28写作平台优秀作者&文章排名

InfoQ写作平台

写作平台 排行榜

软件迁移中,这些硬核C/C++移植法则“爆”了!-InfoQ