ARM架构与CPU

编程知识 更新时间:2023-04-27 11:37:55

首先介绍两大主流CPU架构——ARM和x86的构造,然后从性能、扩展能力、操作系统的兼容性、软件开发的方便性及可使用工具的多样性及功耗这五个方面进行对比,扩展介绍RISC精简指令集。介绍CPU参数解读和概念辨析。最后介绍一些和CPU相关的Linux命令。

一、ARM架构与x86架构

我个人理解ARM和x86的区别在于指令集,也就是CPU对硬件发出的指令集合不同。ARM架构就是综合考虑指令集的特点、性能等因素,设计CPU、寄存器、运算器等的结构,最后形成基于ARMCPU的处理器架构。

1.什么是ARM架构

ARM架构过去称作进阶精简指令集机器(AdvancedRISCMachine,更早称作:AcornRISCMachine),是一个32位精简指令集(RISC)处理器架构,其广泛地使用在许多嵌入式系统设计。由于节能的特点,ARM处理器非常适用于移动通讯领域,符合其主要设计目标为低耗电的特性。

在今日,ARM家族占了所有32位嵌入式处理器75%的比例,使它成为占全世界最多数的32位架构之一。ARM处理器可以在很多消费性电子产品上看到,从可携式装置(PDA、移动电话、多媒体播放器、掌上型电子游戏,和计算机)到电脑外设(硬盘、桌上型路由器)甚至在导弹的弹载计算机等军用设施中都有他的存在。在此还有一些基于ARM设计的派生产品,重要产品还包括Marvell的XScale架构和德州仪器的OMAP系列。

2.ARM架构图

下图所示的是ARM构架图。它由32位ALU、若干个32位通用寄存器以及状态寄存器、32*8位乘法器、32*32位桶形移位寄存器、指令译码以及控制逻辑、指令流水线和数据/地址寄存器组成。

1、ALU:它有两个操作数锁存器、加法器、逻辑功能、结果以及零检测逻辑构成。

2、桶形移位寄存器:ARM采用了32*32位的桶形移位寄存器,这样可以使在左移/右移n位、环移n位和算术右移n位等都可以一次完成。

3、高速乘法器:乘法器一般采用“加一移位”的方法来实现乘法。ARM为了提高运算速度,则采用两位乘法的方法,根据乘数的2位来实现“加一移位”运算;ARM高速乘法器采用32*8位的结构,这样,可以降低集成度(其相应芯片面积不到并行乘法器的1/3)。

4、浮点部件:浮点部件是作为选件供ARM构架使用。FPA10浮点加速器是作为协处理方式与ARM相连,并通过协处理指令的解释来执行。

5、控制器:ARM的控制器采用的是硬接线的可编程逻辑阵列PLA。

6、寄存器。

3.x86架构

当然,这个架构图并不是所有的都是如此,根据不同的主板,平台,架构是略有差别的比如说,目前很多主板已经将北桥集成到CPU当中,将南桥集成为PCH,但大致的框架还是如此的。下面对这个架构图上的各个内容分别进行一些简介:

1、CPU,大家都不陌生的名词,中央处理器,计算机的核心大脑。

2、北桥(North Bridge Chipset):北桥是电脑主板上的一块芯片,位于CPU插座边,起连接作用。

3、南桥芯片(South Bridge)是主板芯片组的重要组成部分,一般位于主板上离CPU插槽较远的下方,PCI插槽的附近,这种布局是考虑到它所连接的I/O总线较多,离处理器远一点有利于布线。

4、内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。

5、显卡(Video card,Graphics card)全称显示接口卡,又称显示适配器,是计算机最基本配置、最重要的配件之一。

6、接口

7、网卡是工作在链路层的网络组件,是局域网中连接计算机和传输介质的接口,不仅能实现与局域网传输介质之间的物理连接和电信号匹配,还涉及帧的发送与接收、帧的封装与拆封、介质访问控制、数据的编码与解码以及数据缓存的功能等。

8、声卡的基本功能是把来自话筒、磁带、光盘的原始声音信号加以转换,输出到耳机、扬声器、扩音机、录音机等声响设备,或通过音乐设备数字接口(MIDI)使乐器发出美妙的声音。

9、SATA(Serial Advanced Technology Attachment,串行高级技术附件)是一种基于行业标准的串行硬件驱动器接口,是由Intel、IBM、Dell、APT、Maxtor和Seagate公司共同提出的硬盘接口规范。

10、硬盘是电脑主要的存储媒介之一,由一个或者多个铝制或者玻璃制的碟片组成。碟片外覆盖有铁磁性材料。

11、总线。

参考资料:

一文看懂arm架构和x86架构有什么区别:

https://blog.csdn/bleauchat/article/details/90114342

二、ARM架构和x86架构有什么区别

这一章节从五个维度进行了对比,由于成文时间比较早,数据比较过时,不过比较的维度值得学习。

1.性能

X86结构的电脑无论如何都比ARM结构的系统在性能方面要快得多、强得多。X86的CPU随便就是1G以上、双核、四核大行其道,通常使用45nm(甚至更高级)制程的工艺进行生产;而ARM方面:CPU通常是几百兆,最近才出现1G左右的CPU,制程通常使用不到65nm制程的工艺,可以说在性能和生产工艺方面ARM根本不是X86结构系统的对手。

但ARM的优势不在于性能强大而在于效率,ARM采用RISC流水线指令集,在完成综合性工作方面根本就处于劣势,而在一些任务相对固定的应用场合其优势就能发挥得淋漓尽致。

2.扩展能力

X86结构的电脑采用“桥”的方式与扩展设备(如:硬盘、内存等)进行连接,而且x86结构的电脑出现了近30年,其配套扩展的设备种类多、价格也比较便宜,所以x86结构的电脑能很容易进行性能扩展,如增加内存、硬盘等。

ARM结构的电脑是通过专用的数据接口使CPU与数据存储设备进行连接,所以ARM的存储、内存等性能扩展难以进行(一般在产品设计时已经定好其内存及数据存储的容量),所以采用ARM结构的系统,一般不考虑扩展。基本奉行“够用就好”的原则。

3.操作系统的兼容性

X86系统由微软及Intel构建的Wintel联盟一统天下,垄断了个人电脑操作系统近30年,形成巨大的用户群,也深深固化了众多用户的使用习惯,同时x86系统在硬件和软件开发方面已经形成统一的标准,几乎所有x86硬件平台都可以直接使用微软的视窗系统及现在流行的几乎所有工具软件,所以x86系统在兼容性方面具有无可比拟的优势。

ARM系统几乎都采用Linux的操作系统,而且几乎所有的硬件系统都要单独构建自己的系统,与其他系统不能兼容,这也导致其应用软件不能方便移植,这一点一直严重制约了ARM系统的发展和应用。GOOGLE开发了开放式的Android系统后,统一了ARM结构电脑的操作系统,使新推出基于ARM结构的电脑系统有了统一的、开放式的、免费的操作系统,为ARM的发展提供了强大的支持和动力。

4.软件开发的方便性及可使用工具的多样性

X86结构的系统推出已经近30年,在此期间,x86电脑经过飞速发展的黄金时期,用户的应用、软件配套、软件开发工具的配套及兼容等工作,已经到达非常成熟甚至可以说是完美的境界。所以使用X86电脑系统不仅有大量的第三方软件可供选择,也有大量的软件编程工具可以帮助您完成您所希望完成的工作。

Arm结构的电脑系统因为硬件性能的制约、操作系统的精简、以及系统兼容等问题的制约,造成Arm结构的电脑系统不可能像X86电脑系统那样有众多的编程工具和第三方软件可供选择及使用,ARM的编程语言大多采用C和JAVA。

对这一点的比较,更直接的结论是:基于x86结构电脑系统平台开发软件比arm结构系统更容易、更简单、实际成本也更低,同时更容易找到第三方软件(免去自己开发的时间和成本),而且软件移植更容易。

从以上对比分析,给了我们的一个很清晰的感觉,ARM和X86结构的电脑根本就无法对比,ARM根本就不是X86电脑的的对手。是的,如果只考虑上述几个方面的要数,ARM确实无法与X86电脑竞争,甚至连比较的资格都没有。但是近1、2年,ARM的产品在终端应用特别是手持终端应用飞速发展(如:智能手机、平板电脑等),其销售数量已经远远超出x86结构的电脑销售数量,可见ARM是具有其与X86结构电脑不可对比的优势。该优势就是:功耗。

5.功耗

X86电脑因考虑要适应各种应用的需求,其发展思路是:性能+速度。20多年来x86电脑的速度从原来8088的几M发展到现在随便就是几G,而且还是几核,其速度和性能已经提升了千、万倍,技术进步使x86电脑成为大众生活中不可缺少的一部分。但是x86电脑发展的方向和模式,使其功耗一直居高不下,一台电脑随便就是几百瓦,即使是号称低功耗节能的手提电脑或上网本,也有十几、二十多瓦的功耗,这与ARM结构的电脑就无法相比。

参考资料:

一文看懂arm架构和x86架构有什么区别:

https://blog.csdn/bleauchat/article/details/90114342

三、RICS指令集、ARM架构历史及技术实现

以下两篇文章若有兴趣可以学习。

ARM指令集 --RISC精简指令集

https://blog.csdn/xiangxistu/article/details/83018715

一小时教你学会 ARM 架构

https://blog.csdn/GitChat/article/details/78410083?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.not_use_machine_learn_pai&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.not_use_machine_learn_pai

四、CPU参数解读及概念辨析

这一章主要介绍CPU的主要参数——主频、核数、线程数,以及这些参数与性能的关系,各种场景如何根据参数选择CPU。物理CPU、逻辑CPU和物理核的概念。

1.主频

首先理解频率、外频、倍频的概念:

频率=次数/时间,2.3Ghz,就是每个核每秒2.3*10的9次方次。

在CPU这个复杂的数字系统中,为了确保内部所有硬件单元能够协同快速工作,CPU架构工程师们往往会设计一套时钟信号与系统同步进行操作。时钟信号是由一系列的脉冲信号构成,并且总是按一定电压幅度、时间间隔连续发出的方波信号,它周期性地在0与1之间往复变化。在第一脉冲和第二个脉冲之间的时间间隔称之为周期,它的单位是秒(s)。单位时间1s内所产生的脉冲个数称之为频率,频率的最基本计量单位就是赫兹Hz。

外频是CPU的基准频率,由电脑主板提供。外频是CPU与主板之间同步运行的速度,而且绝大部分电脑系统中外频也是内存与主板之间的同步运行的速度,在这种方式下,可以理解为CPU的外频直接与内存相连通,实现两者间的同步运行状态(这是百度解释,但是似乎现在不完全如此,参见总线速度)。

倍频主频为外频的倍数,即主频与外频之比的倍数。

主频、外频、倍频的关系可以理解为:外频就是和CPU外界联系的一条生产线,倍频就是有几条生产线,那么CPU的运行速度就是1条生产线速度*生产线的数量。

主频=外频*倍频

主频可简单理解为CPU的工作频率,常见单位为兆赫(MHz)、吉赫(GHz)。工作频率越高,固然性能越强,前提是架构和制程一样,这就是为什么AMD处理器主频接近5.0Ghz,性能却与主频在4.0GHz左右徘徊的Core i7系列相去甚远。

2.核数、线程数

可以这样理解:

核心数相当于大脑数量。

线程数相当于一个大脑能同时处理多少件事情。

主频就是该CPU的工作频率能到多高,理解起来就是这个CPU有多高的战斗力,但战斗力又不全与主频有关,前面说到的核心数、线程数等等也会影响效率。

核数与多核的关系:

单核就是CPU集成了一个运算核心;双核是两个运算核心,相当于两个CPU同时工作;四核是四个运算核心,相当于四个CPU同时工作。

CPU最初发展的时候是一个CPU一个处理核心,CPU的性能主要靠提高核心工作频率来提高,由于物理限制,不能把CPU的核心频率无限提高,所以发展出来双核心或多核心的CPU。相当于在一枚处理器上集成多个完整的计算引擎(内核),他们共享缓存,内存,寄存器等。两个核心一起工作需要靠软件的支持。软件要明白怎么把任务分给两个核心让他们一起工作,这样变相的提高了CPU的处理性能,现在新出的软件都支持多核心了。本来是一个核心一个线程,不过INTEL发明了一个核心跑出两个线程,这叫超线程技术。所以有双核4线程的说法。

单CPU多线程的技术原理:

操作系统不断的从一个线程的执行切换到另一个线程的执行,由于这些线程分属于不同的程序,所以,各运行的程序轮流使用CPU,由于各程序轮流占用CPU的时间非常短(比如10毫秒),让使用者根本感觉不出程序是被断续执行的。就好像是多个程序(任务)在同时执行,可以称为交替执行方法,伪多线程。

多线程和CPU的关系可以参考这篇文章:

https://blog.csdn/qq_43422918/article/details/92994314

3.根据参数选择CPU

游戏需求

如果是主打游戏,由于游戏需要的是最简单粗暴的计算工作,这方面多核心有点无用武之地。因此,目前主流游戏都是双核心调用,四核或者更多核心的比较少。

也就是说,多核心CPU在玩游戏的时候很多核心处于半闲置状态,利用率并不高,因此如果是玩游戏,一般双核够用,预算有限的话,不妨优先考虑一些高主频CPU,这样单核更强,游戏方面更具优势。当然,如果是游戏多开,这种情况下,对多核也有较高的要求,这种情况下,CPU主频和核心数就都显得十分重要了。

专业工作需求(设计/渲染)

如果是一些专业工作类需求,尤其是设计类工作,3D建模/视频渲染的话。多核心多线程并行处理,则显得非常重要,并且需要CPU更快更大的缓存来暂存海量的运算数据,这个时候CPU频率反而是其次的。

简单说,专业设计/渲染等专业应用需求追求的是精细计算,不像游戏那样简单粗暴,“多人协力”是最好的处理器方法,并且对CPU缓存有较高的要求,因此一般的专业工作电脑,对CPU要求比较好,一般只要高端多核心、大缓存的CPU才能更好的满足需求。

总结:

因此,买CPU是选多核还是高主频,最主要的是看需求。当然,如果不差钱,选择一些多核心、高主频的高端处理器自然是最好的。但绝大多数人买CPU都会考虑预算,因此这个时候,主要看需求。

如果是玩游戏,预算有限的情况下,可以考虑双核、高主频CPU,如i3 7350K(双摄四线程),CPU主频高达4.2GHz,并支持超频,主频可以媲美高端i7,价格比i5便宜,玩游戏体验不输四核i5 7500。

如果是图形设计、3D渲染的话,一般要求CPU核心数与缓存要求较高,这个时候可以考虑AMD新锐龙R5 1500X/1600X/1700X或Intel酷睿i5/i7等处理器,配备四核以上,并且缓存很大,设计/渲染是不错的选择。

最后如果是既要满足游戏,又要满足设计,这种情况下,可以选择一些中高端处理器,如Intel酷睿i5/i7,AMD Ryzen5/7系列处理器,这些产品综合方面做的都不错。

总的来说,CPU主频与核心数作为决定处理器性能的核心参数,CPU主频越高越高,核心数也是越多越好,只不过在预算有限的情况下,CPU主频和核心数谁放在第一位,主要取决于用户使用需求,并没有统一的答案。

参考资料:

CPU主频和核数哪个重要 CPU高主频好还是多核数好

http://www.chachaba/news/digi/tsj/20170711_317990.html

DIY从入门到精通——CPU

https://zhuanlan.zhihu/p/20519713

额外介绍一下笔记本电脑CPU字母含义(品牌限定在INTEL,AMD):

INTEL有很多不同的产品,Core酷睿、Pentium奔腾、Celeron赛扬、Xeon至强、Atom凌动等。Core酷睿主流,Pentium奔腾高端(以前),Celeron赛扬低端,Xeon至强服务器,Atom凌动平板。

1、i3/i5/i7/i9这是CPU的等级,通常等级越高性能越好,但也不绝对,可以看一下天梯图。

天梯图

https://zhuanlan.zhihu/p/133846796

2、CPU等级后面(i3/i5/i7/i9)会跟着4个数,而这四位数的第一个数字代表着版本,比如i5-8XXX,就是代表这i5系列的第8代版本了。

3、cpu版本后面的3位数字就是代表这Intel SKU型号,而数字越是大,那么就是型号就越新,那么性能自然也就越好了,当初性价比最好的i5-8600的性能就比i5-8500的新能高上许多,而这个也就只是一个数字的差别。

4、cpu的最后一位就比较特殊了,不带字母的就不用管了,是一张普通的cpu,而那些带字母的有着一些其他含义:

字母M:代表标准电压cpu是可以拆卸的;

字母Y:超低电压版本,省电,性能不好;

字母U:低电压版的笔记本CPU,目前主流笔记本经常采用;

字母H:高性能标准电压处理器,是焊接的,不能拆卸;

字母K:代表不锁倍频的处理器;

字母X:代表高性能,可拆卸的;

字母Q:代表至高性能级别;

字母:MQ标准电压至高性能处理器;

字母HQ:四核标准电压封装,不能拆卸;

字母MX:标准电压高性能处理器;

字母QM:至高性能标准电压处理器;

字母XM:高性能标准电压处理器。

4.物理CPU、逻辑CPU和物理核的概念

物理CPU是相对于虚拟CPU而言的概念,指实际存在的处理器,就是我们可以看的见摸得着的CPU,就是插在主板上面的CPU芯片个数。有多少个不同的physical id就有多少个物理CPU。

查看物理CPU个数 :  cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l

物理核是单块CPU上面能处理数据的芯片组的数量,如双核、四核等。单块CPU有多少个cpu cores 核心,CPU(物理核)核数就有多少。

查看物理核 / CPU核数 : cat /proc/cpuinfo |grep "cores"|uniq     或      cat /proc/cpuinfo |grep "core id"|sort |uniq|wc -l 

逻辑CPU(逻辑核 / CPU线程数)是一种逻辑的概念,简单地说,就是模拟出的CPU核心数。用Intel的超线程技术(HT)将物理核虚拟而成的逻辑处理单元。

比如,可以通过一个CPU核心数模拟出2线程的CPU,也就是说,这个单核心的CPU被模拟成了一个类似双核心CPU的功能。

注意,线程是 Thread。两路(两路指的是有两个物理CPU)四核超线程就有2*4*2=16个逻辑CPU。

查看逻辑CPU总数 :   cat /proc/cpuinfo | grep "processor" | wc -l

补充: 

CPU的线程数概念仅仅只针对Intel的CPU才有用,因为它是通过Intel超线程技术来实现的。如果没有超线程技术,一个CPU核心对应一个线程。所以,对于AMD的CPU来说,只有核心数的概念,没有线程数的概念。 

总核数 (总CPU核心数)= 物理CPU个数 × 每颗物理CPU的核数。

总逻辑CPU数 = 物理CPU个数 × 每颗物理CPU的核数 × 线程数。

例子:

下图很好的显示了 CPU个数,CPU核数,每个核的线程数目。

Socket : CPU块数 。  

Core per socket : 每块CPU核数。

Thread per core : 每个核的线程数目。

CPU : 总的CPU逻辑核个数,4 = 1*2*2 。

linux命令 :  lscpu

查看CPU型号、主频:   cat /proc/cpuinfo | grep name | sort | uniq   或     cat /proc/cpuinfo | grep 'model name' |uniq

查看硬盘信息  :  fdisk -l

参考资料:

linux下怎么查看cpu核数_fox_wayen的博客-CSDN博客

https://blog.csdn/fox_wayen/article/details/80642718

Linux下如何查看计算机的配置信息(cpu物理个数、几核)_grgary的博客-CSDN博客

https://blog.csdn/grgary/article/details/50975237

CPU个数、CPU核心数、CPU线程数 - kimsimple - 博客园

https://wwwblogs/kimsimple/p/7787018.html

物理cpu数和cpu核数和逻辑cpu数和vcpu区别_详解cpu_budonglaoshi123的博客-CSDN博客

https://blog.csdn/budonglaoshi123/article/details/84325720

物理CPU,物理核,逻辑CPU,虚拟CPU(vCPU)区别 - 简书

https://www.jianshu/p/6903604cd1d4

五、和CPU相关的Linux命令

在上一章中已经介绍查看CPU信息的命令,如下:

cpu信息存放文件位置:cat /proc/cpuinfo

CPU总核数    =   物理CPU个数 * 每颗物理CPU的核数

总逻辑CPU数 =   物理CPU个数 * 每颗物理CPU的核数 * 超线程数

查看CPU信息(型号)                                  cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

查看物理CPU个数                                          cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

查看每个物理CPU中core的个数(即核数)       cat /proc/cpuinfo| grep "cpu cores"| uniq

查看逻辑CPU的个数                                      cat /proc/cpuinfo| grep "processor"| wc -l

查看内核版本

cat /proc/version

uname -a

uname -r

查看linux版本信息

lsb_release -a

cat /etc/issue

查看linux是64为还是32位

getconf LONG_BIT

file /bin/ls

直接查看系统的架构

dpkg --print-architecture

arch

file /lib/systemd/systemd

详见这篇文章:

https://shliang.blog.csdn/article/details/109166131

更多推荐

ARM架构与CPU

本文发布于:2023-04-20 16:16:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/3b9eff98a619d3cbc618ee1e8cfec4f0.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:架构   ARM   CPU

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 90769文章数
  • 23370阅读数
  • 0评论数