一套迁移技能&一场赛事信息,一文轻松解码「鲲鹏应用创新大赛 2020」四川赛区

张鱼小丸子

2020 年 8 月 04 日

一套迁移技能&一场赛事信息,一文轻松解码「鲲鹏应用创新大赛 2020」四川赛区

7 月 30 日,「鲲鹏应用创新大赛 2020」四川赛区线上宣讲会顺利举行。宣讲会上来自华为鲲鹏的技术专家就鲲鹏软件迁移做了介绍,让广大开发者和参赛者对鲲鹏计算技术和生态有了更为具体的了解,同时宣讲会也重点对鲲鹏应用创新大赛 2020 四川赛区的赛事做了详细介绍。


从 x86 到 ARM,鲲鹏软件迁移知多少?


计算机通常由硬件和软件组成,高级语言通过编译器编译后包含的指令在不同平台上存在差异。因此在从 x86 平台到鲲鹏处理器平台需要进行重新编译。


软件迁移的五个步骤


以下是在长期的项目迁移过程中总结出来的软件迁移过程的五个步骤:


迁移准备:这个过程中主要做一些硬件和软件信息的收集,还有编译环境的准备。


迁移分析:主要对收集到的软件栈信息进行详细分析,包括使用什么语言,是否有相应的 x86 依赖需要移植。


编译迁移:这块是重中之重,主要分为两类,一类是代码迁移,一类是软件包迁移。


性能调优:做完迁移、完成基本功能之后,还要做一定的性能调优。性能调优主要分为建立基准 、压力测试 、确定瓶颈、 实施优化、 确认效果五个步骤。


测试与认证。调优完之后要通过测试和认证保证迁移完之后的功能和性能正常达标。这块主要有一些压力测试,长稳测试,包括鲲鹏展翅认证。


C/C++ 代码迁移


高级语言通常分为编译型语言和解释型语言,C/C++/Go 语言是典型的编译型语言。编译型语言开发的程序从 x86 处理器迁移到鲲鹏处理器的时候,因为二者之间的架构差异、指令集差异和向量寄存器差异,通常需要通过重新编译才能正常运行。


在 C/C++ 编译构建过程中,代码工程主要包括编译构建脚本、C/C++ 源码这两类文件,会对这两类文件包括脚本选项、宏、builtin 函数等方面的修改。


C/C++代码编译构建过程主要分为以下几步:


1、获取源码,可以通过 GitHub 等开源社区来获取;


2、选择所需的编译环境,即安装编译器 gcc 等;


3、根据源码的编译脚本生成 Makefile 文件;


4、再用 Makefile 编译生成可持续文件;


5、如果这部分代码之中有依赖 x86 平台的 SO 库,那么这部分的依赖库需要重新编译替换;


6、在编译完成之后进行安装部署,之后进入到实际的系统之中进行测试。


C/C++代码迁移中一些典型的移植问题如下:


编译脚本里编译选项的移植:带有架构属性的编译选项通常需要进行移植。比如 64 位编译在 x86 上是 -m64,对应到鲲鹏上是用 -mabi=lp64 的编译选项,此类编译选项需要在脚本中修改;此外, x86 平台上默认的 char 类型是一种有符号的类型,对应到鲲鹏上则是无符号类型,在移植过程中需要显示定义并将 char 类型定义为有符号。


编译宏的移植:编译宏的移植分为两类,分别是 gcc 编译器自定义的宏和用户自定义的宏。x86 下 gcc 自定义的编译宏在鲲鹏处理器下可以利用—aarch64—这个编译宏来进行替换。如果是自定义的编译宏,只带有一些平台属性,比如说 Have-X86-64,同样可以定义 Have-aarch64 这样带有平台属性的编译宏进行替换。


builtin 函数的移植:builtin 函数是编译器自定义的一些功能函数,这些功能函数通常比较简单,但是内部的实现可能进行了一定优化,所以通常具有较好的性能。需要迁移的 builtin 函数并不是太多。以 crc32 校验值的计算为例,在 x86 下是 builtin-in32 这种形式,但是鲲鹏处理器下面可以通过 aarch64-crc32 最低指令进行替换。


内联汇编函数移植:内联汇编的迁移主要有两种方法,第一种是汇编指令方式替换,第二种方式是通过 builtin 函数方式进行替换。


SSE intrinsic 函数的移植:SIMD 英文全称是 Single Instruction Multi Data,就是通过单条指令处理多条数据。在 x86 架构下,SIMD 的扩展指令叫 SSE,经过多代发展从原来 64 位的 MMX 到后来的 128 位的 SSE,再到 256 位的 AVX 以及 512 位的 AVX 指令。鲲鹏基于 SIMD 的技术发展比较成熟,现在有些基于开源量的 NEON 库主要是在图象处理和视频处理层面。x86 和鲲鹏对这些指令的含义和运算方式有区别。SSE intrinsic 函数移植的主要方法主要有两种:1. 基于 avx2neon.h、SSE2NEON.h 开源文件移植,大家可以在鲲鹏的开源工程网站上去下载,已经有改好的相关文件。2. 手动替换移植,移植的时候看 x86 原来的指令什么意思,放到 NEON 里面怎么改。


在实际的代码迁移过程中,通常是先编译,遇到问题之后进行修改,然后再进行编译,然后循环整个过程,直到编译没有问题,完成迁移。


Java/Python 代码迁移


Java 代码迁移


Java 源码移植的过程为:首先安装 JDK,然后将 Java 源码通过 Java 编译器编译成 .class 文件,这时如果还有要有 C 语言的 .so 库,就需要把 .class 文件和 .so 库共同打包到 jar 包中,然后部署运行。对于这样的流程,在鲲鹏上的迁移改动点主要有以下三点:


1、首先需要安装鲲鹏上能支持的 JDK,JDK 版本可以选择通过 YUM 安装鲲鹏已经适配的 OpenJDK,也可以通过源码编译安装自己想要的特定 JDK 版本。


2、其次对于调用的 .so 库需要替换成 aarch64 版本,


3、在部署运行的时候,可能会涉及到一些 JVM 参数的修改。


Python 代码迁移


接下来看 Python 代码的迁移。Python 代码从源码到运行的过程同样需要先安装 Python 环境,然后进行 Python 源码编译,通过 Python 编译器把源码变成 .pyc 字节码,同时如果代码里有调用含 C 或纯 C 代码模块,需要把这部分代码编译成 .so 库生成模块,最后将字节码和模块一起放到 Python 解释器运行。对这样的流程,在鲲鹏上需要做的改动点主要有:


1、首先是 Python 版本,当前 Python 2.X 版本在 Python 官方已经不维护了,所以建议将 Python 的环境升级到 Python 3.X。


2、其次对于 C 代码编译生成的 so 库,需要把它替换成 aarch64 版本。


Maven 软件仓库的构建


在 Java 工具开发圈中最主流的有 lvy、Maven、Gradle 这三个开发工具,Maven 是 Apache 下一个纯 Java 开发的开源项目,基于项目对象模型,可以对 Java 项目进行构建和依赖管理等。


Maven 软件仓库主要分为本地仓库,远程仓库和中央仓库三大类。


在做 Maven 软件构建的时候:


1、首先会从本地仓库进行搜索,如果在本地仓库找到则直接返回。


2、如果本地仓库没有找到,则去远程仓库进行搜索。


3、在远程仓库如果找到,会把相关的组件下载到本地仓库。


4、如果远程仓库还是没有找到,就会去搜索中央仓库。


5、如果在中央仓库找到所需要的组件,会同样把这个组件下载到本地仓库。


6、如果中央仓库也没有找到,就会在前台打印错误信息。


Maven 仓库软件构建流程就是将 x86 依赖文件替换为鲲鹏依赖文件,再重新构建,直到不包含 x86 依赖。Maven 仓的部分 jar 包依赖 x86 so,无法在鲲鹏上直接使用,需要进行编译。部分 jar 包已经编译好放在鲲鹏 Maven 仓内,可以直接从鲲鹏远程 Maven 仓库下载 ARM 依赖文件,无需重新编译。


软件包的迁移


常见的 Linux 发行版主要分为两类:RedHat 系列和 Debian 系列。在 RedHat 系列中,软件包的格式是 rpm,RedHat 系列提供了 rpm 这个命令进行软件安装、卸载、升级。


rpm 包通常包含二进制、so 库、jar 包、配置文件等文件。对于 rpm 软件包的迁移,需要把 x86 rpm 包重构到 ARM 上来,主要需要把里面的 so 库、二进制替换成 rpm 版本的 so 库、二进制,这是重构的主要工作。


rpm 包的迁移过程:


1、首先需要扫描 x86 的 rpm 包 ,识别其中的 x86 依赖文件。


2、扫描完毕后,知道了哪些文件是需要迁移的,这个时候要下载源码进行编译。如果这个 jar 包能够在鲲鹏的 Maven 软件仓上找到,可以直接下载使用。如果 so 库或者二进制找不到,则需要在鲲鹏平台上重新编译。


3、接下来需要对这些文件进行打包,首先要解压 x86 的 rpm 包,并且将 x86 的依赖文件替换成前面生成的鲲鹏平台的 rpm 包或者 jar 包,然后进行重新打包。


4、打包完成需要进行重新验证,看能否在鲲鹏平台正常运行。


以上就是鲲鹏软件迁移相关的分享。接下来华为的专家为大家详细介绍了鲲鹏应用创新大赛 2020 四川赛区赛事的安排。


鲲鹏应用创新大赛 2020 四川赛区火热“招生”中


为激发行业创新,促进人才培养,全国各地的鲲鹏生态创新中心正在联合举办鲲鹏应用创新大赛,目前共有北京、重庆、福建、广州、广西、河南、湖南、江苏、陕西、深圳、四川、天津和浙江 13 个区域赛区。大赛整体报名工作已于 7 月 1 日开启,总奖金池高达 500 万元。


作为 13 大区域赛的一环,四川赛区由四川鲲鹏生态创新中心与华为技术有限公司联合举办。参赛作品提交截止时间为 2020 年 8 月 15 日 18 时,8 月 16 日- 8 月 21 日进行作品评审并公布结果。四川赛区的比赛面向企业和高校开发者,同一家企业允许多个不同解决方案团队报名参赛(如一家企业有多个团队参赛,需要分别注册华为云账号,使用不同作品参赛),同一高校多支队伍需自取队伍名称以作区分(如同一高校有多个团队参赛,需要分别注册华为云账号,使用不同作品参赛)。


四川赛区企业组赛题、奖金配置及评选规则


四川赛区企业组的比赛包含以下五个赛题:


1、金融行业创新解决方案:参数作品包括但不限于资产管理、授信融资、风险风控、贷款管理平台等一系列解决方案;


2、数字政府创新解决方案:参赛作品包括但不限于政务的应用,政务大数据平台解决方案等;


3、大数据创新解决方案:参赛作品包括但不限于数据资源汇聚、数据综合治理、数据挖掘和利用、数据便民惠民等大数据解决方案;


4、ARM 原生创新应用:主要是基于 ARM 指令集的端和云协同的解决方案,包括移动办公、云手机、云游戏,或者原生基于 ARM 指令集的解决方案;


5、开放命题:基于鲲鹏技术的解决方案,包括电力、医疗、教育、交通、制造等。


企业组的奖金激励总额为 32 万元,奖金配置如下:


一等奖:4 个团队(每赛题 1 个团队),每团队奖励:3 万现金;


二等奖:4 个团队(每赛题 1 个团队),每团队奖励:2 万现金;


三等奖:4 个团队(每赛题 1 个团队),每团队奖励:1 万现金;


“ARM 原生应用”赛题只设置一等奖(1 个团队),团队奖励 2 万现金


企业组作品提交要求


1、同一个作品只能参加一个华为开发者赛事评选;


2、历届作品不能参加评选;


3、参赛队伍要基于鲲鹏计算技术构建产品和解决方案,包含华为云鲲鹏的云服务,鲲鹏主板,鲲鹏服务器等产品;


4、提交的作品方案须包括:


(1)作品介绍 PPT;


(2)作品演示,demo 或视频;


(3)兼容性认证证书/测试报告;


(4)公司授权函;


5、作品提交格式要求:将参赛作品打包成一个 ZIP 压缩包进行上传;


6、提交作品命名要求:公司名称+赛道编号+作品名+队长姓名+队长手机号.zip,高校组要求高校两个字加上高校的名称,加上解决方案的名称,加上赛题的选择。比如说高校+电子科大+的数据解决方案,赛题 C。


提交的作品中对于作品的描述,必须包含


1、该作品/解决方案解决了什么问题和痛点,场景和功能是怎样的;


2、基于鲲鹏计算技术的构架和业务模型;


3、使用了哪些鲲鹏计算、技术,用哪些服务。


描述中最好还加上商业模式及市场前景,以及鲲鹏市场的机会点等。


企业组比赛评选规则


1、功能完备:要求作品具有良好的可用性、易用性、稳定性、安全性,明显满足 Beta 商用版本发布的要求。


2、作品具备自主知识产权:能够创造良好的社会和市场效益,并且具有较为广阔的商业前景,这项是能够为我们作品的评选带来一些加分的。


3、创新易用:要求作品具有充分的创新特性,跟行业成熟的方案相比有一定的差异性和很高的价值创意,有更好的问题解决方案,并且大赛鼓励使用国产操作系统、数据库和中间件等产品。


四川赛区高校组赛题、奖项配置及评选规则


四川赛区高校组的赛题分为固定赛题和开放赛题。


固定赛题


固定赛题为“移植技术栈信息分析”。固定赛题需要实现的目的:通过设计的应用录入企业的软件产品,并且录入企业产品所应用的技术栈,查询该企业的软件产品跟华为鲲鹏生态的技术栈是否有匹配。


固定赛题需要实现的功能:


1、基本功能:录入技术栈的信息到系统里面,包括录入软件里面所使用的操作系统,开发语言、数据库、中间件等。


2、支持数据的导入、导出,支持数据的查询、修改和删除。


3、用户权限管理。


此外还需要完成数据分析功能。可以构建大数据技术环境,将数据从数据库导入到大数据平台,实现按照不同维度分析和统计技术栈的信息。华为官网上可以查看到目前为止鲲鹏支持的技术栈,通过分析能够得到每个软件和华为鲲鹏适配的情况,并有分析过后的数据展示。展示可以使用图形或表格。以及对于数据展示需要考虑相应需要,需要尽可能对分析的任务进行性能的调优,提高资源利用率,缩短任务耗时,并且提交优化手段的说明。


固定赛题的评选标准


1、功能的完整性;


2、鲲鹏云服务的应用;


3、国产组件的应用;


4、系统架构是否可靠,包括稳定可运维性的特点;


5、系统展示,演示功能是否是完备的;


6、加分项:在应用迁移的时候,是否遇到一些技术问题,以及遇到问题的时候,是否进行了攻克,可以提供这种具体的解决方案。


开放赛题


开放赛题要求产品基于华为云鲲鹏云服务,将软件产品应用进行鲲鹏移植,满足现应用的高可靠,高安全、高并发的要求。


1、功能要求:百分之百使用鲲鹏云服务,满足数据安全、信息安全的诉求,提供前后端的系统,对整体服务进行有效监控和智能化运维,充分考虑易用性和高可靠,后期鼓励加入鲲鹏凌云计划。


2、架构和性能要求:百分之百的鲲鹏云服务,基于特定场景进行完整的系统功能和性能演示。此外还要充分考虑容灾备份的方案,以及安全性使用,包括有用户角色,授权访问,以及扩展性、伸缩节点和滚动升级。


架构和云化部署的要求:


1、基于鲲鹏云 WEB 应用,操作系统不做限制。支持国产的操作系统,或常见的国外操作系统。开发语言也不做限制。


2、数据库选型,根据开源项目数据库进行移植应用。


3、安全解决方案,充分考虑应用系统的安全防护体系。


4、高可靠解决方案,充分考虑应用系统高可靠的架构设计。


5、运维解决方案,充分考虑应用系统的可运维性和运维安全性。


6、加分选项:如果使用了鲲鹏应用的解决方案,鼓励使用 OBS,鼓励使用国产数据库以及鲲鹏大数据分析和高级鲲鹏云服务。


高校组参赛作品最终会评选出一等奖、二等奖和三等奖。


一等奖(1 个团队),每位参赛的团队学生和指导老师一部华为 P40 手机;


二等奖(3 个团队),每位参赛的团队学生和指导老师一部华为 Nova 手机;


三等奖(8 个团队),每位参赛的团队学生和指导老师一只华为手环。


此外,每支团队还会获取 8000 元云资源的权限。优秀学员可以直接选送华为合作伙伴的人才储备计划实现高品质的就业。高校组作品成绩为作品成绩*70%加上测评成绩以及认证加分。


开放赛题的评分标准


1、功能完整性,参赛作品最终主要功能是可用的,有坚实的技术能力和实际落地,注重用户的体验。


2、鲲鹏云服务应用情况,充分理解和认知鲲鹏云服务,将云服务应用到参赛作品中去,并且解决系统问题。


3、系统架构合理性,参赛作品架构是可靠性、稳定性、可运维性。


4、实现创新性,作品具有创新特性,与行业成熟的方案相比有差异性,有高价值创意和更好的解决方案。


5、系统展示效果,根据团队提供的 demo 看一下展示的性能场景。


点击链接解锁报名通道 &获取更多关于鲲鹏应用创新大赛四川赛区的赛事详情


2020 年 8 月 04 日 14:48295

评论

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

学会打破确定性思维,才能做得更好

松花皮蛋me

高效工作 10X工作法 精益开发

原创 | OOAD范例:配置类设计

编程道与术

原创 | DDD与分层

编程道与术

哈希,茫茫人海,我一眼看到了你

dongge

3000字长文教你大数据该怎么学!

老蒙

Java 大数据 spark 学习 开源

深度工作

insight

读书笔记

这一战,必战,若一去不返,便一去不返

泰稳@极客邦科技

创业 项目管理 团队建设 InfoQ

Java 代码的组织机制

michaelliu

Java

工厂模式

Wen Wei

设计模式

Java 类构造函数的调用顺序

michaelliu

Java

程序员陪娃漫画系列——夜宵

孙苏勇

程序员 生活 程序员人生 陪伴 漫画

Gary的唠叨(二):先算是非,后算得失

郭蕾

Gary的唠叨 感悟

【奖项公布】致内测用户——亲爱的1号创作者们~

InfoQ写作平台

写作平台 1号创作者 奖品

技术人员能力养成手记

码闻强

个人成长 程序人生 职业规划

聊聊技术人如何与甲方客户打交道

码闻强

程序员 程序人生 职业规划

Java 类

michaelliu

Java

黑苹果提取codec,进入ubuntu的时候,提示:Try ubuntu without install

wood

ubuntu 黑苹果

WIN10 解决“无法完成操作,因为文件包含病毒或潜在的垃圾软件

wood

win10

屏幕适配插件:ScreenMatch基本使用和注意事项

Arch

香港上市"失效"、传言申请科创板,聊聊半年亏损52亿的旷视科技 | IPO招股书系列(4)

赵新龙

IPO 旷视科技 上市 招股说明书 科创板

【获奖名单公示】作为一名技术人,我为什么要写作?

InfoQ写作平台

程序员 写作 写作平台 活动专区

网络编程方法

Ya

方法论 网络编程 socket

网站架构方法

Ya

架构 方法论 网站 大型软件

网站是什么?

insight

网站

如何高效开会

熊斌

效率 效率工具

稀缺:我们为什么会陷入贫穷与忙碌

insight

读书笔记

夏天将来,愿我们有足够的知识继续前进

Amon Lee

转任管理岗位后,还要不要从事编码工作?

码闻强

团队管理 个人成长 程序员人生 职业规划

docker搭建lamp

刘磐石(刘坤鹏)

专家的直觉和你的直觉

池建强

书摘 直觉

Java并发编程系列——线程的等待与唤醒

孙苏勇

Java Java并发 并发编程 线程

一套迁移技能&一场赛事信息,一文轻松解码「鲲鹏应用创新大赛 2020」四川赛区-InfoQ