鲲鹏应用开发——代码归一

举报
Jack20 发表于 2021/05/06 15:20:27 2021/05/06
【摘要】 鲲鹏920系列芯片概览鲲鹏920提供强大的计算能力,基于华为自研的具有完全知识产权的ARMv8架构,最多支持64 Core。通过片间Cache一致性接口Hydra可扩展系统核数,最多支持到256 Core,形成性能超强的板级计算节点。支持CPU Core虚拟化、内存虚拟化、中断虚拟化、IO虚拟化等多项虚拟化等技术,使得系统的资源共享更加灵活、系统的迁移过程变得相对简单。鲲鹏920具有丰富且强...

鲲鹏920系列芯片概览

鲲鹏920提供强大的计算能力,基于华为自研的具有完全知识产权的ARMv8架构,最多支持64 Core。

通过片间Cache一致性接口Hydra可扩展系统核数,最多支持到256 Core,形成性能超强的板级计算节点。

支持CPU Core虚拟化、内存虚拟化、中断虚拟化、IO虚拟化等多项虚拟化等技术,使得系统的资源共享更加灵活、系统的迁移过程变得相对简单。

鲲鹏920具有丰富且强大的I/O能力。集成以太网控制器;提供SAS控制器;集成PCle控制器。

芯片集成安全算法引擎、压缩/解压缩引擎、存储算法引擎等加速引擎进行业务加速。


高性能、高集成、异构加速

image.png

高集成,高能效

image.png

    最强算力的产品必须要有最强劲的处理器。

    鲲鹏处理器采用了多合一的SoC芯片架构,它不仅仅是一颗CPU,还集成了RoCE网卡、SAS控制器、桥片等,单颗处理器实现了4颗芯片的功能,以一当四!可有效提升主板的集成度,使服务器的体积更小,算力密度更高、功耗更低。

    华为研发的Cache一致性总线HCCS,可以实现CPU和CPU之间的高速互联,通信速率高达每秒30GT,是业界主流CPU互联速率的2倍多。通过多CPU互联,我们率先实现256个物理核的NUMA架构,从而推出业界首款兼容ARM的最强算力4路服务器

    当前处理器一般通过与外置网卡配合为服务器提供10GE、25GE的接口,在分布构下,要完成一个高算力的集群组网尔f奥R100GE成为服务器的标准配置。从个推出内置直出100GE网络能力的通用处理器,让100GE成为服务器的标准配置。从处理器到服务器,扩展到整机柜和计算集群,实现全100GE的高速网络互联,引领服务器迈入100GE时代,构建最强算力的集群。

更安全:鲲鹏加速引擎,数据安全加解密

image.png

鲲鹏应用开发代码归一问题

鲲鹏服务器底层芯片架构和传统x86芯片有差异,业务软件迁移过程中要对代码进行适配修改。修改后的代码可能会维护2个代码分支,增加了后期代码维护成本,这种方法是不可取的。将2个分支的代码合一到一套代码的过程称为代码归一。

代码归一有三种方式实现:

  1. 代码段编译宏控制
  2. 编译文件Makefile控制
  3. 运行态自动适配

解释型语言编译后生成平台无关的中间代码文件(例如,Java代码编译后会生成.class
文件,python代码编译后会生成.pyc文件),由虚拟机解释执行,虚拟机完成平台差异的屏蔽,所以基于解释型语言开发的应用程序,与底层芯片架构无关的,无须迁移可以将同一套代码放在鲲鹏和x86服务器上运行。

基于编译型语言开发的应用程序,其编译后得到可执行程序,可执行程序执行时依赖的指令是芯片架构相关的。因此,软件迁移后鲲鹏架构上的代码和x86架构的代码会不一致,代码归一需要使用合适的措施隔离不同架构代码,后面我们以编译型语言代表C/C++语言为例,分别从代码片段和文件两个方面说明归一方法。


代码段编译宏控制

通过编译宏控制是C/C++中较为通用的代码片段隔离方法,同样适用于不同芯片架构中的代码归一。一般方法是,在代码中用不同的宏将对应芯片的代码包含起来,在编译时选择或者自动识别选用的宏类型,如果不是被启用的宏,其代码就不会被编译。

方法一:使用GCC预定义好的通用宏。C/C++语言中通过条件编译#ifdef,#endif 等关键词实现将代码块编译区分,示例代码中采用了_x86_64_宏控制x86环境下运行的代码,采用了_aarch64_宏控制ARM环境下运行的代码,这两个宏是GCC预定义好的通用宏,GCC根据编译所在服务器的架构自行激活对应的宏,用户无需定义,使用比较方便。

方法二:自定义宏,通过编译命令行带入传递到代码编译中。如,gcc通过添加–DDEFINES或 -DDEFINES=CONDITION参数来定义用户的宏。


编译文件Makefile控制

如果业务代码中涉及不同架构的代码较多,使用代码片段隔离方式操作繁琐,易读性差,推荐将统一架构相关的代码放到同一个文件中,使用文件隔离的方式并采用makefile分文件编译方式实现代码归一。

如果使用make x86执行的为x86平台编译,如果执行make kunpeng,执行的为kunpeng平台编译

可以使用shell脚本配合makefile的方式来实现自动识别芯片架构类型并执行不同的编译命令,高效且不易出错


运行态自动适配

上层业务代码如果要根据不同的芯片类型设置不同的参数,或者走不同的代码逻辑路径,可以通过实时查询芯片类型来判断,这样代码实现了自动适配芯片类型。与编译宏控制方法的区别是,这类代码和编译无关,不同芯片架构都可以编译。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。