鲲鹏不支持哪些编译
A. 广电鲲鹏ARM服务器使用遇到的第一个坑
广电鲲鹏服务器是广电运通与华为合作,基于华为鲲鹏920处理的ARM架构的服务器,我这这里测试的是GRGBanking 200 (Model RK2280)型号,2U高度,配置两个64核的Kunpeng 920处理器。
区别于Intel和AMD的X86平台,广电鲲鹏服务器使用的操作系统和应用软件都是ARM版本的。
CPU信息如下:
CPU架构显示是aarch64。指令集于X86的也不相同。
安装CentOS linux release 7.7.1908 (AltArch)操作系统
在图形化界面信息下识别不了CPU信息:
安装好操作系统之后想跑一下Unixbench跑分。Unixbench是一个类unix系(Unix,BSD,Linux)统下的性能测试工具,一个开源工具,被广泛用于测试linux系统主机的性能。
先看下GCC的版本:
在X86平台下直接执行Run命令就可以进行Unixbench跑分。
但是在ARM平台下进行Unixbench跑分出现报错:
这是由于CPU的架构不同,-march和-mtune不支持native参数,需要进行修改。
修改MakeFile文件,将 -march=armv8-a -mtune=cortex-a53
再次运行Unixbench就可以正常进行编译跑分了。
B. 方舟社区是骗子吗
在华为声称“方舟编译器,可通过架构级优化让系统操作流畅度提升24%,安卓应用流畅度可提升60%”以来,编译器这个概念就被带火了,方舟编译器也被媒体热炒。
日前,华为方舟编译器在鲲鹏社区上架,根据网站上公布的资料,方舟编译器的介绍为:
方舟编译器是基于GCC开发的交叉编译器套件,它包括了C、C++、Fortran的前端,也包括了这些语言的库(如libstdc++、libgcc等)。HCC运行在X86 linux架构服务器上,生成的二进制运行在Aarch64 架构服务器上。
一位朋友告知:
有人比较了一下,华为的方舟和GCC没有区别,只有非常少的部分不一样,方舟编译器压缩包还是叫gcc-ark。
之后,基于不为人知的原因,鲲鹏社区的方舟编译器火速下架,原网址链接也被和谐了。
关于华为鲲鹏社区上公布的方舟编译器资料,铁流咨询了业内人士,回复是:
交叉编译器,就是在x86上编译出arm的二进制代码。gcc本身就做得很好了......动态二进制翻译器,可以把x86应用程序动态翻译为ARM指令集,执行在ARM服务器上。估计效率可以达到70%左右......方舟中最核心的应该是支持动态二进制翻译。
可以说,华为鲲鹏社区上公布的方舟编译器是服务于华为ARM服务器的,由于ARM在服务器上的生态相对于X86差距过大,很多软件不支持ARM。而ARM服务器要推广,需要支持大量没有源代码的x86程序。这项应用能跑二进制代码,而当前二进制翻译效率都不是很高。所以华为打算用动态二进制翻译来弥补ARM在服务器生态上的不足。
用二进制翻译来弥补生态问题,这种思路其实早已不是什么新闻,当年的全美达就用二进制翻译兼容X86生态,最后被英特尔用专利诉讼拖死。ARM在智能手机领域火了之后,英特尔也用二进制翻译的做法来兼容ARM的生态,最终也是折戟沉沙。
之所以出现这种情况,主要是因为二进制翻译会造成性能损耗,以及二进制翻译未必能够完美解决兼容问题。就性能损耗来说,在翻译之后使英特尔的CPU性能只有原来的70%,凭空损失掉30%的性能后,使英特尔的CPU在移动端上性价比和性能功耗比这两项属性上都不如ARM,同时,移动端恰恰是对功耗指标非常敏感的,这使英特尔在市场竞争中非常不利。
还有就是兼容问题,以实际体验来说,铁流好友使用过联想搭载英特尔CPU的手机,日常使用问题不大,就是个别应用会时不时闪退。猜测可能是生态兼容方面依然存在一定问题。
而英特尔曾经面对的问题,将来华为可能都要面对。从实践上看,自己建生态才是正途,比如X86在PC和服务器的统治地位,以及ARM在智能手机上的统治地位,兼容别人的生态是投机取巧,走捷径的影响是根基不牢,结局是欲速则不达。如果没有政府输血和国企订单,在纯粹商业模式下,十有八九要悲剧。
由于鲲鹏社区上公布的方舟编译器是用在ARM服务器上的,因而铁流很疑惑为何会宣传“方舟编译器,可通过架构级优化让系统操作流畅度提升24%,安卓应用流畅度可提升60%”。
业内人士告知:
那他们应该把所有的几个系统统称为方舟编译器了......手机上重点是java虚拟机,执行的是安卓的应用,主要是java代码,也有部分ar二进制代码或者库。
对此,华为手机产品线副总裁李小龙发文回应称,华为云鲲鹏社区“这个网站不是华为消费者BG维护的网站,此编译器好像是服务器部门用的,和我们之前和P30 一起发布的方舟编译器没有任何关系。”
综合一下看,华为云鲲鹏社区的方舟编译器和华为消费终端的方舟编译器应该不是一个东西。不过,华为消费终端的方舟编译器也是过度炒作被神话的。
华为方舟编译器是如何做到第三方应用性能提升的?目前还没有官方的回应,而流传的消息则有两种。一种是说华为针对安卓原来的编译器进行了深度的魔改实现了性能的巨大提升,一种是说华为通过将Java代码绕过虚拟机直接翻译成机器码来实现的。当然还有一种混合的说法,即华为通过将Java代码绕过虚拟机直接翻译成机器码来对原来的编译器进行了深度的魔改。针对直接将Java代码翻译成底层机器码的方法,一般认为这当然有利于提升性能,但不利于应用程序的可移植性和可维护性以及操作系统的安全性。本次华为云鲲鹏社区的方舟编译器的下架事件,只不过是给被神话的方舟编译器降温挤水分而已。
另外,现在国内有一股拿开源改改就标榜自主的风气,比如此前的红芯浏览器。这种现象和以前的“汉芯”事件一样造成了很恶劣的影响。必须说明的是,“汉”、“红”都是有一定特殊含义的,这种做法造成的伤害不仅仅局限于信息产业。
铁流认为,基于开源软件做修改,就说明是某开源软件的修改版即可,比如鲲鹏社区的方舟服务器,就对就外宣传是GCC 7.3的修改版即可,不要标榜方舟编译器以免误导吃瓜群众。
类似的,华为GaussDB 数据库就标明是PostgreSQL9.2修改版,不要玩自主研发GaussDB 数据库的文字游戏。媒体在报道中出现了“外界也认为 GaussDB 内核具有超越现有开源数据库如 MySQL 与 PostgreSQL 的极致性能”,宣传上的文字游戏已经误导了不少人。
还有国内这些Linux操作系统,早期的Happy Linux、红旗Linux的叫法就挺好,把技术来龙去脉说的很清楚,现在各种麒麟OS,不了解内情的老百姓还真会被误导。
之所以出现这种现象,根源是在技术和国外有较大差距的情况下,又喜欢过度标榜自己,逐渐演变成了浮夸风。
华为鲲鹏社区方舟编译器上架后火速下架,根源是国内大环境充斥着浮夸风后翻车的结果,如果还是喜欢过分标榜自己,类似的事件不会是第一次,也不会是最后一次。
C. 在向鲲鹏处理器迁移软件时,以下哪些是可能导致编译错误或告警的原因
编译选项、数据类型不同、汇编指令