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

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

戳原文,即报名

硬核知识,C/C++移植法则分享相关推荐

  1. 查看linux硬核上的线程,给大家分享一点基础硬核知识哦 Linux的基础指令操作Lin...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 给大家分享一点基础硬核知识哦 Linux的基础指令操作L inux的基础指令操作 Linux的指令下达方式很简单,只需要记得几个重要的概念就可以 l: c ...

  2. 硬核知识大全 作为程序员你不得不了解

    我们每个程序员或许都有一个梦,那就是成为大牛,我们或许都沉浸在各种框架中,以为框架就是一切,以为应用层才是最重要的,你错了.在当今计算机行业中,会应用是基本素质,如果你懂其原理才能让你在行业中走的更远 ...

  3. nessus导出报告格式有哪些_高分高能 | 文献检索硬核知识报告

    助力宅家学业提升 文献检索硬核知识 2020年3月28日,高分子科学系本科生党支部开展"积极践行校风学风,助力宅家学业提升"为主题的线上组织生活会,本次会议由2019级本科生辅导员 ...

  4. 3 万字 51 张图教你 CPU、内存、操作系统硬核知识!

    作者|cxuan 来源 |Java建设者(ID:javajianshe) 我们每个程序员或许都有一个梦,那就是成为大牛,我们或许都沉浸在各种框架中,以为框架就是一切,以为应用层才是最重要的,你错了.在 ...

  5. 程序员需要了解的硬核知识之操作系统和应用

    作者 | cxuan 责编 | maozz 利用计算机运行程序大部分都是为了提高处理效率.例如,Microsoft Word 这样的文字处理软件,是用来提高文本文件处理效率的程序,Microsoft ...

  6. 程序员需要了解的硬核知识之操作系统入门

    对于程序员来说,最莫大的荣耀莫过于自己的软件被大多数人使用了吧. 历史文章请戳 程序员需要了解的硬核知识之内存 程序员需要了解的硬核知识之CPU 程序员需要了解的硬核知识之二进制 程序员需要了解的硬核 ...

  7. 程序员不得不了解的硬核知识大全!

    我们每个程序员或许都有一个梦,那就是成为大牛,我们或许都沉浸在各种框架中,以为框架就是一切,以为应用层才是最重要的,你错了.在当今计算机行业中,会应用是基本素质,如果你懂其原理才能让你在行业中走的更远 ...

  8. 多余的读写端口什么时候会对程序造成影响_程序员需要了解的硬核知识之控制硬件...

    应用和硬件的关系 我们作为程序员一般很少直接操控硬件,我们一般通过 C.Java 等高级语言编写的程序起到间接控制硬件的作用.所以大家很少直接接触到硬件的指令,硬件的控制是由 Windows 操作系统 ...

  9. 程序员需要了解的硬核知识之控制硬件

    应用和硬件的关系 我们作为程序员一般很少直接操控硬件,我们一般通过 C.Java 等高级语言编写的程序起到间接控制硬件的作用.所以大家很少直接接触到硬件的指令,硬件的控制是由 Windows 操作系统 ...

  10. aomei动态磁盘管理器_程序员需要了解的硬核知识之磁盘

    点击蓝色"Java建设者"关注我哟 加个"星标",阅读我的文章,一起学习成长. 这是Java建设者的第 42篇原创文章 此篇文章是 <程序员需要了解的硬核 ...

最新文章

  1. svn的使用(转载)
  2. firefox 4b7截图
  3. 架构设计杂谈004——架构师
  4. treegrid,可以展开的jqgrid树
  5. 学习用 Keras 搭建 CNN RNN 等常用神经网络
  6. 怎样设置计算机默认字体及语言,电脑win10系统怎么将paint 3D的语言设置为中文...
  7. 五、Docker+Sqlserver
  8. 编解码器长短期记忆神经网络
  9. 人体全身骨骼神经分布图,人体骨骼神经系统图片
  10. JAVA购物管理系统
  11. 图像基础ImageMagick图像处理
  12. Candidate是什么
  13. mongodb获取具体某一天的查询语句
  14. 一个人在家怎么做自媒体?4个靠谱平台,门槛低、变现很简单
  15. @RequestBody是干嘛的,作用是什么?
  16. [笔记分享] [Camera] MTK Camera AF及tuning
  17. MySQL 利用xtrabackup进行增量备份详细过程汇总
  18. kingscada检测服务器状态,基于云服务器的状态检测平台
  19. 北大青鸟消防设备类型编码_北大青鸟JBF6480电子编码器
  20. 双系统下文件互相访问——win7Linux系统如何互相访问文件

热门文章

  1. 损失函数——交叉熵损失函数
  2. Hibernate细节
  3. js调用微信扫一扫demo_JS 调用微信扫一扫功能
  4. sysctl mysql_Sysctl
  5. python消费kafka逻辑处理导致cpu升高_大数据技术之一次KAFKA消费者异常引起的思考...
  6. nosuiteable Oracle,快给你的Kubernetes集群建一个只读账户(防止高管。。。后)
  7. mysql config.path_mysql之 mysql_config_editor/login-path 登录密码保护
  8. 【debug】python打包成exe,太大了该怎么解决?
  9. 冒泡排序提前终止条件_“离职要提前30天通知”这9种误区,你踩过几个?
  10. mysql timestamp_详解mysql三大时间函数now()、current_timestamp() 和sysdate()