鲲鹏应用开发——代码归一
鲲鹏920系列芯片概览
鲲鹏920提供强大的计算能力,基于华为自研的具有完全知识产权的ARMv8架构,最多支持64 Core。
通过片间Cache一致性接口Hydra可扩展系统核数,最多支持到256 Core,形成性能超强的板级计算节点。
支持CPU Core虚拟化、内存虚拟化、中断虚拟化、IO虚拟化等多项虚拟化等技术,使得系统的资源共享更加灵活、系统的迁移过程变得相对简单。
鲲鹏920具有丰富且强大的I/O能力。集成以太网控制器;提供SAS控制器;集成PCle控制器。
芯片集成安全算法引擎、压缩/解压缩引擎、存储算法引擎等加速引擎进行业务加速。
高性能、高集成、异构加速
高集成,高能效
最强算力的产品必须要有最强劲的处理器。
鲲鹏处理器采用了多合一的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时代,构建最强算力的集群。
更安全:鲲鹏加速引擎,数据安全加解密
鲲鹏应用开发代码归一问题
鲲鹏服务器底层芯片架构和传统x86芯片有差异,业务软件迁移过程中要对代码进行适配修改。修改后的代码可能会维护2个代码分支,增加了后期代码维护成本,这种方法是不可取的。将2个分支的代码合一到一套代码的过程称为代码归一。
代码归一有三种方式实现:
- 代码段编译宏控制
- 编译文件Makefile控制
- 运行态自动适配
解释型语言编译后生成平台无关的中间代码文件(例如,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的方式来实现自动识别芯片架构类型并执行不同的编译命令,高效且不易出错
运行态自动适配
上层业务代码如果要根据不同的芯片类型设置不同的参数,或者走不同的代码逻辑路径,可以通过实时查询芯片类型来判断,这样代码实现了自动适配芯片类型。与编译宏控制方法的区别是,这类代码和编译无关,不同芯片架构都可以编译。
- 点赞
- 收藏
- 关注作者
评论(0)