龙芯采用自有编译器
‘壹’ 龙芯处理器是risc架构吗为什么只支持linux
是
MIPS 一种RISC的处理器(ARM也是)
构架问题啊 要看系统支不支持 而不是支持不支持某个系统(其实就是市场行为决定的)。。。
Linux。。。可是最大的系统。。(不是说桌面PC系统占有率 比如安卓的就是基于linux的还有很多嵌入式设备用的系统。。)
‘贰’ 如何看待国产龙芯处理器
但这个团队完全没有市场思维,不懂市场经济,不懂杠杠原理。因此,即使再给20年,也还是一个市场边缘产品。
龙芯公司体量太小,人手严重不足,专职从事开发工作的工程师数量更缺,这是一个不争的事实。
针对这个现状,龙芯应该效仿ARM公司初期枝辩在自己弱小的时候走组队模式(傻子才会指望几百名工程师真的能击败英特尔AMD数万名工程师团队)。龙芯公司主动放弃开发具体的芯片产品,集中精力开发新一代ip核,切实提高新一代ip核的性能,然后将ip核授权给其他公司开发具体的芯片产品。
当前,包括中国在内的很多国家认识到过度依赖美国的英特尔和AMD的产品,会导致国家安全存在巨大的漏洞。想摆脱,自己又搞不定。这时候如果有一家公司能够出售ip核帮助这些国家尽快推出自己的计算机芯片来平衡因特尔和AMD的影响,我相信很多国家会乐观其成。像俄罗斯、印度、韩国、欧洲各国,想摆脱美国英特尔和AMD的国家真的是太多了。
在国内,可以把ip核授权给华为、联想、浪潮、紫光等公司。这样一来,龙芯相关产品的开发人员迅速壮大到数十万工程师,与之相关的从业人员达到数百万,完全不是梦。
虽然性能不如intel,但是真正的自主可控,是纯正的中国芯。
一、龙芯的自主可控
龙芯真正立项是2001年左右,当时奔着就是自主可控的方向去做的,所以选择了MIPS架构,并且直接买了下来,别人不再使用了,而不是所谓的授权,不像ARM这种。
在买下MIPS架构之后,龙芯团队还扩展了指令集,可以说龙芯是来源于MIPS,但又脱胎于MIPS,是从架构开始就属于自主可控的中国芯,是纯正的中国芯。
也正因为如此,所以目前龙芯在政府、军事、金融、教育等众多行业,对保密性有要求的领域,对安全可控非常重视的领域,得到了大量的使用。
二、龙芯的性能
对于一款芯片,自然是要考虑性能的,目前龙芯的性能和intel比较起来,确实有3-5年左右的差距,所以个人消费者对龙芯没什么感知,因为龙芯也没有面向个人消费领域,因为这个领域喜欢“不服跑个分”,自然龙芯很难得到认可。
更重要的是,个人消费领域,对生态要求很高,目前windows只能安装在X86架构的intel\AMD芯片上,不支持龙芯,所以使用龙芯的笔记本、台式机非常少。
三、龙芯的意义
另外,目前很多人对于龙芯有误解,觉得这芯片性能不行,完全是在靠政府补贴的货,但其实还真不是的,国家早就不补贴龙芯了。
龙芯现在是商业化动作,完全的自负盈亏的,并且在2014年龙芯就实现了盈利,2019年利润有1亿多,这些年以来龙芯纳的税早已经超过了政府给予的补贴,所以不要拿骗补来说龙芯。
龙芯一旦成功,将真正的使中国芯摆脱国外的依赖,毕竟ARM还要依赖ARM架构,但龙芯啥都不依赖,完全的100%纯正中国芯,意义重大,值得大家支持。
龙芯是基于MIPS指令集来的,而且获得了相关指令集的永久授权,可以说在指令集等知识产权上面龙芯不存在被卡脖子的问题了,不过因为MIPS指令集在目前的市场上已经没有什么地位,所以其应用领域比较有限,起码在消费级市场上面是看不到多少希望了,消费市场上的PC主要是X86架构处理器,而手机等中端主要是ARM处理器,根本就没有留给龙芯多少空间,虽然很多人说龙芯的性能达到了英特尔某些产品的多少多少,或者达到了AMD挖土机多少多少的性能,但是因为架构不同,携圆实际上这种对比对于普通用户意义不大,因为目前普通消费者的生态对龙芯的支持很差,就算能够运行Windows系统,那也是模拟的,表现自然会打折扣。
虽然龙芯在消费级大众市场上面没有什么起色,但是在一些细分领域还是可以慢慢发展的,而且有龙芯的技术在手,起码解决了有还是没有的问题,在面对国外的竞争时,底气足一些,而且龙芯的研发和应用发展过程中,也培育了自己的人才,所以长远来看,龙芯的意义还是不小的,所以初期龙芯的发展还是以政府扶持为主,后来龙芯开始自负盈亏,到了2015年据说已经开始盈利了,这点还是很不错的,算是洗刷了当年汉芯的 历史 耻辱吧,当然还是会有很猛隐缺多人质疑龙芯,估计是因为汉芯当年的负面影响太大了吧。
当然很多人会拿ARM和MIPS相比较,因为二者都是精简指令集的处理器,二者之间当然有不少差异,但是MIPS对商业不敏感,错失了移动化的浪潮,所以虽然MIPS出现的比ARM还要早,而且当初在性能上并不输于ARM,但是因为没有把握住机会,这些年MIPS的发展并不理想,ARM这些年反而发展很快,MIPS被拆分,然后卖来卖去的,基本上已经GG了,至于今后MIPS还有没有机会,目前来看,难度比较大就是了,不过我们还是希望龙芯能够在未来发展起来。
可以说,龙芯最能提现军事应用上芯片的自主可控。
2015年3月,由中科院负责研制的新一代导航卫星I1-S(北斗三号首发星)首次使用了中国制造的“龙芯”中央处理器(CPU)。之后发射的每一颗北斗导航卫星都配备了大量的龙芯。这些龙芯除了当CPU外,最典型的一个应用就是可重构技术。也就是说在轨卫星的软件随时可以通过地面上注进行重构,这就大大提高了软件的生存能力。从五年的实际应用来看,龙芯1E和龙芯1F的在轨性能还是要更好一些,处理能力和可靠性也与进口CPU持平,当然价格会是进口的一半。
龙芯是中科院北京计算机所研发,龙芯成立的目标只有一个,那就是全球第一的芯片帝国 Intel。但是目前看来,龙芯军事应用居多,普及商用还是任重而道远。
最有前景难度最大最自主的国产处理器 持续关注龙芯15-16年了 现在送去流片的3A5000CPU有望单核跑到2.5ghz 30分(转自知乎:2017年AMD在3.4G赫兹下使用gcc4.6编译器优化参数-o2,3代CPU的spec int06测试值分为:打桩机20.7 ;挖掘机19.2 ;ryzen31.5)看样子还算不错。
龙芯设计团队是国内内功最扎实的团队之一,龙芯老大胡伟武的目标是三分天下有其一 不同于其他国产CPU 可以搭上现有成熟生态体系的快车从而高速发展 龙芯要自建生态 打造一个不受外部环境制约的第三套软件体系(图片内有个别厂家预测分数)
关于龙芯的简介
一直以来,因为曾经汉芯骗局以及可能存在的故意混淆,很多人对龙芯要么不了解、要么误解,还有人是因为没看到龙芯CPU出现在普通电脑中从而认为龙芯也是骗局。就此问题我在这里简单介绍一下龙芯是怎么回事。
龙芯的团队:
龙芯团队由中科院计算所研究员胡伟武任总师于2001年起步,并于2002年正式获得立项并得到500万人民币的研发资金,至2010年龙芯团队成立公司以前,总共获得国家资金五亿人民币,对比英特尔公司2015年一年的研发投入124亿美元、2017年一年研发投入不低于130亿美元,龙芯九年间的资金合计连人家一年的零头都差远了。不过很奇怪,龙芯从2011年起就不拿扶持资金了、只拿过北京市政府和其它公私营机构和企业的合计两亿人民币的投资,但还是有大量帖子到处宣扬龙芯骗经费,而且动不动就指责龙芯骗取上百亿千亿经费!
龙芯的指令集:
一开始龙芯直接采用了MIPS指令集,在金融危机期间低价购买了MIPS指令集527条指令的永久授权,后来根据自己的规划修改并增加到1907条指令,因此现在是具备自主知识产权的龙芯指令集(loogISA),已经不能叫做MIPS指令集了,1907条指令基本情况如下:
源自MIPS的指令:
216条MIPS基础指令,获得永久授权;
311条DSP指令,获得永久授权。
龙芯自主指令:
MIPS基础指令扩展——148条loongEXT;
虚拟机扩展——5条loongVM指令;
二进制翻译扩展——213条loongBT;
向量指令扩展——1014条loongSIMD。
龙芯目前的型号命名:
龙芯1系列:分别是面向特种、嵌入应用;
龙芯2系列:面向高端嵌入、工控、特种应用、服务器、桌面;
龙芯3系列:用于PC、服务器、高级特种应用,其中3A是四核、3B是不低于3A的可多路互联(常用于服务器)。
龙芯7:目前定位是桥片,也就是南北桥芯片,现只有一款龙芯7A-1000,其中还集成了龙芯自研的第一款GPU,估计其图形性能不会比十年前的主板集显更好,但至少普通日常应用是可以的,而且该桥片支持独显,可以用英伟达或AMD的显卡来提高性能,并且龙芯正在与英伟达开展合作。
龙芯的性能:
2015年,基于大改内核GS464E、使用国内40nm低速工艺制造的主频1GHz的龙芯3A-2000四核CPU的单核性能测试SPEC CPU2006分值6~7分,达到了GS464单核的3倍左右;2016年最高主频1.5GHz的龙芯3A-3000测SPEC CPU2006单核分值11、四核分值36,也就是说SPEC CPU2006测试下,龙芯GS464E内核的每GHz得分为7分,距离AMD和英特尔的每GHz得分10~15分还有距离。
2019年12月24日发布的基于新研发GS464V内核的龙芯3A/B-4000每GHz分值提高到10分,主频提高到2.0GHz,因此得分21分,接近了AMD前两年的挖掘机CPU,距离英特尔和AMD现在主流的得分在30~40分的CPU差距已经不太大了。
龙芯的经营:
当然,微软和谷歌不可能给龙芯做兼容,因此虽然龙芯通过二进制模拟X86指令的方式实现了安装运行WindowsXP,但较大软件和专业性的软件(比如PS、股票、 游戏 等软件)还不能使用,这样一来龙芯还不能正常使用Windows和安卓,那么龙芯目前就无法进入消费产业领域,普通用户自然就看不到龙芯处理器。
所以,龙芯团队于2010年离开中科院成立龙芯公司开始自负盈亏以后,起步靠北京市政府天使投资近两亿人民币维持存在,从低端嵌入领域起步,扩展到行业领域和特种、定制领域,毕竟作为企业得自己赚钱生存,能活下来才谈得上理想,不过龙芯在行业领域混的还不错,上到网络服务器、存储服务器、卫星用的抗辐照处理器,中到行业定制电脑、机顶盒、电视机CPU、军用指挥控制系统、高温高压等特种处理器,下至红绿灯、充电桩等低端嵌入等等应用场景都在做,同时也在做软件等业务。
2015年龙芯实现扭亏为盈,除持续增长的嵌入和特种等领域业务以外,龙芯桌面应用也开始增长,2018年龙芯桌面CPU销售5万片,占中国桌面电脑CPU市场份额的0.1%;2019年龙芯CPU中的桌面用CPU销售达50万片,占国内桌面CPU市场份额的1%;
胡伟武说,以前龙芯连英特尔的影子都看不到,2020年龙芯从性能上可以看到英特尔的后脑勺,并在局部形成体系,在行业市场领域应该能做到国内企业第一位,之后会扩展业务逐渐向消费领域进军,争取到2030年后能与英特尔、AMD、IBM同台竞技。
注:有兴趣可以在B站搜索“龙芯”,可以找到2019年4月19日龙芯公司的张福新博士在山东大学做了题目为《从inside到outside,龙芯的发展和产业生态建设》的演讲,2019年6月龙芯总师胡伟武在中山大学的演讲,2019年12月24日龙芯发布会中胡伟武的演讲,这些里面有超出一般想象的信息,比如:通过这两年的局部试点,公务员用的设备即将大规模使用龙芯设备;龙芯在军用装备领域已经呈面上铺开趋势、还为军队制作了数字地球,结合以前的信息来看(官方主动讲的,不涉及泄密),龙芯军用范围至少包括指挥控制、导弹制导、精确定位、坦克等战车控制或火控系统、军用信息系统;等等等等
必须要有存在
龙芯必须存在,别家的石头,不可靠!
虚心向优秀的企业学习,坚持独立自主,这样才能发展有底气。
支持国产,说明国家芯片更上一层楼。
‘叁’ 龙芯1b linux下 程序用什么编译执行
Linux下C程序的编辑,编译和运行以及调试
要使用的工具:
编辑:vim(vi)
编译和运行:gcc
调试:gdb
安装很简单(以下是以在CentOS中安装为例):
1
yum vim gcc gdb
1.使用vim编辑源文件
首先,打开终端练下手:
1
vim hello.c
(进入一般模式)
按下"i",进入编辑模式,在编辑模式下输入:
1
#include <stdio.h>
2
int main(){
3
printf("Hello, World!\n");
4
return 0;
5
}
输入完成,按"ESC"键,回到一般模式,然后按下":wq",即可保存并退出vim。
附注:
在一般模式下,按下":%!xxd"查看hello.c的16进制形式,回到文本格式按下":%!xxd -r"。
查看hello.c的二进制形式,按下":%!xxd -b",这是hello.c保存在磁盘上的存储状态。
至此,在vim已完成C源文件的编辑。
关于vim的使用,直接上网搜索vim,相关的文章是相当多的;或者参考vim的联机帮助,在命令行上键入"man vim"即可。
2.编译和运行
gcc命令的基本用法:
1
gcc[options] [filenames]
其中,filenames为文件名;options为编译选项
当不使用任何编译选项编译hello.c时,gcc将会自动编译产生一个a.out的可执行文件:
1
[root@localhost c]# ls
2
hello.c
3
[root@localhost c]# gcc hello.c
4
[root@localhost c]# ls
5
a.out hello.c
执行:
1
[root@localhost c]# ./a.out
2
Hello, World!
使用-o编译选择,可以为编译后的文件指定一个名字:
1
[root@localhost c]# ls
2
a.out hello.c
3
[root@localhost c]# gcc hello.c -o hello
4
[root@localhost c]# ls
5
a.out hello hello.c
执行:
1
[root@localhost c]# ./hello
2
Hello, World!
注意:使用-o选项时,-o后面必须跟一个文件名,即:-o outfile。
为了便于描述后面的选项,删除hello和a.out可执行文件。
结合介绍gcc的编译选项,分析hello.c的编译和执行过程:
(1)预处理阶段:使用-E选项,对输入文件只做预处理不编译。当使用这个选项时,预处理器的输出被送到标准输出而不是存储到文件。如果想将预处理的输出存储到文件,可结合-o选项使用,使用如下:
1
[root@localhost c]# ls
2
hello.c
3
[root@localhost c]# gcc -E hello.c -o hello.i
4
[root@localhost c]# ls
5
hello.c hello.i
使用less查看下hello.i:
1
[root@localhost c]# less hello.i
(2)编译阶段:使用-S选项,将C程序编译为汇编语言文件后停止编译,gcc编译产生汇编文件的默认后缀为.s。
1
[root@localhost c]# ls
2
hello.c hello.i
3
[root@localhost c]# gcc -S hello.c
4
[root@localhost c]# ls
5
hello.c hello.i hello.s
在gcc -S hello.c处,使用C源文件编译,也可以用gcc -S hello.i的预处理文件编译,结果一样。
使用-S编译时,也可以和-o结合使用指定编译产生的汇编语言文件的名字:
1
[root@localhost c]# ls
2
hello.c hello.i hello.s
3
[root@localhost c]# gcc -S hello.i -o hello_s.s
4
[root@localhost c]# ls
5
hello.c hello.i hello.s hello_s.s
可使用less命令查看汇编代码。
(3)汇编阶段:使用-c选项,将C源文件或者汇编语言文件编译成可重定向的目标文件(二进制形式),其默认后缀为.o。
1
[root@localhost c]# ls
2
hello.c hello.i hello.s hello_s.s
3
[root@localhost c]# gcc -c hello.s
4
[root@localhost c]# ls
5
hello.c hello.i hello.o hello.s hello_s.s
也可以和-o结合使用指定编译产生的目标文件的名字:
1
[root@localhost c]# gcc -c hello.s -o hello.o
由于hello.o是二进制文件,使用less查看显示为乱码;
然后使用vim hello.o打开也显示为乱码,按下":%!xxd"查看其16进制形式,按下":%!xxd -r"退出 16进制查看模式,回到乱码状态。在退出vim时,若提示已经修改了文件,则使用":q!"强制退出。
(4)链接阶段:链接器将可重定向的目标文件hello.o以及库文件(如printf.o)执行并入操作,形成最终可执行的可执行目标文件。
1
[root@localhost c]# ls
2
hello.c hello.i hello.o hello.s hello_s.s
3
[root@localhost c]# gcc hello.o
4
[root@localhost c]# ls
5
a.out hello.c hello.i hello.o hello.s hello_s.s
可使用-o选项,指定输出文件(即可执行目标文件)的名字:
1
[root@localhost c]# gcc hello.o -o hello
2
[root@localhost c]# ls
3
a.out hello hello.c hello.i hello.o hello.s hello_s.s
(5)执行阶段:
1
[root@localhost c]# ./a.out
2
Hello, World!
3
[root@localhost c]# ./hello
4
Hello, World!
由此,看出前面使用的gcc hello.c -o
hello命令,将hello.c直接编译为可执行的目标文件,中间经过于处理器的预处理阶段(源文件到预处理文件),编译器的编译阶段(预处理文件到汇
编文件),汇编器的汇编阶段(汇编文件到可重定向的目标文件),链接器的链接阶段(可重定向的目标文件到可执行的目标文件)。
还有其他的选项如下:
-Idir:dir是头文件所在的目录
-Ldir:dir是库文件所在的目录
-Wall:打印所有的警告信息
-Wl,options:options是传递给链接器的选项
编译优化选项:-O和-O2
-O选项告诉GCC 对源代码进行基本优化。这些优化在大多数情况下都会使程序执行的更快。-O2选项告诉GCC产生尽可能小和尽可能快的代码。
-O2选项将使编译的速度比使用-O时慢。但通常产生的代码执行速度会更快。
除了-O和-O2优化选项外,还有一些低级选项用于产生更快的代码。这些选项非常的特殊,而且最好只有当你完全理解这些选项将会对编译后的代码产生什么样的效果时再去使用。这些选项的详细描述,请参考GCC的联机帮助,在命令行上键入"man gcc"即可。
调试选项:-g(使用详情见第3部分)
-g选项告诉GCC产生能被GNU调试器使用的调试信息以便调试你的程序。
即:在生成的目标文件中添加调试信息,所谓调试信息就是源代码和指令之间的对应关系,在gdb调试和objmp反汇编时要用到这些信息。
3.调试
虽然GCC提供了调试选项,但是本身不能用于调试。Linux 提供了一个名为gdb的GNU调试程序。gdb是一个用来调试C和C++程序的调试器。它使你能在程序运行时观察程序的内部结构和内存的使用情况。以下是gdb所提供的一些功能:
a.它使你能监视你程序中变量的值;
b.它使你能设置断点以使程序在指定的代码行上停止执行;
c.它使你能一行行的执行你的代码。
(1)启动gdb
在命令行上键入"gdb"并按回车键就可以运行gdb了,如下:
1
[root@localhost c]# gdb
2
GNU gdb (GDB) Red Hat Enterprise Linux (7.2-60.el6_4.1)
3
Copyright (C) 2010 Free Software Foundation, Inc.
4
License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it.
5
There is NO WARRANTY, to the extent permitted by law. Type "show ing"
6
and "show warranty" for details.
7
This GDB was configured as "x86_64-redhat-linux-gnu".
8
For bug reporting instructions, please see:<>.
9
(gdb)
当启动gdb之后,即可在命令行上输入命令进行相关的调试操作。
也可以以下面的方式来启动gdb:
1
[root@localhost c]# gdb hello
这种方式启动gdb,直接将指定调试的程序文件装载到调试环境中。也就是让gdb装入名称为filename的可执行文件,从而准备调试。
为
了能够进行调试,当前调试的程序文件中必须包含调试信息。其中调试信息包含程序中的每个变量的类型和其在可执行文件里的地址映射以及源代码的行号,gdb
利用这些信息使源代码和机器码相关联。因此在使用gcc编译源程序的时候必须使用-g选项,以便将调试信息包含在可执行文件中。
例如:
1
[root@localhost c]# gcc -g hello.c -o hello
gdb还提供了其他的启动选项,请参考gdb的联机帮助。在命令行上键入"man gdb"并回车即可。
(2)gdb基本命令
<1>单步执行和跟踪函数调用
程序编辑如下:
01
#include <stdio.h>
02
int add_range(int low, int high){
03
int i;
04
int sum;
05
for(i = low; i <= high; i++){
06
sum = sum + i;
07
}
08
return sum;
09
}
10
11
int main(){
12
int result[100];
13
result[0] = add_range(1, 10);
14
result[1] = add_range(1, 100);
15
printf("result[0] = %d\nresult[1] = %d\n", result[0], result[1]);
16
return 0;
17
18
}
编译和运行如下:
1
[root@localhost gdb_demo]# vim test1.c
2
[root@localhost gdb_demo]# gcc test1.c -o test1
3
[root@localhost gdb_demo]# ls
4
test1 test1.c
5
[root@localhost gdb_demo]# ./test1
6
result[0] = 55
7
result[1] = 5105
‘肆’ 为什么没有国产的C/C++的编译器
首先:国产有编译器,比如龙芯就用
其次:开发编译器难度非常大,编译器、操作系统、数据库这三样是程序界的三座大山,不是 所有牛奶都叫愚公。国产即使有编译器我认为也不是完全从零开发的。龙芯虽然有了自己的编译器也只是针对自己的平台编译,不具备通用性。一句话,中国目前缺少大企业的眼光和决心以及实力
‘伍’ 突破封锁!国产芯片终于有了自己的指令集
在半导体芯片领域, 指令系统是一切软硬件生态的起点 。
以大家最熟悉的ARM和X86为例,它们就分别隶属于RISC精简指令集和CISC复杂指令集。
随着物联网、5G、AI新兴领域的兴起,RISC-V和MIPS两大精简指令集架构也频繁出现在我们的视野内。
所谓芯片,其实都是由半导体堆出来的硬件电路,晶体管越多往往代表性能和功能越强。但无论是超级计算机还是智能手环, 它们搭载的处理器都只能识别二进制数据 。
想让这些芯片正常运行,处理复杂的应用场景,首先就要教会它们学会类似九九乘法表的“算法口诀”和“数学公式”, 而这些算法口御桥早诀/公式其实就是所谓的“指令集” 。
换句话说, 指令集的功能和效率(算法口诀/公式的类型),在很大程度上就决定了各类芯片的成就和算力的上限 。
虽然海思麒麟、龙芯、兆芯、海光、紫光、澎湃等国产芯片都在各自领域取得了不俗的成绩,但无论是它们,还是其他采用X86、ARM、MIPS、RISC-V、Alpha和Power,选择封闭、授权还是开源的国产芯片项目,其底层的指令集根基都掌握在别人手里。
因此, 只有从指令系统的根源上实现自主,才能打破软件生态发展受制于人的枷锁 。
好消息是,日前龙芯中科就正式发布了自主指令系统架构“Loongson Architecture”,简称为“龙芯架构”或者“LoongArch”。它包括基础架构部分,以及向量扩展LSX、高级向量扩展LASX、虚拟化LVZ、二进制翻译LBT等扩展部分,总共接近2000条指令。同时不包含龙芯此前使用的MIPS指令系统, 并具有完全自主、技术先进、兼容生态三个方面的特点 。
目前,采用LoongArch的龙芯3A5000处理器芯片已经流片成功,完整操作系统也已稳定运行,它能对多种国际主流指令系统的高效二进制翻译链,并成功演示了运行基于其它主流指令系统的复杂应用程序。
LoongArch对MIPS指令的翻译效率是100%性能,对ARM指令翻译的效率是90%性能,对x86的翻译效率是80%性能。
此外,龙芯中科还在联合产业链伙伴在适当的时间建立开放指令系统联盟,在联盟成员内免费共享LoongArch及有关龙芯IP核。
所谓IP核,我们可以理解为ARM旗下的Cortex-A78和Cortex-A55等,后置都是基于ARMv8指令集打造的核心IP架构,并授权给了高通、三星、联发科等芯片商开发SoC移动平台。
目前,ARM刚刚发布了ARMv9指令集,如果不出意外将在下半年发布的Cortex-A79和Cortex-X2架构就将采用这套指令集。
近10年来32位手机处理器都是基于ARMv7指令集打造,在A75之前的处理器则是基于ARMv8-A设计,随后都是ARMv8.2-A一统江湖
ARM指令集可以细分为Cortex-A(ARMv-A)、Cortex-R(ARMv-R)和Cortex-M(ARMv-M),分别适用于不同类型的芯片
比如车载芯片使用的就是Cortex-R(ARMv-R)核心IP
总之, 设计出一个纯国产的自主指令集只是万里长征的第一步 ,关键是后续要做出懂这个指令集的CPU(已经有了龙芯3A5000),再往后还需要镇雀让和人类交互的“翻译家”——编译器懂这个指令集。也就是需要不断完善软硬件生态,让我们熟悉的系统、办公、 娱乐 和 游戏 程序都能运行在这套指令集打造的芯片之上。如果做不到这一步,国产指令集和相关芯片也只是空中楼阁而已、
作为国人,我们真心希望LoongArch这种国产指令集可以取得成功,今后无论手机、电脑、车载还是其消冲他半导体芯片都能以使用国产指令集为荣,并走向世界。
扩展小知识
那么,指令集又是如何影响芯片执行效率的?
我们以RISC和CISC,让它们分别执行“清洁地面”的命令为例,看看其背后的指令逻辑差异。
逻辑上,“清洁地面”的大概思路是先拿起扫帚,扫地;拿起簸箕,用扫帚把垃圾扫进簸箕;放下扫帚和簸箕,润湿墩布;再用墩布擦地,直至清洁地面完成。
对CISC复杂指令集而言,很容易理解“清洁地面”这套逻辑,下达“清洁地面”命令后,就能按照规则和顺序,一步步自动完成。
对于RISC精简指令集而言,它一下子可理解不了如此复杂的逻辑,必须将复杂的逻辑顺序拆分,然后按照一项项简单的命令去完成复杂的操作。
比如,想让RISC精简指令集完成“清洁地面”命令,就必须依次下达“拿起扫帚”、“扫地”、“拿起簸箕”、“把垃圾扫进簸箕”、“放下扫帚和簸箕”、“润湿墩布”、“墩地”……
看起来CISC复杂指令集方便又强大?没错,如果要同时清洁无数房间地面,你只要对着不同的房屋说“清洁地面”、“清洁地面”、“清洁地面”……即可。
而对RISC精简指令集,你需要对着每个房间都重复一整套复杂的命令,如果下达指令的人嘴巴不够快(带宽不够大),那清洁地面的效率自然受到影响,难以和CISC复杂指令集抗衡。
但是, 现实生活中,并非所有房间的地面都需要一整套的清洁流程,比如你只需要墩地一个步骤。
对RISC精简指令集而言,你只需对着需要清洁的房间说“墩地”、“墩地”、“墩地”即可。而由于CISC复杂指令集没有单独的“墩地”动作,操作起来就要麻烦许多,完成相同的墩地操作会消耗更多资源,翻译过来就是发热更高更费电。
这就是RISC和CISC的本质区别。 说不上谁好谁坏,只能说它们所擅长的领域各不相同。
以ARM架构为代表的RISC精简指令集,最适合针对常用的命令进行优化,赋予它更简洁和高效的执行环境,对不常用的功能则通过各种精简指令组合起来完成。
RISC是将复杂度交给了编译器,牺牲了程序大小和指令带宽,从而换取了简单和低功耗的硬件实现。
对以X86架构为代表的CISC复杂指令集,则适合更加复杂的应用环境。
CISC是以增加处理器本身复杂度作为代价,以牺牲功耗为代价去换取更高的性能。不过,X86架构则可通过对新型指令集的支持(如SSE4.1、AVX-512等),在一定程度上提高指定任务的执行效率和降低功耗。
现在芯片领域是RISC攻,CISC守的格局。以苹果M1为代表的ARM架构RISC指令集芯片正在染指传统的X86 PC市场,而且大概率会取得成功。虽然以英特尔为代表的X86阵营曾多次试图反击Android生态(如早期的Atom芯片),但最终却都以失败告终。ARM最新发布的ARMv9指令集,就给了ARM芯片入侵X86 PC大本营更多弹药,也许用不了多久Windows ARM版PC也将成为一个更加重要的PC品类。
‘陆’ 龙芯与Linux问题
可以,但更建议你用ubuntu linux ,要容易上手些,使用也方便,不会打击新手自信。而且ubuntu 也有龙芯版的,可以装在龙芯上。它们本质是一样的。
原则上只要有相应的编译器,开源软件都可以运行在龙芯上。
虽然CPU不同,但是世界上所有的程序,绝大部分是C/C++语言写的,它是跨平台的语言,只要有相应的编译器(GCC)就能编译后运行在完全不同的CPU上。而linux 程序基本都是开源的,龙芯出现后肯定有很多人去移植和开发编译器。所以,你的程序只要是C/C++写的就能运行,当然,要用龙芯专用的编译器编译一次。
当然,Linux 脚本类程序不需编译也可直接运行。