少女:姐姐姐姐,硬件已经固定死了,那还有没办法再优化一下性能呐?
曦儿:飞腾提供了PhyGCC编译器,或许会对你有帮助~
编译器是啥?
编译器的主要的功能是将便于人类编写、阅读、维护的高级语言所写作的源代码,翻译为计算机能解读、运行的低级语言的程序,也就是可执行文件
日常接触到的C、C++、Python、Java等等,都是高级语言,作为高级语言想要被执行,就需要通过编译的手段将其转换为机器语言,换句话说,编译就是将人看得懂的代码,或者说平时所敲的代码转换为处理器能够理解并执行的机器码(简单来说,处理器只能识别二进制指令,它只认识0和1)
为何要有编译器
这个故事问题还得计算机语言的历史说起,世界第一段程序,是通用计算机之父巴贝奇的师妹,著名诗人拜伦之女Ada Lovelace在打孔卡上写出来的。当时,程序设计人员都要把程序编排成010101这样的形式,在纸上打孔,再送到机器里去读。这减少了相当多的工作,写一个卡片能使用相当久,也避免了重复造轮子
因此,当程序员开始在卡片上写这些程序时,人们开始构建程序库(libraries)。但随着时间的推移,大部分的程序渐渐的有了一些规则手册来指导编写。但还是很繁琐,毕竟编写和记忆0和1的各种组合,对于很多人来说相当于是“天书”
一个传奇的人物出现了,美国海军的传奇天才格雷斯·霍珀(Grace Hopper),在海军服役时,曾被派到哈佛大学,与艾肯博士一起工作,负责为美国国防部资助的Mark-II型机电计算机编制程序。在二战结束后,她加入了发明ENAIC电子计算机的莫克利和艾克特创办的“电子控制公司”,开始了她改变世界的光辉旅程——打开编译器和编程语言的新世界
Grace Hopper是耶鲁大学第一位女博士,第一位女性美国海军将军,发明了世界上第一个编译器,第一个全美科技奖女性获得者,Cobol语言之母...谁说女生不适合学计算机搞计算机呢
Grace在加入莫克利和艾克特的公司,便产生了一种想法。她想设计一种程序,让人可以用类似英文的语法,把想做的事写下来,然后用这个程序把英文翻译成机器能执行的语言,交给机器去执行,她把这个革命性的想法付诸实践,发明了世界上第一个编译器A-0。这是编译器的始祖,也是现代编程语言的始祖
1952年,Grace和莫克利研究出了一种较为接近自然语言的计算机语言——汇编语言Flow-Matic。汇编语言本质上是使用助记符来代替机器语言01010101,进了一大步,但这种语言对计算机硬件依赖很大。不同的计算机,汇编语言不相通
IBM公司在1946年后从制表机全面转型电子计算机市场,并投入巨资招揽了世界众多顶尖的计算机人才。其中一位叫约翰·贝克斯(John W. Backus),这位出身证券经纪人家庭的富二代,酷爱数学,加入IBM公司三年后,发明了一种快速编程的FORTRAN语言。同时,他深入研究了Grace发明的Flow-Matic的编译器,应用到FORTRAN的编译器中
FORTRAN的问世,在计算机史上具有划时代的意义。它是世界第一个高级编程语言,使计算机语言从原始的低级汇编语言走到人人易懂的境界,计算机不再是科学家的专利。FORTRAN的诞生,孕育了软件产业。此后,计算机高级编程语言进入蓬勃发展的时代
回归正题,多数Linux发行版都会默认安装GCC编译器,那飞腾又不傻,为啥放着开源的GCC不用大费周章搞个自己的编译器呢?
众所周知,GCC是一个跨平台的编译器,能够配合不同体系架构的CPU使用,同时也意味着难以对某个特定架构进行针对性优化,大而广当然难以和专而精比拼,所以GCC虽然有广泛的硬件支持,但是在各硬件平台上却并不是性能最优,很多处理器厂商都开发了自己的编译器(以闭源为主,应该也有部分开源的),最著名的莫过于Intel的ICC,别的还有AMD的AOCC、英伟达的NVC等等,龙芯也有自己的编译器,那飞腾也不例外,推出了PhyGCC
PhyGCC介绍
PhyGCC 10.3.1兼容主流 GCC,针对飞腾的FTC66x微架构做了专门优化,并且集成了优化过的基础库,是一款 Linux下深度适配飞腾CPU的高性能编译器,以二进制包形式发布,支持AArch64架构
获取PhyGCC
PhyGCC编译器并没有一般意义上的安装程序(eg. install.sh),也没有Makefile,只需要下载并解压到便于使用的目录,最后配置环境变量即可
可以通过飞腾开发者平台下载到PhyGCC包,或是通过如下命令下载到当前目录
wget https://oss-nc-beijing-2.cecloudcs.com/public-media/public-media/phygcc-10.3.1-20230508-aarch64-linux.tar.xz
下载完成后,为便于日后管理,需要新建一个目录来放置PhyGCC,这里用的是/opt/compiler
操作根目录需要root权限,否则会报错,可以给命令行加上sudo
sudo mkdir -p /opt/compiler
然后就可以把下好的PhyGCC包移动到刚刚创建的目录中
sudo mv phygcc-10.3.1-20230508-aarch64-linux.tar.xz /opt/compiler
sudo cd /opt/compiler
最后,解压PhyGCC包即可,解压完成后压缩包不再需要,可以删了
sudo tar Jxvf phygcc-10.3.1-20230508-aarch64-linux.tar.xz
sudo rm -f phygcc-10.3.1-20230508-aarch64-linux.tar.xz```
现在就可以通过/opt/compiler/phygcc-10.3.1-20230508-aarch64-linux/bin/gcc
命令行去使用PhyGCC了
openkylin@phytiumPi:~$ /opt/compiler/phygcc-10.3.1-20230508-aarch64-linux/bin/gcc --version
gcc (PhyGCC) 10.3.1
Copyright © 2020 Free Software Foundation, Inc.
本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保;
包括没有适销性和某一专用目的下的适用性担保。
配置环境变量
PhyGCC已经安装好并成功运行了,但是,要如何让系统使用PhyGCC作为默认GCC编译器呢?这就涉及到环境变量了
先来看看现在默认的GCC编译器是啥
可以看出,目前默认GCC编译器是OpenKylin系统中自带的GCC 9.3
为了防止意外,先给当前用户设置临时环境变量,打开终端,执行如下命令
export PATH=/opt/compiler/phygcc-10.3.1-20230508-aarch64-linux/bin:$PATH
export INCLUDE=/opt/compiler/phygcc-10.3.1-20230508-aarch64-linux/include:$INCLUDE
export LD_LIBRARY_PATH=/opt/compiler/phygcc-10.3.1-20230508-aarch64-linux/lib64:$LD_LIBRARY_PATH
可以看到,配置环境变量后,执行gcc
命令默认执行的已经是PhyGCC了
确认无误,就可以把环境变量写入系统配置文件了,sudo vi /etc/profile
,使用方向键拉到最后,按i进入编辑模式,回车空一行后,粘贴如下代码即可
export PATH=/opt/compiler/phygcc-10.3.1-20230508-aarch64-linux/bin:$PATH
export INCLUDE=/opt/compiler/phygcc-10.3.1-20230508-aarch64-linux/include:$INCLUDE
export LD_LIBRARY_PATH=/opt/compiler/phygcc-10.3.1-20230508-aarch64-linux/lib64:$LD_LIBRARY_PATH
曦儿碎碎念:一定要小心仔细检查:$PATH
、:$INCLUDE
及:$LD_LIBRARY_PATH
前万万不能有任何空格或回车,否则重启后系统功能会出现大面积的严重异常,很多命令都用不了
本期教程就到这了,如果对你也有帮助的话,可以给曦儿点个赞哟~