CPU基础知识(含五篇)
第一篇:CPU基础知识
CPU的英文全称是(Central ProcessingUnit),中文意思翻译中央处理器,是计算机的主要设备之一,功能主要是解释计算机指令以及处理计算机软件中的数据。计算机的可编程性主要是指对中央处理器的编程。下面就让小编带你去看看CPU基础知识大全,希望能帮助到大家!
关于 CPU 的一些基本知识总结
CPU是计算机的大脑。
1、程序的运行过程,实际上是程序涉及到的、未涉及到的一大堆的指令的执行过程。
当程序要执行的部分被装载到内存后,CPU要从内存中取出指令,然后指令解码(以便知道类型和操作数,简单的理解为CPU要知道这是什么指令),然后执行该指令。再然后取下一个指令、解码、执行,以此类推直到程序退出。
2、这个取指、解码、执行三个过程构成一个CPU的基本周期。
3、每个CPU都有一套自己可以执行的专门的指令集(注意,这部分指令是CPU提供的,CPU-Z软件可查看)。
正是因为不同CPU架构的指令集不同,使得__86处理器不能执行ARM程序,ARM程序也不能执行__86程序。(Intel和AMD都使用__86指令集,手机绝大多数使用ARM指令集)。
注:指令集的软硬件层次之分:硬件指令集是硬件层次上由CPU自身提供的可执行的指令集合。软件指令集是指语言程序库所提供的指令,只要安装了该语言的程序库,指令就可以执行。
4、由于CPU访问内存以得到指令或数据的时间要比执行指令花费的时间长很多,因此在CPU内部提供了一些用来保存关键变量、临时数据等信息的通用寄存器。
所以,CPU需要提供 一些特定的指令,使得可以从内存中读取数据存入寄存器以及可以将寄存器数据存入内存。
此外还需要提供加法、减、not/and/or等基本运算指令,而乘除法运算都是推算出来的(支持的基本运算指令参见ALUFunctions),所以乘除法的速度要慢的多。这也是算法里在考虑时间复杂度时常常忽略加减法次数带来的影响,而考虑乘除法的次数的原因。
5、除了通用寄存器,还有一些特殊的寄存器。典型的如:
PC:program counter,表示程序计数器,它保存了将要取出的下一条指令的内存地址,指令取出后,就会更新该寄存器指向下一条指令。
堆栈指针:指向内存当前栈的顶端,包含了每个函数执行过程的栈帧,该栈帧中保存了该函数相关的输入参数、局部变量、以及一些没有保存在寄存器中的临时变量。
PSW:program statusword,表示程序状态字,这个寄存器内保存了一些控制位,比如CPU的优先级、CPU的工作模式(用户态还是内核态模式)等。
6、在CPU进行进程切换的时候,需要将寄存器中和当前进程有关的状态数据写入内存对应的位置(内核中该进程的栈空间)保存起来,当切换回该进程时,需要从内存中拷贝回寄存器中。即上下文切换时,需要保护现场和恢复现场。
7、为了改善性能,CPU已经不是单条取指-->解码-->执行的路线,而是分别为这3个过程分别提供独立的取值单元,解码单元以及执行单元。这样就形成了流水线模式。
例如,流水线的最后一个单元——执行单元正在执行第n条指令,而前一个单元可以对第n+1条指令进行解码,再前一个单元即取指单元可以去读取第n+2条指令。这是三阶段的流水线,还可能会有更长的流水线模式。
8、更优化的CPU架构是superscalar架构(超标量架构)。这种架构将取指、解码、执行单元分开,有大量的执行单元,然后每个取指+解码的部分都以并行的方式运行。比如有2个取指+解码的并行工作线路,每个工作线路都将解码后的指令放入一个缓存缓冲区等待执行单元去取出执行。
9、除了嵌入式系统,多数CPU都有两种工作模式:内核态和用户态。这两种工作模式是由PSW寄存器上的一个二进制位来控制的。
10、内核态的CPU,可以执行指令集中的所有指令,并使用硬件的所有功能。
11、用户态的CPU,只允许执行指令集中的部分指令。一般而言,IO相关和把内存保护相关的所有执行在用户态下都是被禁止的,此外其它一些特权指令也是被禁止的,比如用户态下不能将PSW的模式设置控制位设置成内核态。
12、用户态CPU想要执行特权操作,需要发起系统调用来请求内核帮忙完成对应的操作。其实是在发起系统调用后,CPU会执行trap指令陷入(trap)到内核。当特权操作完成后,需要执行一个指令让CPU返回到用户态。
13、除了系统调用会陷入内核,更多的是硬件会引起trap行为陷入内核,使得CPU控制权可以回到操作系统,以便操作系统去决定如何处理硬件异常。
关于CPU的基本组成1、CPU是用来运算的(加法运算+、乘法运算__、逻辑运算and not or等),例如c=a+b。
2、运算操作涉及到数据输入(input)、处理、数据输出(output),a和b是输入数据,加法运算是处理,c是输出数据。
3、CPU需要使用一个叫做存储器(也就是各种寄存器)的东西保存输入和输出数据。以下是几种常见的寄存器(前文也介绍了一些)
MAR: memory address register,保存将要被访问数据在内存中哪个地址处,保存的是地址值
MDR: memory data register,保存从内存读取进来的数据或将要写入内存的数据,保存的是数据值
AC: Accumulator,保存算术运算和逻辑运算的中间结果,保存的是数据值
PC: Program Counter,保存下一个将要被执行指令的地址,保存的是地址值
CIR: current instruction register,保存当前正在执行的指令
4、CPU还要将一些常用的基本运算工具(如加法器)放进CPU,这部分负责运算,称为算术逻辑单元(ALU, Arithmetic LogicUnit)。
5、CPU中还有一个控制器(CU, Control Unit),负责将存储器中的数据送到ALU中去做运算,并将运算后的结果存回到存储器中。
控制器还包含了一些控制信号。
5、控制器之所以知道数据放哪里、做什么运算(比如是做加法还是逻辑运算?)都是由指令告诉控制器的,每个指令对应一个基本操作,比如加法运算对应一个指令。
6、例如,将两个MDR寄存器(保存了来自内存的两个数据)中的值拷贝到ALU中,然后根据指定的操作指令执行加法运算,将运算结果拷贝会一个MDR寄存器中,最后写入到内存。
7、这就是冯诺依曼结构图,也就是现在计算机的结构图。
关于CPU的多核和多线程
1、CPU的物理个数由主板上的插槽数量决定,每个CPU可以有多核心,每核心可能会有多线程。
2、多核CPU的每核(每核都是一个小芯片),在OS看来都是一个独立的CPU。
3、对于超线程CPU来说,每核CPU可以有多个线程(数量是两个,比如1核双线程,2核4线程,4核8线程),每个线程都是一个虚拟的逻辑CPU(比如windows下是以逻辑处理器的名称称呼的),而每个线程在OS看来也是独立的CPU。
这是欺骗操作系统的行为,在物理上仍然只有1核,只不过在超线程CPU的角度上看,它认为它的超线程会加速程序的运行。
4、要发挥超线程优势,需要操作系统对超线程有专门的优化。
5、多线程的CPU在能力上,比非多线程的CPU核心要更强,但每个线程不足以与独立的CPU核心能力相比较。
6、每核上的多线程CPU都共享该核的CPU资源。
例如,假设每核CPU都只有一个“发动机”资源,那么线程1这个虚拟CPU使用了这个“发动机”后,线程2就没法使用,只能等待。
所以,超线程技术的主要目的是为了增加流水线(参见前文对流水线的解释)上更多个独立的指令,这样线程1和线程2在流水线上就尽量不会争抢该核CPU资源。所以,超线程技术利用了superscalar(超标量)架构的优点。
7、多线程意味着每核可以有多个线程的状态。比如某核的线程1空闲,线程2运行。
8、多线程没有提供真正意义上的并行处理,每核CPU在某一时刻仍然只能运行一个进程,因为线程1和线程2是共享某核CPU资源的。可以简单的认为每核CPU在独立执行进程的能力上,有一个资源是唯一的,线程1获取了该资源,线程2就没法获取。
但是,线程1和线程2在很多方面上是可以并行执行的。比如可以并行取指、并行解码、并行执行指令等。所以虽然单核在同一时间只能执行一个进程,但线程1和线程2可以互相帮助,加速进程的执行。
并且,如果线程1在某一时刻获取了该核执行进程的能力,假设此刻该进程发出了IO请求,于是线程1掌握的执行进程的能力,就可以被线程2获取,即切换到线程2。这是在执行线程间的切换,是非常轻量级的。(WIKI:if resources for one process are not available, then another process cancontinue if its resources are available)
9、多线程可能会出现一种现象:假如2核4线程CPU,有两个进程要被调度,那么只有两个线程会处于运行状态,如果这两个线程是在同一核上,则另一核完全空转,处于浪费状态。更期望的结果是每核上都有一个CPU分别调度这两个进程。
关于CPU上的高速缓存
1、最高速的缓存是CPU的寄存器,它们和CPU的材料相同,最靠近CPU或最接近CPU,访问它们没有时延(<1ns)。但容量很小,小于1kb。
32bit:32__32比特=128字节
64bit:64__64比特=512字节
2、寄存器之下,是CPU的高速缓存。分为L1缓存、L2缓存、L3缓存,每层速度按数量级递减、容量也越来越大。
3、每核心都有一个自己的L1缓存。L1缓存分两种:L1指令缓存(L1-icache)和L1数据缓存(L1-dcache)。L1指令缓存用来存放已解码指令,L1数据缓存用来放访问非常频繁的数据。
4、L2缓存用来存放近期使用过的内存数据。更严格地说,存放的是很可能将来会被CPU使用的数据。
5、多数多核CPU的各核都各自拥有一个L2缓存,但也有多核共享L2缓存的设计。无论如何,L1是各核私有的(但对某核内的多线程是共享的)。
操作系统之CPU知识扫盲
关于冯·诺依曼结构
冯·诺依曼结构(Von Neumannarchitecture)是一种将程序指令存储器和数据存储器合并在一起的计算机设计概念结构。冯·诺依曼结构隐约指导了将存储设备与中央处理器分开?的概念,因此依本结构设计出的计算机又称存储程序计算机,这也是目前大多数计算机设计的主要参考原则。
最早的计算机器仅内含固定用途的程序。现代的某些计算机依然维持这样的设计方式,通常是为了简化或教育目的。例如一个计算器仅有固定的数学计算程序,它不能拿来当作文字处理软件,更不能拿来玩游戏。若想要改变此机器的程序,你必须更改线路、更改结构甚至重新设计此机器。当然最早的计算机并没有设计的那么可编程。当时所谓的“重写程序”很可能指的是纸笔设计程序步骤,接着制订工程细节,再施工将机器的电路配线或结构改变。
而存储程序型计算机的概念改变了这一切。借由创造一组指令集结构,并将所谓的运算转化成一串程序指令的运行细节,可让程序运行时自我修改程序的运算内容,让此机器更有弹性。借着将指令当成一种特别类型的静态数据,一台存储程序型计算机可轻易改变其程序,并在程控下改变其运算内容。冯·诺伊曼结构与存储程序型计算机是互相通用的名词。而哈佛结构则是一种将程序数据与普通数据分开存储的设计概念,但是它并未完全突破冯.诺伊曼架构。
CPU执行原理
CPU的主要运作原理,不论其外观,都是执行储存于被称为程序里的一系列指令。在此讨论的是遵循普遍的冯·诺伊曼结构(von Neumannarchitecture)设计的装置。程序以一系列数字储存在计算机存储器中。差不多所有的冯·诺伊曼CPU的运作原理可分为四个阶段:提取、解码、执行和写回。
(1)提取
从程序内存中检索指令(为数值或一系列数值)。由程序计数器指定程序存储器的位置,程序计数器保存供识别目前程序位置的数值。换言之,程序计数器记录了CPU在目前程序里的踪迹。提取指令之后,PC根据指令式长度增加存储器单元[iwordlength]。指令的提取常常必须从相对较慢的存储器查找,导致CPU等候指令的送入。这个问题主要被论及在现代处理器的缓存和管线化架构。
(2)解码
CPU根据从存储器提取到的指令来决定其执行行为。在解码阶段,指令被拆解为有意义的片断。根据CPU的指令集架构(ISA)定义将数值解译为指令[isa]。一部分的指令数值为运算码,其指示要进行哪些运算。其它的数值通常供给指令必要的信息
(3)执行
在提取和解码阶段之后,接着进入执行阶段。该阶段中,连接到各种能够进行所需运算的CPU部件。例如,要求一个加法运算,算术逻辑单元将会连接到一组输入和一组输出。输入提供了要相加的数值,而且在输出将含有总和结果。ALU内含电路系统,以于输出端完成简单的普通运算和逻辑运算(比如加法和比特运算)。如果加法运算产生一个对该CPU处理而言过大的结果,在标志寄存器里,溢出标志可能会被设置
(4)写回
最终阶段,写回,以一定格式将执行阶段的结果简单的写回。运算结果经常被写进CPU内部的寄存器,以供随后指令快速访问。在其它案例中,运算结果可能写进速度较慢,如容量较大且较便宜的主存
注意,这上面的4个阶段与我们编写程序是非常相关的,但编程语言里面可能会简化,并把2和3阶段合并,分为:加载,处理,写回。在多线程编程里面,了解这几个概念至关重要,由此可以延伸,数据从哪里加载,在哪里执行,最后结果又写回了哪里。指令数据一般从内存里面加载,但是内存的访问时间,相比cpu慢了n多倍,所以为了加速处理,cpu一般把指令给加载到离cpu更近的寄存器里面,或者是L1,L2,L3的cache来提速,最终计算出来的结果,还要写回内存。正是因为cpu执行指令复杂,所以这里面其实牵扯到很多问题,比如多个线程如何协作处理任务,以及如何保证程序数据的原子性,有序性,可见性。而这正是Java的内存模型出现的意义。在其他不同的编程语言里面其实都有在操作系统之上抽象的内存模型来应对不同的cpu架构的的差异,这一点需要注意。
多个单核CPU vs 单个多核CPU
多个单核CPU:
成本更高,因为每个CPU都需要一定的线路电路支持,这样对主板上布局布线极为不便。并且当运行多线程任务时,多线程间通信协同合作也是一个问题。依赖总线的传输,速度较慢,且每一个线程因为运行在不同的CPU上。导致不同线程间各开一个Cache,会造成资源的浪费,同时如果线程间协作就会有冗余数据的产生,更加大了内存的开销。
单个多核CPU:
可以很好地规避基本上多个单核CPU提到的所有缺点。他不需要考虑硬件上的开销以及复杂性问题,同时也可以很好地解决多线程间协同工作的问题,减少内存的开销,因为多线程程序在多核CPU中运行是共用一块内存区的,数据的传输速度比总线来的要快同时不会有冗余数据的产生。单个多核CPU的问题也是显而易见的,假设俩大程序,每一个程序都好多线程还几乎用满cache,它们分时使用CPU,那在程序间切换的时候,光指令和数据的替换就是个问题。
单个多核cpu已经成为个人计算机的主流配置,多个多核的cpu在一些大型的服务器里面也很常见。
超线程
“超线程”(HyperthreadingTechnology)技术就是通过采用特殊的硬件指令,可以把两个逻辑内核模拟成两个物理超线程芯片,在单处理器中实现线程级的并行计算,同时在相应的软硬件的支持下大幅度的提高运行效能,从而使单处理器上模拟双处理器的效能。其实,从实质上说,超线程是一种可以将CPU内部暂时闲置处理资源充分“调动”起来的技术。
每个单位时间内,CPU只能处理一个线程,以这样的单位进行,如果想要在单位时间内处理超过一个的线程,是不可能的,除非是有两个核心处理单元,英特尔的HT技术便是以单个核心处理单元,去整合两个逻辑处理单元,也就是一个实体核心,两个逻辑核心,在单位时间内处理两个线程,模拟双核心运作。
简单的说,超线程就是在单个core中,模拟出两个逻辑处理单元,以此能够提高程序执行的并发能力,提高系统cpu资源的利用率。
至此,关于CPU的个数,核数,逻辑CPU的个数计算关系如下:
(1)总核数 = 物理CPU个数 __ 每颗物理CPU的核数
(2)总逻辑CPU数 = 物理CPU个数 __ 每颗物理CPU的核数 __ 超线程数
一些概念解释如下:
举例,在一个Mac Pro的机器上,可以通过关于本机,系统报告选项中,看到当前系统的基本配置情况,如下:
比如上面的信息中,显示了当前的系统物理上只拥有一个cpu,但是这个cpu有4个核。然后,我们查询其逻辑cpu的个数,会发现显示是8个:(在Mac上打开活动监视器,然后双击最下面的中间的cpu负载的地方,就可以看到)
这就是因为每个核又有2个超线程,所以8个逻辑cpu个数=1物理cpu个数 __ 4核 __2个超线程,最终也就是说如果我要编写一个多线程计算密集型的程序任务,起的线程数可以以逻辑cpu的个数作为参照。当然如果是io密集型的任务,可以开的更多一点。
CPU性能参数
计算机的性能在很大程度上由CPU的性能决定,而CPU的性能主要体现在其运行程序的速度上。影响运行速度的性能指标包括CPU的工作频率、Cache容量、指令系统和逻辑结构等参数。
大多数情况下,我们主要关注的是CPU的主频,也称时钟频率,是指同步电路中时钟的基础频率,它以“每秒时钟周期”(clock cycles persecond)来度量,单位是兆赫(MHz)或千兆赫(GHz)用来表示CPU的运算、处理数据的速度。通常,主频越高,CPU处理数据的速度就越快。
在上面的mac的参数里面,我们能够看到在Intel Core i7处理器下,主频是2.2 GHz,当前主频高的处理器也在4GHz之内,其主要原因主要在于散热,提高主频超过一定范围后热密度急速提高,很不经济,也造成散热困难。
总结
本文主要介绍了计算机操作系统中CPU有关的知识,计算机的核心就在于CPU,了解CPU相关的知识,可以让我们更清楚我们的程序底层执行的过程,从而写出更健壮的代码及调优相关的程序。
CPU科普知识
CPU历来都是一个高大上的话题,普通吃瓜群众除了CPU越贵越好之外,可能就一无所知了。曾经小编对于CPU也是一头雾水,后来请教了很多大神,又查阅了很多资料,才粗略地搞明白了一点。在此,小编就按照自己的理解,尽量用最通俗的语言去撕开CPU神秘的面纱,让更多人能够明白CPU。
CPU的中文翻译叫中央处理器,好吧,这其实只是一句废话,不过为了这个牛逼的翻译,我们也给它一个牛逼的比喻,那我们就把CPU比喻成一个国家的中央机构,接下来我们一一对应打比喻讲解。
影响CPU性能的主要因素可以分为两大块:主频和架构。这里看不懂不要紧,接下来听小编为你一一解释就懂了。
主频我们可以理解为中央部门的工作能力,架构可以理解为国家的管理制度,主要用于协调中央机构各部门之间的工作。所以整个中央机构的工作效率(CPU性能)主要就是受到这两个方面的影响。工作能力越高各部门之间协调越好,整体工作效率自然就越高。反之,任何一方面不够好,都会对整体工作效率造成明显的影响。
我们知道市面上最大的PC处理器主要由两大品牌Intel和AMD垄断,而大部分时间里,Intel都是压着AMD打的,原因就是因为AMD的架构不行,虽然主频对比Intel不落下风甚至稍微领先,但是整体性能却被Intel彻底压制了。这就是因为AMD的中央机构各部门协调能力比Intel差多了,所以即使工作能力差不多,但协调不好,所以整体工作性能就比不过了。
说完了性能接下来我们就来说说CPU的结构和工作原理。
CPU的结构主要由运算器、控制器、寄存器三大块组成。
①运算器就是中央机构里负责执行任务的部门,也就是专门干活的;而控制器就是中央机构的领导小组,针对不同需要,给运算器下达不同的命令;寄存器可以理解为控制器和运算器之间的联络小组,主要工作就是协调控制器和运算器。
运算器这个干活的部门,平日里整个中央机构要干点啥事就找这个部门。例如东边洪灾了,你去赈灾吧;西边发现金矿了,你去主导挖矿吧;北边下大雪了,你去送温暖吧;南边下暴雨了,你去疏导洪流吧……
②而控制器这个部门比较牛逼,他们是不用干活的,主要就是对国家(整部计算机)发生的各种情况,做出应对,然后让运算器去把活干好。在这里,我们会发现一个大问题:如果这个部门闲的蛋疼,乱下命令怎么办?这也好办,我们就制定出一套行为规范来限制他们,不让他们乱搞。而这套行为规范就是CPU的指令集。
指令集就是CPU的行为规范,所有的命令都必须严格按照这部行为规范来执行。在这里说明一下不同类型的CPU指令集也不一样,其中最常见的就是__86架构下的复杂指令集和ARM架构下的简单指令集。__86就是我们平常电脑CPU的架构,ARM就是手机CPU的架构。
由于电脑CPU这个中央机构所在的国家(电脑)面积大、人口多、国情复杂,啥事都会发生,所以规章制度就需要特别完善,考虑到方方面面的情况要怎么应对。而手机CPU这个中央机构国家小、人口少、面积窄,所以规章制度简单一点就可以了。这就是复杂指令集和简单指令集的区别。
③寄存器这个部门稍微复杂一点,因为它虽然没有运算器和控制器那么重要,但是它P事多,控制器平时总喜欢让寄存器去给运算器传达个命令。而运算器有时候也会担心数据太多一时处理不过来,就让寄存器帮它先记着,有时候工作需要纸笔、螺丝刀之类的小工具,也让寄存器帮它拿着。
了解完寄存器的功能后,又发现了一个问题,如果控制部门下达的命令太多,而运算部门又没那么快可以做完,又或者运算器让它记住的东西或者临时拿着的东西太多,寄存器部门太小,人太少,忙不过来怎么办?好办,扩招人员吧,可是这个部门的人员都是编制内的,没有在编名额了怎么办?也好办,那就招些编外人员吧,也就是我们常说的临时工。
招了临时工,总要给他个名号吧,那就再成立一个部门,叫高速缓存。为了体现亲疏有别,这个部门把临时工分为三个等级,分别是一级高速缓存、二级高速缓存、三级高速缓存。反正也是临时工,名号就这么随便叫吧。
在CPU这个中央机构可跟新闻上说的事给临时工做、锅给临时工背不同,在这里高速缓存这个临时工部门是作为寄存器替补而存在的,也是说,必须在寄存器完成不了工作量时,才能交给高速缓存来做。一开始交给一级高速缓存来做,一级也做不完再给二级,二级还做不完就给三级。这里又有一个问题出现了,那就是如果三级也做不完怎么办?
这完全没问题,交给中央机构的一个下属部门去办,这个部门就是内存。但是因为内存毕竟不属于中央机构,工作能力没有中央机构人员那么强,效率也没有那么高。
所以控制部门要下达命令或者运算部门要做事时,首先想到的就是寄存器,寄存器忙不过来了就找高速缓存帮忙,高速缓存也忙不过来就找内存帮忙。那么,内存也传达不过来呢?内存传达不过来那就没办法了,只能让电脑卡着吧,等运算部门先把上一件事处理好再说。所以,买电脑,不能光看CPU牛不牛,内存容量也要跟上。
还有一个容易被大家忽略的问题,在这里也说一下吧,那就是晶体管。晶体管是构成CPU最基础的原件,可以理解为整个中央机构的工作人员。随着科技的进步,CPU生产工艺越来越精细,目前手机端CPU(ARM架构)制程已经提升到7nm,电脑端也达到了14nm。
制程的提升,我们可以理解为,缩减每个办公人员的办公面积,以前科技不发达每个办公人员必须配一个独立办公室,才能有效完成工作,现在技术进步了,每个办公人员只需要一张办公桌就能完成工作了。所以同样的一栋大楼,可以容纳的办公人员(晶体管)就多了,工作能力就上升了。
以前一个CPU由于制程落后,只能容纳几千万或者几亿个晶体管,现在制程进步了,一个同样体积的CPU可以容纳几十亿个晶体管,性能自然就提升了。
那么,为什么晶体管数量增加了,CPU的能耗却没有增加呢?我们可以这么理解,每个工作人员都需要吃饱了才有力气干活,以前的工作人员需要吃九菜一汤才够力气,现在改为营养配餐了,每个工作人员只需要吃一片营养药丸就可以工作了,所以工作人员虽然增加了,但是整体伙食成本(耗电量)并没有增加。
最后,我们说一下CPU的核心和进程又是什么呢?我们可以这么理解,在单核时代,每个CPU只有一个核心,也就是只有一个中央机构,但是国家那么大,事那么多,中央机构每天加班25个小时都忙不完了。那就没办法了,扩充中央机构吧。于是乎双核、四核、多核CPU就出来了。每一个核心都是一个独立的中央机构,都具有相同的工作能力。
这么多个中央机构成立了,那听谁的,有事情交给哪个中央机构去做,要知道它们的权利和功能都是一样的啊。这时候就要改变CPU架构了,也就是国家的管理制度了。以前国家只有一个中央机构,啥事都交给它去做准没错,现在突然变成好几个中央机构了,怎么办?
这个时候就需要为每个核心安排去负责不同的事务了,这套中央机构专门负责农业,那套负责工业,剩下的负责税收、财政等等之类的。
那什么是进程呢,进程其实可以理解为一个中央机构里面的人员组成。有时候事太多了,光这几个中央机构处理起来还是有点吃力,但是为了节约成本,我们不能再组建新的中央机构了,那就只好折中处理,不另外成立新的中央机构了,就在原有的基础上,每个中央机构组建两套完全一致的工作班子吧。
所以,4核CPU就是拥有四个独立的中央机构,都具备相同的工作能力和权限,但是每个核心都会负责不同的事务。4核8线程就是四个独立的中央机构,每一个中央机构都拥有两套完整的工作班子,每套工作班子权限也一样。
这时候问题又出现了,例如某个中央机构负责的事特别多,忙不过来,而其他的中央机构负责的事很少,闲的发慌,那怎么办?这时候,我们的架构又出现了,好办!今天你这个核心负责的事多,就你来主导,让其他事少的核心辅助你工作。明天另外一个核心负责的事多,就由它来主导,其他核心辅助它工作。
在这里小编想起来一个网上很火的段子:MTK的CPU一核有难九核围观。这就是架构落后造成的,它的管理制度不完善,没办法调节每个中央机构之间的互相配合,有事情要做,往死里用一个核心,其他九个核心啥事没有,只好吃瓜围观了。
所以,在最后,重申一遍,CPU架构很重要!!
第二篇:CPU基础知识拓展
CPU 的全称是 Central Processing Unit,它是你的电脑中最硬核的组件,这种说法一点不为过。CPU是能够让你的计算机叫计算机的核心组件,但是它却不能代表你的电脑,CPU与计算机的关系就相当于大脑和人的关系。下面就让小编带你去看看CPU基础知识拓展,希望能帮助到大家!
程序优化:CPU缓存基础知识
CPU缓存
CPU缓存(CPUCache)的目的是为了提高访问内存(RAM)的效率,这虽然已经涉及到硬件的领域,但它仍然与我们息息相关,了解了它的一些原理,能让我们写出更高效的程序,另外在多线程程序中,一些不可思议的问题也与缓存有关。
现代多核处理器,一个CPU由多个核组成,每个核又可以有多个硬件线程,比如我们说4核8线程,就是指有4个核,每个核2个线程,这在OS看来就像8个并行处理器一样。
CPU缓存有多级缓存,比如L1, L2, L3等:
L1容量最小,速度最快,每个核都有L1缓存,L1又专门针对指令和数据分成L1d(数据缓存),L1i(指令缓存)。
L2容量比L1大,速度比L1慢,每个核都有L2缓存。
L3容量最大,速度最慢,多个核共享一个L3缓存。
有些CPU可能还有L4缓存,不过不常见;此外还有其他类型的缓存,比如TLB(translation lookasidebuffer),用于物理地址和虚拟地址转译,这不是我们关心的缓存。
下图展示了缓存和CPU的关系:
Linu__用下面命令可以查看CPU缓存的信息:
$ getconf-a | grep CACHE
LEVEL1_ICACHE_SIZE 32768
LEVEL1_ICACHE_ASSOC 8
LEVEL1_ICACHE_LINESIZE 64
LEVEL1_DCACHE_SIZE 32768
LEVEL1_DCACHE_ASSOC 8
LEVEL1_DCACHE_LINESIZE 64
LEVEL2_CACHE_SIZE 262144
LEVEL2_CACHE_ASSOC 8
LEVEL2_CACHE_LINESIZE 64
LEVEL3_CACHE_SIZE 31457280
LEVEL3_CACHE_ASSOC 20
LEVEL3_CACHE_LINESIZE 64
LEVEL4_CACHE_SIZE 0
LEVEL4_CACHE_ASSOC 0
LEVEL4_CACHE_LINESIZE 0
上面显示CPU只有3级缓存,L4都为0。
L1的数据缓存和指令缓存分别是32KB;L2为256KB;L3为30MB。
在缓存和主存之间,数据是按固定大小的块传输的 该块称为缓存行(cache line),这里显示每行的大小为64Bytes。
ASSOC表示主存地址映射到缓存的策略,这里L1,L2是8路组相联,L3是20路组相联,等一会儿再说是什么意思。
缓存结构
一块CPU缓存可以看成是一个数组,数组元素是缓存项(cache entry),一个缓存项的内容大概是这样的:
+-------------------------------------------+
| tag | data block(cache line)| flag |
+-------------------------------------------+
data block就是从内存中拷贝过来的数据,也就是我们说的cache line,从上面信息可知大小是64字节。
tag 保存了内存地址的一部分,是用来验证是否缓存命中的。
flag 是一些标志位,比如缓存是否失效,写dirty等等。
实际上LEVEL1_ICACHE_SIZE这个数据,是用data block来算的,并不包括tag和flag占用的大小,比如64 __ 512 =32768,表示LEVEL1_ICACHE_SIZE可以缓存512个cache line。
缓存首先要解决的问题是:怎么映射内存地址和缓存地址?比如CPU要检查一个内存值是否已经缓存,那么它首先要能算出这个内存地址对应的缓存地址,然后才能检查。
为了解决这个问题,缓存将内存地址分成下面几个部分:
+-------------------------------------------+
| tag | inde__ | offset |
+-------------------------------------------+
tag和缓存项中的tag对应,用来验证是否缓存命中的。
inde__ 缓存项数组中的索引。
offset 缓存块(cacheline)中的偏移,因为缓存块是64字节,而内存值可能只有4个字节,一个缓存块可以保存多个连续的内存值。这个offset实际上就是指明内存值在cacheline中的位置。
直接映射缓存
现在我们举一个具体的例子,说明内存和缓存是如何映射的:
假如缓存的大小是32768B(32KB),缓存块大小是64B,那么缓存项数组就有? 32768?/64=512 个。
CPU要访问一个内存地址0__1CAABBDD?,它首先检查这个内存地址是否在缓存中,检查过程是这样的:
内存地址的二进制形式是(低位在前面):
| tag | inde__ | offset |
0 0 0 1 1 1 0 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1
先计算内存在cacheline中的偏移,因为缓存块是64字节,那么offset需要占6位(2^6=64),即offset=011101=29。
接着要计算缓存项的索引,因为缓存项数组是512个,所以inde__需要占9位(2^9=512),即inde__=011101111=239。
现在我们通过offset和inde__已经找到缓存块的具体位置了,但是因为内存要远比缓存大很多,所以多个内存块是可以映射到同一个位置的,怎么判断这个缓存块位置存的就是这个内存的值呢?答案就是tag:内存地址去掉inde__和offset的部分,剩下的就是tag=***01=0__3955。
通过inde__找到缓存项,比较缓存项中的tag是否与内存地址中的tag相同,如果相同表示命中,就直接取缓存块中的值;如果不同表示未命中,CPU需要将内存值拷贝到缓存(替换掉老的)。
这种映射方式就称为直接映射(Directmapped),它的缺点就是多个内存地址会映射到同一个缓存地址,拿上面的内存地址来看,只要offset和inde__相同的内存地址,就一定会映射到同一个地方,比如:
***00 011101111 011101
***10 011101111 011101
***11 011101111 011101
如果同时访问上面3个地址,就会一直替换缓存的值,也就是一直出现缓存冲突,这可能比没有缓存还要慢,因为除了访问内存外,还多一个拷贝内存值到缓存的操作。
N路组相联
为了解决上面的问题,我试着把缓存项数组分成2个数组(2路),比如分成2个256的数组,如下图所示:
查找过程和上面其实一样的:
先通过inde__找到数组索引,只不过因为是2路,所以存在2个数组。
然后通过内存tag依次比较2个缓存顶的tag,如果其中一个tag相等,说明这个数组缓存命中;如果两个都不相等,说明缓存不命中,CPU会拷贝内存值到缓存中,但是现在有2个位置,要拷贝进哪个呢?我的理解CPU应该是随机选1路拷贝。
offset这个其实无关紧要,因为它是cache line中的偏移。
那这个和直接映射相比,好在哪里呢,因为一个内存值会随机拷贝到2路中的1个,所以缓存冲突(多个内存地址映射到同一个缓存地址)的概率会降低一半;如果把缓存项数组分成4个数组,这就是4路组相联。
上面LEVEL1_ICACHE_ASSOC的值等于8,表明是8路组相联。分组越多,缓存冲突率越低,但是CPU要遍历的数组就越多,这是一个权衡的问题。
通过观察也可以发现,其实直接映射就是1路组相联。如果直接分成512个数组,那每个数组只有1项,这种就是全相联,CPU直接遍历512个数组,判断内存地址在哪1个。
缓存分配策略和更新策略:
当CPU从内存读数据时,如果该数据没有在缓存中(cache miss),CPU会把数据拷贝到缓存。
当CPU往内存写数据时:
如果缓存缺失,CPU会先从内存拷贝数据到缓存,然后再更新缓存的数据。
CPU更新缓存数据,也可能有多个策略:
直接写(write through):更新缓存的数据,同时更新内存的数据。
写回(write back):只更新缓存的数据,同时在缓存项设置一个drity标志位,内存的数据只会在某个时刻更新(比如替换cacheline时)。
从上面描述我们知道,当我们向一个内存写数据时,内存中的数据可能不马上被更新,这个新数据可能还在cacheline呆着。因为每个核都有自己的缓存,如果CPU不做处理,可以想象一定会出问题的:比如核1改了数据,核2去读同一个数据,此时数据还在核1的缓存中,核2读到的就是老的数据。CPU为了处理多核间的缓存同步,那是相当的复杂。
《装机小知识-CPU篇》
首先给大家讲一下,本次内容主要给大家普及一下购机DIY知识,不做深层讲述(讲了小白也不懂),只求做到简单化明了化,给您一个明确的DIY购机思路,选择适合你自己的一台电脑,而不是3000进吧1万带回家用几年却只发挥了2024的性能。
CPU最重要的几个参数,制程,架构,主频,核心,缓存。以及支持几代的内存和是否有核心显卡。支持的内存肯定是越新越好,内存方面的我们在内存一栏详细讲诉
核心显卡这里简单先讲了,目前intel目前最高级别的核心显卡UHD630,水平在独立显卡GT730的档次(略高一点)。日常办公,平面设计,家庭影音,都没有问题,DNF,梦幻西游,LOL以及各种网页游戏都能玩。核心显卡在你使用两条内存组双通的情况下性能会有较大提升,所以你想节约预算又只玩小型游戏比如LOL就可以考虑组个双通内存就可以了,可以做到高特效流畅。具体表现可以 点击此处 观看测试视频(AMD最新一代核显强于intel核显)
接下来我们就讲CPU最主要的核心参数。
制程:制程越小代表着同一大小芯片上可以做更多晶体管,提高性能降低功耗(功耗越高耗电越多发热量越大,CPU温度上升性能寿命会下降,所以功耗很重要),制程越小每个芯片可以有更多的流水线或者是更多的核心。从第六代酷睿开始intel就一直使用14nm制程工艺,包括最新的9代酷睿,也是14nm的,而AMD二代锐龙是12nm制程工艺,另外可能大家也看到过华为麒麟980宣传的7nm以及台积电公布的突破5nm量产工艺。为什么intel就一直不更新制程工艺,实际上个人觉得主要有两个方面。
1:intel是自建生产线,只生产自己家产品,如果换制程那么生产线基本要重建,然而14nm的生产线才刚建没几年,实在没想到芯片制程工艺突破如此迅速。因为台积电是代工生产芯片,所以他的核心竞争力就是要更高端精密的制程工艺,才有更多厂家找他代工。
2:intel得益于自身架构的优化以及芯片的稳定性,即便是14nm制程的芯片功耗也不高。尤其是用在台式机上,中低端主流的i3 i5一般散热器都能压住,至于高端超频系列的CPU,好一点的散热器也没有问题。在2024年以前intel在PC芯片都是出于垄断地位,可能觉得自己不需要这么着急突破,挤挤牙膏就算更新迭代了,所以更新制程带来的低功耗,高性能在当时的intel看来不是那么急切需要提高,殊不知自己的不思进取给了AMD很多的时间来打一个翻身仗。。又或者intel早已开发7nm级别的PC芯片,只是藏大招没拿出来而已。不过就这次AMD抢走一半市场以后intel的9代处理器还是14nm,还是加核心的手段看起来又不像有大招。哎神仙打架我们关切个什么呢。总之现在,电脑处理器14nm没有任何问题,不必拿制程说事。
PS:相比PC处理器,手机处理器就需要更小的制程来达到高度集成的效果,降低功耗提升性能,增加续航。所以目前最新制程的处理器都是用在了手机上面。
架构:架构这个属于研发,很复杂,而且对装机没有太多的帮助,因为新的CPU架构都是进一步优化,且产品统一采用的都是新架构,通常都会比原架构更优秀,值得一提的就是intel与AMD虽然都是基于__86指令集研发的架构,但是intel比AMD更稳定的原因主要就在于架构上的优势(仅限目前,且差距一直在缩小)架构其实是处理器性能非常重要的指标,只是统一性很高,对比又很少所以电脑普通用户没有必要深究。
主频(不是越高越好):主频是直接表现CPU性能的参数之一,但是以目前的工艺水平,主频不会有更大突破,上线基本会在4G-5GHz,Intel/AMD两大CPU厂商均将提升性能的手段放在多核心上。主要还是因为CPU频率越高,功耗及发热就会越高,散热就会是个问题,温度过高寿命及稳定性和性能都会大打折扣。频率更能反映单核的性能,目前仍然有很多软件是只支持单线程工作的,所以对于这类用户对频率的选择比重更大,比如现在销量很高的I58400主频只有2.8Ghz,如果让它工作只支持单线程的软件,这个时候你会发现,只有1个核心占用,剩下的5个核心占用为0。效果可能还不如i38100的3.6Ghz。
有部分机友对于我这个论断不满意,觉得贬低了8400(其实下文也有为8400正名),这里我主要想表达的是频率与单核的关系,当然我自己也忽略了一个问题就是I38100没有睿频,所以部分机友就拿8400的睿频来说体验效果是高于8100的,但是兄弟们,你们抓错方向了。
i5 8400 基础2.8G 睿频 1核4G 2核3.9G 3核3.9G 4核3.9G 5核3.8G 6核3.8G
这是理论最高值,条件满足能够达到,也的确是比I3 8100强,两款CPU本来也不是一个档次的,但是注意用词,我说的是可能不如I38100,因为睿频不可控,板载平台,供电,散热,CPU体质,实际载荷等等很多都影响着睿频,也有很多人的8400就是到不了3.8,只有3.2-3.3,你让他换个主板还是换个电源,而且睿频需要高负载情况下才有,那非高负载的程序呢?这样写的本质是在讲述频率与单核,基础频率一样很重要。请不要忽视。
但是i58400是六核六线程的多核处理器,解决支持多核多线程的软件即便主频较低,将处理任务分摊给多个核心来工作,那么单核就不需要那么高的性能也能游刃有余的完成任务。就好比一个人1秒能算10次,2个人每人1秒能算7次,对于支持多线程软件来说,同样给你1s我两个人可以算14次,而你还是只能10次。如果是只支持单线程的软件的话,来来来,算10次那个人,给你发朵小红花。
不过虽然8400主频是2.8GHz但毕竟i5,单核性能也不会很差,i5 8400总性高出i3 810040%左右。往后发展游戏多核将更为普遍,各类大型软件基本也会往支持多线程开发。购机前请先了解自己常用的软件是否对单核性能有较高的要求比如PS。如果是小型软件这些即便只支持单核也可以忽略掉,现在的CPU处理起来都没有问题。如果你有钱也很任性,选I78700K或者I9 9900K 超到5G大小通吃也是可以的。
关于频率选择,常见的以下几种,普通用户就看主频和睿频即可。
主频:CPU工作默认频率。
睿频:CPU高负载运行下,智能调节频率高于基础频率,达到提高CPU性能的目的(智能可控)
超频:玩家自己通过主板BIOS设定CPU频率和电压高于基础频率或者睿频频率,达到提高CPU性能的目的(超频有风险,烧毁无质保,一般超频到5GHz,好一点的水冷能压住。极度超频实用性不大,降温成本太高,不少厂商展示的时候用的都是液氮降温,只有部分CPU支持超频比如intel酷睿尾缀代K和AMD锐龙尾缀带__的。)
核心/线程(不是越多越好):上面讲主频的时候其实就已经讲到核心,总的来说核心要参考单核性能和多核性能,多核虽好,但不一定适合你,还要根据使用需求,平时就上网看电影 用办公软件啥的买个I7 8700K也没什么用,体验基本和i3 8100一样。如果你喜欢玩大型游戏或者工作上用PS AE PR分析软件之类的,多核对你来说就很重要了。核心越多同一时间数据处理能力越强。
超线程:比如8核16线程的I9 9900K相较于8核I7 9700K,前者为拥有超线程技术的CPU。I79700K处理任务时,共8核心,一个核心一条线程,如果任务没有占满核心性能,那么这个核心剩余性能就闲置了,如果又来一个任务就只能用第二颗核心或者等任务处理完了再进行下一个任务。I99900K处理任务时,一个核心两条线程,如果任务没有占满核心性能,又来一个任务,那么就会用该核心的剩余性能进行处理,而不是用第二颗核心来处理,达到同时处理更多任务的目的,提高效率。
超线程是利用特殊的硬件指令一核模拟双核运行,但还是不如双核来的实际有用,核心数量才是性能标杆,超线程仅提高了CPU核心的使用效率,不能直接提升核心性能,也就是说如果数据计算已经吃满所有核心那么超不超线程都没有实际意义。超线程CPU用在仅支持单线程的程序上可能还达不到不带超线程功能的CPU性能,但性能差距也不会太大。超线程会大幅提高跑分数据(跑分没什么卵用)。
低端的超线程U比如G4560G5400很好用,效果提升显著,因为核心少,超线程的话恰好能满足日常需求,因为现在电脑操作越来越快,同时下达的任务可能会好几个(比如看直播的同时下载电影然后又在挂游戏,微信,QQ在视频语音什么的)。以前低端的双核的CPU现在已经不适用了不能同时处理这么多任务,所以在G4560把超线程用上过后,直接解决了这个问题,性能及体验直逼i37100价格却只有其一半,被大家奉为神U。高端的CPU从酷睿八代或者锐龙1代开始核心就已经增多,正常使用情况下6核基本已经足够了,超不超线程的体验差距已经不大,高端超线程U比如I78700K9900K在程序游戏多开的情况下效果比较好(这里多开是指同时开几个大型游戏或者几十个小型游戏或手游挂机这种),或者数据建模,大型工程分析关键,视频渲染也是比较占优势的。
目前大多主流游戏做的都是双核或者四核处理,新一点的游戏有的做到六核处理,如果你买电脑玩游戏,追求八核十六线程也没有用,仅有部分核心能用到。游戏体验和i5没有差别(多开除外)。
缓存(越大越好):缓存是一个很重要的参考指标,缓存分一级缓存 二级缓存三级缓存,都集成在CPU上,容量都是越大越好,一级缓存级别最高,容量相比最小。CPU缓存相当重要,与CPU同频运行,远高于内存频率,CPU读取数据时一级二级三级依次读取,待三级缓存都没有的数据才从内存中调取,每级缓存命中概率都在80%左右,所以要从内存调用的数据其实是很少的,由于缓存速度远高于内存,所以缓存越大越能在使用过程中存放更多的数据,降低CPU调用数据的时间,提高执行效率,直接反应在使用体验上就是速度快。比如很多朋友升级CPU过后明显觉得速度快了很多,用在单核小程序上也是,以为是处理器性能增加的原因,其实还有很重要的原因是缓存增加了的原因。三级缓存对游戏体验效果比较明显。
这里推荐一下适用于各种需求的CPU
办公 上网 炒股 影音 家用 2D游戏 页游 回合游戏
建议1000-1500预算:G4560G5400的核显机就已经足够使用了,单条内存4G,配个固态提高效率。如果加独显最高加到1050TI这样级别的显卡,玩LOL DOAT 吃鸡中档特效及各类大型游戏也没有问题。详细看此测评,视频只看CPU占用,测评的是1030和1050,并非1050TI,只是给大家看一下G4560这样的CPU玩吃鸡占用也没有占满
如往上升可以加到2024-3000元预算:I3 8100 I5 84008500酷睿的核显主机在组双通的内存的情况下可以做到高特效流畅玩LOL。因CPU的性能大幅闲余所以后期升级可以直接加一个高端独立显卡I3+1060,而I5最高建议加到2024,就能玩更高级的游戏开高特效甚至满特效。(如果确定后期要升独显,建议再组核显机的时候就把电源配高一点。)
主玩各类网游及各类单机游戏
建议3000-6000预算:I3 8100 I5 8400 8500 R5 2600(考虑价格,排名为推荐先后),独显选1050TI或10606G或同级别A卡。如果对大型游戏特效画质要求较高,显卡可以升到1070TI 或者2024 或者更高,预算在6000以上。
PS AE PR AI或者工程分析软件,建模等需要大量数据运算的工作需求
建议6000-8000预算:R5 2600__ I5 8600K I5 9600K I5 8500 I79700K(考虑价格,排名为推荐先后),如若对游戏需求不大顶多配个1050TI,充一下4G显存,内存16G起,提高你的工作效率。该级别处理器也可用于普通直播及LOL直播。预算充足可往上升R7 2700__ I78700K I9 9900K等。
如主要工作是做视频,广告,影视,需频繁长时间渲染高质量长视频,大型模型应力分析软件,大型网游及单机游戏直播。
建议1W-1.5W预算 R7 2700__ I7 8700K I7 8700 I9 9900K(考虑价格,排名为推荐先后)。
若预算充足还可以2W以上预算 升AMD Ryzen ThreadRipper系列或者intel 酷睿I9__系列甚至双路,因为分析软件的计算需求是没有上线的。
以上为本人收集知识编写推荐,若有不严谨的地方还请各位多多包涵并提出改正。感谢各位观看,有不一样想法的朋友也欢迎留言提出,文明交流。
电脑硬件入门——基础之CPU架构解读1、9900K整体架构
还是先看图[1]:
9900K整体架构图
9900K大概可以分为5个部分:
CPU核心:图中红框部分为一个核心,9900K一共有8个核心。早期的CPU其实就只有这么一个东西,但现在的CPU逐步发展,把一些周边的部件也集成在同一块半导体晶片上,因此传统的CPU就变成了现代CPU上的核心。此外,为了提高CPU的计算能力,单块CPU中的核心数量越来越多,就消费级市场来说,从2024第一款双核心CPU奔腾D发布到今天的单块CPU晶片有8个核心的i9-9900K。
三级缓存(Level 3 Cache,简写为L3、L3$、L3C、L3Cache):图中中间8个粉色块组成的三级缓存,用于临时存放内存中的一小部分数据。这里分成8小块,对应8个CPU核心。有时候L3也叫末级缓存(LastLevelCache,LLC),当然,对9900K这样具有三级缓存的CPU,L3才等同于LLC。有的老式CPU有的只有二级缓存,LLC就是L2;某些服务器使用的CPU有四级缓存,LLC则是指L4。
核心显卡:图中左边紫框部分,这个以后的文章中我们再介绍。
系统代理:图中右边绿色部分,这是负责连接CPU与其它部件的多个模块的集合。从上到下分别是:
显示控制器:负责核心显卡输出;
PCI-e控制器:负责CPU与外部IO设备连接,以后的文章我们会另外介绍;
eDRAM控制器:这个其实9900K是没有的,某些定制型号会集成有特殊的内存,称为嵌入式动态随机访问存储(Embedded DynamicRandom-Access Memory, eDRAM)。一般来说eDRAM是作为核心显卡的专用显存使用,这个控制器就是负责从eDRAM读写数据的。
内存控制器:负责CPU与内存连接,从内存中读写数据。
环形总线(RingBus):把上面这些模块连接起来的,上图中标记着Ring的蓝色圈。
2、核心架构图
这张图看起来很复杂是不是?不用担心,我们一个一个说。当然,我们这是入门知识,不会介绍的太细。
我们上一篇文章提到,现代CPU都是改进型哈弗架构;并且举了一个会计做财务报告的例子。这里我们继续使用这个例子来介绍。但之前,我们稍微改一下做财务报告的方式,不是一个人全部做完,我们是一个团队。有的同事根据制作指南列计算步骤,有的同事根据计算步骤在小纸条上列公式,有的同事负责从账本上把数据抄到写好公式的小纸条上,有的同事对着小纸条用计算器算数并且算完了写回小纸条上,有的同事把小纸条上的数抄到最终的财务报表上。CPU里面,小纸条有一个专门的名称,叫寄存器(Register)。
2.1 缓存子系统(Memory Subsystem)
一家规模比较大点的企业,完整的账本很厚。我们做整年的财务报告,通常只需要每个科目的汇总数就可以了,为了方便,我们把每个科目汇总的那几页复印出来放在一起。
完整的财务报告制作指南也很厚,但一个企业可能只有其中很少一部业务。例如一家软件公司,就不涉及原材料进货、仓库存储之类的业务;很多公司也没有贷款、投资之类的业务。所以我们也只把跟公司有相关业务的部分复印出来。
同样的,内存中的数据很多,CPU只需要把计算用到的指令、数据放到缓存中——也就是图中的紫色块的缓存子系统。
2.2 前端(Front End)
CPU的前端其实就是我们上篇文章中的控制单元,负责对指令进行预处理。指令预处理大体上分为取指、预解码、融合、解码、分支预测、重排等操作。
取指(Fetch)
我们制作财务报表,第一步就是把制作指南拿出来。CPU也一样,先把指令载入进来。
预解码(PreDecode)
制作指南是一整页的,我们要分解出第一步算哪个数据,第二步又是算哪个数据,在小纸条上把公式列出来,一张小纸条一个公式。CPU也一样,要把程序中一整批的指令数据,拆分出来第一条是什么指令,第二条是什么指令;可能还需要对指令进行分类标志。预解码后的指令放在指令队列(InstructionQueue)里面。
解码(Decode),又称为译码
小纸条上的公式写着:利润=收入-支出,查帐本的同事就需要先把收入和支出数据从账本中找出来,抄到小纸条上。同样的,CPU碰到类似把内存中两个数加起来这样的指令,需要分解成:
从内存载入第一个数字;
从内存载入第二个数字;
两个数字相加
这样三个指令。一般来说,我们把原始的指令称为宏操作(Macro-Operations),分解后的指令称为微操作(Micro-Operations,μops)。
指令融合(Micro-Fusion/Macro-Fusion)
假设指南中有一个数据是算平均数的,某个按计算器的同事手上整好有一个可以直接算平均数的统计用计算器。那么,当我们在指南中看到一条类似
这样的公式的时候,我们可以直接列算这几个数的平均数公式,注明给这位同事算。CPU也一样,某些指令是可以融合起来执行的,例如:
比较A和B的大小;
如果A不等于B,跳转到标志__的指令。
可以用一条指令JNEA,B,__来代替,这样的处理称之为指令融合。指令解码前的宏操作融合,称为Macro-Fusion,解码后的微操作融合,称为Micro-Fusion。
分支预测(Branch Prediction)
理论上,制作指南中列出的所有步骤,我们都要完成上面的这些处理。但假设制作指南中说,盈利的话要算某几个数据,亏损的话这几个数不用算,要另外算其它几个数据。当我们计算过第一季度的数据知道企业第一季度是盈利的,我们算第二季度的数据时,想偷懒就直接跳过亏损要算的那几个数据的处理了。CPU处理指令也是一样的,负责预测的模块叫分支预测器(BranchPredictor)
当然,如果算下来我们发现第二季度亏损了,还是要重新处理指南上的这些计算步骤。CPU也一样。
指令重排,或者叫乱序执行(Out-Of-Order,OOO),或者动态执行(Dynamic E__ecution)
事实上,我们不一定要完全按照指南上的步骤第一步算什么,第二步算什么这样算。只要公式列出来,数据抄出来了,就可以直接交给按计算器的同事去算。所以可能第一步要用的数据不太好找,按计算器的同事就先把第二步算出来了。
当然,这里有一个前提,就是算第二步的时候,不需要用到第一步的计算结果。
2.3 执行单元(E__ecution Engine)
执行单元也就是上一篇文章提到的运算单元了。也就是我们这个团队里抄数据、按计算器的各位同事了。其中,按计算器的同事中,有的用的计算器简单点,只能做四则计算,还只能算整数;有的用高级点的计算器,可以算小数;有的用统计专用的计算器;有的用更高级的可以算很多函数的计算器。当然,有这么多不同的计算器,什么样的小纸条给哪位同事用,我们也需要有一个人来做分配小纸条这件事情。
数据存取单元(Load Data/Store Data)
CPU里面也一样,有负责从缓存子系统中载入数据的Load Data单元;有把计算结果写回去缓存子系统的Store Data单元。
计算单元
CPU里面负责具体计算的,根据计算类型、计算的数据不同,有多种计算单元:
整数算术逻辑单元(Integer Arithmetic Logic Unit,IntALU),算整数加减法/二进制运算;需要说明一下的,电脑里面很多小数计算也是通过移位操作处理后,用整数单元计算后再数小数位这样的方式来处理的。
整数乘法器(Integer Multiplier,Int MUL),专门负责整数乘法的;
整数除法器(Integer Divider,Int DIV),专门负责整数除法的;
分支处理(Branch),负责各种跳转指令的;
地址生成器(Address GenerationUnit,AGU),这个稍微解释一下,例如制作指南中说,总收入要和上一的总收入对比算增长率,那么就需要翻译成“现在做2024年的年报,上一就是2024总收入”。CPU也是一样,有的指令是把内存地址A1的数和A1后面第五个地址的数相加,那么要先算出来A1后面五个地址A2到底是哪个地址。
整数向量ALU(Int Vect ALU),向量是指类似空间坐标+值(__,y,z,value)这样的一组数据,其中__、y、z和value都是整数。类似整数,除了算加减法/二进制的整数向量ALU,还有整数向量乘法器、除法器(Int VectMUL,Int Vect DIV)。
浮点向量加乘融合单元(Fused multiply–add,FP FMA),这个也要解释一下。我们知道,105可以写成这样的形式,这种形式在计算机中称为浮点数。上面提到向量中,如果(__,y,z,value)中的一个或者多个都是浮点,就是浮点向量。而加乘融合,是指
这样的计算,当然,可以算加乘融合的,自然也可以用来算加减法和乘法:A=0就是乘法,C=1就是加减法。
浮点除法单元(FP DIV):算浮点除法的,也可以算一些常用函数例如开方、对数等。
其它:例如加密用的AES,字符串处理的Vect String,位查找的bit Scan(对一个二进制数据按照多种方法数0)
调度器(Scheduler)
有这么多不同的计算单元,CPU需要一个把不同的计算指令分配给对应计算单元的调度器。
不过呢,我们这个财务部比较特殊,分了几个小办公室,某几个同事在一个办公室里面,另外几个同事又在另一个办公室里面,而每次我们只能传一张小纸条到一个办公室。
在9900K里面,从图中可以看到,不同的计算单元在不同的端口(Port)下,就是类似的情况。
寄存器文件(Register File)
计算财务数据的时候,很多数据的计算是需要多步计算的,具体到每一步的计算,可能要分给不同的同事来算。如果每一步列一张小纸条,等某位同事算完第一个数,再抄到第二张小纸条给另外一位同事,这显然很慢很麻烦——直接列在一张小纸条上就好了嘛。
另外,我们有这么多同事,分配小纸条的同事每次传小纸条可以一次分配好多张——当然,前提是分给不同的同事。
因为可能一张纸条要算好几次,又有这么多纸条传来传去,因此为了不出错,我们需要标明这张小纸条给谁算,算完了,负责分配小纸条的同事根据下一步要算的,把标注的名字改一下给另外一位同事去算。
CPU中的寄存器也一样,一个数据可能需要不同的计算单元多次处理,又有那么多的计算单元分成了好几组。所以我们需要多个寄存器,这些寄存器的组合称之为寄存器文件。每个计算单元只能处理特定名称的寄存器里面的数据,因此调度器经常需要对寄存器进行分配、重命名、退出等操作
第三篇:CPU基础知识详解
CPU基础知识大全详解有哪些?CPU在电脑中是最核心关键的硬件之一,相当于人的大脑,决定了电脑运算能力,因此CPU的选择至关重要。下面就让小编带你去看看CPU基础知识大全详解,希望对你有所帮助吧!
程序员必须了解的CPU知识-科普篇
1导读
对于一名程序员来说,无论你使用的是什么语言,代码最终都会交给CPU来执行。所以了解CPU相关的知识一方面属于程序员的内功,另一方面也可以帮助你在日常编写代码时写出更加高效的代码
本文不打算对CPU进行深入探究,相反是以简单的语言来帮助大家了解CPU的工作原理以及不得不提到的CPU缓存相关知识,其中晦涩的内容我会通过配图来帮助大家理解,最后会以几个例子来帮助大家更直观的感受到CPU缓存带来的性能影响
2CPU基础知识
CPU即Central ProcessingUnit(中央处理器),是我们的代码打交道最多的硬件之一,要想让一个CPU工作,就必须给它提供指令和数据,而这里的指令和数据一般就放在我们的内存当中。其中指令就是由我们平常编写的代码翻译而来,数据也是我们代码中需要用到的数据(例如一个int值、一串字符串等等)
以C语言为例,从我们开始编写到运行的生命周期可以粗略的用下图表示:
大致分为以下几个步骤
我们日常中使用编辑器或者IDE敲入代码
代码编写完成后使用编译和链接工具生成可以被执行的程序,也就是机器语言(指令的集合)
当程序被运行时,整个程序(包括指令和数据)会被完整的载入到内存当中
CPU不停的向内存读取该程序的指令执行直到程序结束
通过上述第4步我们知道,CPU自身是没有保存我们的程序的,需要不停的向内存读取
那么有个问题是CPU是如何向内存读取的呢?
这里其实存在一个“总线”的概念,即CPU会通过地址总线、控制总线、数据总线来与我们的内存进行交互。其中地址总线的作用是寻址,即CPU告诉内存需要哪一个内存地址上的数据;控制总线的作用是对外部组件的控制,例如CPU希望从内存读取数据则会在控制总线上发一个“读信号”,如果希望往内存中写一个数据则会发一个“写信号”;而数据总线的作用顾名思义就是用来传输数据本身的了
例如CPU需要希望从内存中读一条数据,那么整个过程为:
到这里我们已经知道了CPU在执行我们程序的过程中会不断的与内存交互,读取需要的指令和数据或者写入相关的数据。这个过程是非常非常快的,一般CPU与内存交互一次需要200个时钟周期左右,而现代的处理器单个时钟周期一般都短于1纳秒(1秒= 十亿纳秒)
但我们的前辈们仍然对这个速度不满足,所以又对CPU设计了一套缓存系统来加速对内存中数据的读取
3CPU缓存
现代CPU通常设计三级缓存(L1、L2、L3),其中L1、L2缓存是每个CPU核心独享的,L3缓存是所有CPU核心共享的,而L1缓存又分为数据缓存和指令缓存
我们的数据就从内存先到L3缓存中,再到L2缓存中,再到L1缓存中,最后再到CPU寄存器中
按照大小来看,通常L1 < L2 < L3 < 内存 <磁盘,如果你手边有一台Linu__机器的话,可以通过下面的命令查看CPU各级缓存的大小
以我手上这台服务器为例,L1指令缓存大小为32K、数据缓存大小为32K,L2缓存大小为1MB,L3缓存大小为35.75MB
按照速度来看,通常L1 > L2 > L3 > 内存 > 磁盘,以时钟周期为计量单位
L1缓存:约 4 个CPU时钟周期
L2缓存:约 10 个CPU时钟周期
L3缓存:约 40 个CPU时钟周期
内存:约 200 个CPU时钟周期
也就意味着如果能命中缓存,我们程序的执行速度至少提升5倍左右,如果能命中L1缓存则提升50倍左右,这已经属于相当大的性能提升了
有了缓存系统后,CPU就不必要每条指令或数据都读一次了,可以一次性读取若干条指令或数据然后放到缓存里供以后查询,因为根据局部性原理,CPU访问内存时,无论是读取指令还是数据,所访问的内存单元都趋于聚集在一个较小的连续区域中,所以一次性读取一块连续的内存有利于后续的缓存命中
现实中,CPU通常情况下每次的读取内存时都会一次性读取内存中连续的64个字节,这个连续的64字节术语就叫做CacheLine(缓存行),所以每一级CPU缓存就像下面这样
如果你手边有一台Linu__机器的话,可以通过下面的命令查看你的机器使用的CPU的Cache Line大小是多少
对于我的服务器来说,L1缓存就有 32KB / 64B = 512 个Cache Line
到这里,我们已经知道了CPU缓存的工作原理和加载方式,这里实际上还遗留了两个话题没有讲,一个是如何组织每一级的 Cache Line(例如 L1 的512 个CacheLine)来提升访问的命中率;另一个更加复杂一点,在现代CPU都是多核的场景下如何保证数据的一致性,因为每个核都有自己的L1和L2缓存,那么如果核心1修改的时候只修改了缓存的数据而没有修改内存中的数据,其他核心读到的就是旧数据了,如何解决这一问题?
由于本篇文章只是期望对CPU知识进行一个科普,不希望对于小白来说一次性接触大量的新内容,所以这两个问题我准备在后面的另外两篇再进行更细致的讨论
4性能对比
下面以几个实际的例子来加深大家对Cache Line如何影响程序性能的理解
示例一
我们假设有一个5000万长度的int数组,接着把这个数组的其中一些元素乘以2,考虑下面这两份代码
直觉上代码一比代码二少循环了4倍,并且也少乘2了4倍,理论上代码一比代码二快4倍左右才合理
但在我的服务器上运行的结果是代码一平均花费90毫秒,代码二平均花费93毫秒,性能几乎是差不多的,读者可以自行思考一下原因,再点击下方空白处查看解析
点击下方空白区域查看解析
▼
解析
这里最主要的原因还是CacheLine,虽然代码一需要执行的指令确实比代码二要少4倍,但由于CPU一次会把连续的64个字节都读入缓存,而读写缓存的速度又特别快(还记得吗?L1的读取速度只有约4个时钟周期,是内存的50倍),以至于我们很难察觉到这4倍指令的差距
示例二
假设我们需要遍历一个二维数组,考虑下面这两种遍历方法:
由于数组长度是一模一样的,直觉上我们期望的是两份代码运行时间相差无几。但在我的服务器上代码一运行需要23毫秒,代码二运行需要51毫秒,读者可以自行思考一下原因,再点击下方空白处查看解析
点击下方空白区域查看解析
▼
解析
这里最主要的原因依然是Cache Line,由于C语言中二维数组的内存是连续的,所以我们按行访问的时候访问的一直都是连续的内存,而CacheLine也是连续的64个字节,所以按行访问对Cache Line更友好,更容易命中缓存
而按列访问的话每次访问的内存不是连续的,每次的跨度都是256__sizeof(int)也就是1KB,更容易出现缓存Miss
示例三
假设我们有一个数组,我们希望计算所有大于100的元素的和,考虑下面两份代码
其中代码一是随机生成了个长度为1000W的数组,然后统计大于100的所有数字的和;代码二也是随机生成了个长度为1000W的数组,但是是先排完序,再统计大于100的所有数字的和。并且可以看到,两份代码都是只计算了统计sum的那段代码的消耗时间,所以两份代码都不考虑随机生成数组和排序花费的时间
理论上来讲两份代码花费时间应当是相差无几的,但实际上在我的机器上跑出来第一份代码输出的是46毫秒,第二份代码输出的是23毫秒
读者可以自行思考一下原因,再点击下方空白处查看解析,提示:第二份代码中在统计sum之前数组是有序的电脑CPU如何选购?台式机CPU知识扫盲和选购建议
CPU有几个重要的参数:架构、主频、核心、线程、缓存、接口。
架构:
有句老话叫“抛开架构看核心主频都是耍流氓”,那什么是架构?假如我们把架构想象成交通工具,那么老的架构就是火车,而新的架构就是高铁,所以架构的提升直接影响CPU的性能。这也就是为什么老式的CPU虽然也有超高的主频但性能还是被现在的i3碾压的原因了。
电脑CPU如何选购?台式机CPU知识扫盲和选购建议
主频:
我们常在CPU的信息里看到某某CPU主频3.6GHz,这里的主频其实是CPU内核工作的时钟频率,并不直接等于CPU的运算速度,但是高的主频对于CPU的运算速度却至关重要。
核心:
核心又称内核,是CPU用来完成所有计算、接受/存储命令、处理数据等任务的装置。我们可以简单的把核心理解为人的手,单核就是一只手、双核就是两只手、四核就是四只手。
核心数并不是越多越好的,要看使用场景,比如在打字的时候,两只手就比一只手效率高,但是在操作鼠标的时候,使用两只手只会起到适得其反的效果。至于什么场景需要使用多少核心的CPU在下面会讲到。
电脑CPU如何选购?台式机CPU知识扫盲和选购建议
线程:
我们通常会看到“四核四线程”和“四核八线程”这两种说法,我们可以简单的把工厂里的流水线比作线程,把工人比作核心,早先由于工人工作技能不高,一个工人只能处理一条流水线的任务,我们可以把这个称为单核单线程,但是后来工人技术熟练了,觉得操作一条流水线很无聊,不能体现自己的价值,于是就给又分配一条流水线,让这个工人同时处理两条流水线的任务,我们可以把这个称为“单核双线程”。
缓存:
缓存也是CPU里的一项非常重要的参数,由于CPU的运算速度比内存条的读写速度要快很多,这会让CPU花费很长的时间等待数据的到来或是把数据写入内存条,这个时候CPU内的高速缓存可以作为临时的存储介质来缓解CPU的运算速度与内存读写速度不匹配的矛盾,所以缓存越大越好。
电脑CPU如何选购?台式机CPU知识扫盲和选购建议
接口:
CPU需要通过接口安装在主板上才能工作,而目前CPU的接口都是针脚式接口,AMD和英特尔的CPU在接口上就有很大的差别,所以需要使用适配接口的主板才能正常工作。目前英特尔主流的接口类型为LGA-1151接口(6、7、8代i3i5 i7都是这种接口);AMD平台主流的接口类型有AM4接口(锐龙系列)和FM2+接口(速龙系列、APU系列)。
PS:英特尔最新的酷睿8代CPU虽然也是LGA-1151接口,但不适配老式的LGA-1151接口主板的平台,需要另购主板
说完了这些重要的参数,相信你也对CPU有了一个大概的了解,我们再谈谈不同场景对CPU的选择。
计算机系统基础:CPU相关知识笔记
1、什么是CPU
计算机的基本硬件系统由运算器、控制器、存储器、输入设备、输出设备5大部件组成。
运算器和控制器等部件被集成在一起称为中央处理单元(Central Processing Unit,CPU).CPU
是硬件系统的核心。
2、CPU的用途
CPU主要负责获取程序指令、对指令进行译码并加以执行。
CPU的功能如下:
3、CPU的组成CPU主要由运算器、控制器、寄存器和内部总线等部件组成。
3.1 运算器
运算器包括算术逻辑单元(ALU)、累加器、缓冲寄存器、状态条件寄存器等。它的主要工作是完成所规定的的各种算术和逻辑运算。
算术逻辑单元(ALU):ALU的重要组成部件,负责处理数据,实现算术和逻辑运算。
累加器(AC):当执行算术或逻辑运算时,为ALU提供一个工作区。
数据缓冲器(DR):作为CPU和内存、外部设备之间数据传送的中转站、操作速度的缓冲;
在单累加器结构的运算器中,DR还可以作为操作数寄存器。
状态寄存器(PSW):保存算术指令和逻辑指令运行或测试的结果建立的的各种条件码内容,分为状态标志和控制标志。
3.2 控制器
用于控制这个CPU的工作,不仅要保证程序的正确执行,还要能处理异常事件。
控制器主要包括指令控制逻辑、时序控制逻辑、总线控制逻辑、中断控制逻辑。
3.2.1 指令控制
指令寄存器(IR):当执行一条指令时,需要先把它从内存存储器取到缓冲寄存器中,再送入IR中暂存,指令译码器会根据IR的内容产生各种微操作命令,控制其他部件协调工作,完成指令的功能。
程序计数器(PC):PC具有寄存和计数两种功能。又称为指令计数器。
地址寄存器(AR):用来保存当前CPU所访问的内存单元地址。
指令译码器(ID):包含指令操作码和地址码两部分,为了能执行任何给定的指令必须对操作码进行分析,以便识别要进行的操作。
3.2.2 时序控制
时序控制要为每条指令按时间顺序提供应有的控制信号。
3.2.3 总线控制
为多个功能部件提供服务的信息通路的控制电路。
3.2.4 中断控制
用于控制各种中断请求,并根据优先级排队,逐个交给CPU处理。
3.3 寄存器组
分为专用寄存器、通用寄存器。运算器和控制器中的寄存器是专用寄存器,作用是固定的。
通用寄存器用途广泛由程序员规定其用途。
4、什么是多核CPU
内核:CPU的核心称为内核,是CPU的最重要组成部分。CPU的所有计算、接收/存储命令、处理数据都是由核心执行。
多核:在一个单芯片上集成两个或者更多个处理器内核,并且每个内核都有自己的逻辑单元、控制单元、中端处理器、运算单元、一级Cache、二级Cache共享或独有。
多核CPU优点:可满足用户同时进行多任务处理等要求。
第四篇:CPU讲稿
CPU是Central Processing Unit(中央微处理器)的缩写,由运算器和控制器两部分组成,按照其处理信息的字长,CPU可以分为:4位微处理器、8位微处理器、16位微处理器、32位微处理器以及正在走红的64位微处理器。
一、CPU发展的孕育期(1971~1978)
代表CPU:intel 4004、8008 世界上第一款可用于微型计算机的4位处理器,是英特尔公司于1971年推出的包含了2300个晶体管的4004。由于性能很差,市场反应十分冷淡。于是Intel公司随后又研制出了8080处理器、8085处理器,加上当时Motorola公司的MC6800微处理器和Zilog公司的Z80微处理器,一起组成了8位微处理器的家族。
二、CPU发展的摇篮期(1978~1979)
代表CPU:intel 8086、8088 这期间的代表是英特尔公司1978年推出的这款8086处理器,它是第一块16位微处理器,最高主频为8MHz,内存寻址能力为1MB。同时英特尔还生产出与之相配合的数学协处理器8087,这两种芯片使用相互兼容的指令集,但i8087指令集中增加了一些专门用于对数、指数和三角函数等数学计算的指令,人们将这些指令集统一称之为 x86指令集。虽然以后英特尔又陆续生产出第二代、第三代等更先进和更快的新型CPU,但都仍然兼容原来的x86指令。从这点上来说,虽然用今天的眼光看来,8086的性能是那么的不堪,但是它的诞生却奠定了以后CPU发展的基础。
1979年,英特尔公司再接再厉,又开发出了8088。8088集成了约29000个晶体管,采用40针的DIP封装,最高频率为8MHz。也正是从8088开始,PC(个人电脑)的概念开始在全世界范围内发展起来,因为1981年IBM公司将8088芯片首先用于其研制的PC机中,标志着PC真正走进了人们的工作生活之中。
三、CPU发展的婴幼期(1979~1985)
代表CPU:Intel 80286 1982年,英特尔公司在8086的基础上,研制出了80286微处理器,它 是一颗真正为PC而存在的CPU,IBM公司将80286微处理器首先用在AT机中,引起了业界了极大的轰动。80286 采用PGA封装,集成了大约130000个晶体管,最大主频为20MHz,内、外部数据传输均为16位,使用24位内存储器的寻址,内存寻址能力为16MB,可使用的工作方式包括实模式和保护模式两种。在这之前,INTEL也发布过80186 CPU,这是一颗性能介于8088,80286之间的的CPU,但因为某种原因,80186从来都没有在PC中应用过。
四、CPU发展的幼儿期(1985~1993)
代表CPU:intel 80386、80486 1985年10月,intel推出了386DX,其内部包含27.5万个晶体管,最高频率为40MHz,内部和外部数据总线是32位,地址总线为32位,可以寻址4GB内存,管理64TB的虚拟存储空间,并且有比80286更多的指令。而且在386时代,英特尔为了解决内存的速度瓶颈,采取了用预读内存的方法来缓解,并为386设计了高速缓存(Cache)这一方案。intel的这一设想无疑是伟大的,不仅一直沿用至今,而且还发挥着越来越重要的作用。
在intel发布386的时候,同时也有其他的几家CPU制造商也推出了类似的产品,性能也不错,比如Motorola 68000、AMD Am386SX/DX和IBM 386SLC。
1989年,英特尔乘胜追击推出486芯片,该芯片集成了120万个晶体管,使用1微米的制造工艺,频率从25MHz逐步提高到50MHz。在当时,486所采用的技术是最先进的,采用了突发总线方式,大大提高了与内存的数据交换速度。性能比80386 DX提高了近4倍。
在intel推出486的同时,其他几家CPU制造商也不甘寂寞,也都发布了自己的同性能CPU,其中以TI 486 DX、Cyrix 486DLC和AMD 5x86为代表。
五、CPU发展的儿童期(1993~1999)
代表CPU:Intel Pentium/Pentium2/Celeron、AMD K5/K6 1993年,intel的Pentium(奔腾)CPU面世,这一全面超越486的性能优良的产品为intel赢得了巨大的声誉,Intel?inside 深入人心,同时也把其他竞争对手甩在了后面,一举奠定了市场的霸主的地位。早期奔腾75MHz~120MHz使用0.5微米制造工艺,后期120MHz以上的奔腾则改用0.35微米工艺。
97年~98年,这两年对于CPU业界来说,绝对是一个不平凡的一年,也是一个极其混乱的两年,这不仅是因为在这两年里,各大CPU厂商都拿出了自己的看家法宝,也是因为在这两年里,不少CPU制造商因产品性能问题被兼并或倒闭。
97年初intel为了提高电脑在多媒体、3D图形方面的应用能力,发布了Pentium MMX(多能奔腾),同时许多新指令集也应运而生,其中最著名的就是intel的MMX(MultiMedia Extensions,多媒体扩展指令集)、SSE和AMD的3D NOW!。这些指令可以一次处理多个数据,在软件的配合下,可以得到最佳的性能。
97年中Pentium II和AMD K6上市,年末Cyrix 6x86MX面市。AMD是一个生命力异常顽强的公司,在与intel的竞争中,一直是屡败屡战,精神可嘉。在Pentium呼风唤雨的年代,AMD在1996年发布了自己第一块独立生产的x86级CPU——K5,但性能一般。永不服输的AMD在1997年又卷土重来,推出了拥有全新的MMX指令,整体性能要优于奔腾MMX,接近同主频PⅡ的水平K6。
到了98年,经过一年混战,CPU市场正式开始洗牌。Intel的Pentium 2发布,它采用0.25微米工艺制造,最高频率为400MHZ。但是因为转用了Slot 1架构,所以很多消费者并买帐。AMD的K6-2乘机而入,凭借低廉的价格一度占得近30%的市场份额,这也给AMD一个喘息的机会。所以到了99年,面对Intel的猛烈反扑,AMD没有步Cyrix的后尘,落得被收购的下场。
而在低端市场,英特尔为进一步抢占市场份额,于98年4月推出了最高频率为300MHz的Celeron(赛扬),但因为没有二级缓存,该微处理器性能甚为低下,于是intel紧接着又发布了内建32KB L1 Cache、128KB L2 Cache的Celeron300A、333、366,在市场中挽回了一点颜面。
六、CPU发展的少年期(1999~2024)
代表CPU:Intel Pentium3、AMD Athlon 99年伊始,intel就忙不迭的发布了采用Katmai核心的Pentium3 CPU,该CPU的系统总线频率为100MHz,起始主频为450MHz,一级缓存为32KB(16KB指令缓存加16KB数据缓存),二级缓存大小为512KB,0.25微米工艺制造,内部集成950万个晶体管,采用Slot 1架构。
反观AMD方面,为了抵抗来势汹汹的P3,AMD于99年6月推出了具有重大意义的K7微处理器,并将其正式命名为Athlon。K7也不负众望,在时钟频率上率先进入到了G时代,并给intel的处理器在市场上带来了很大的压力,自此,CPU市场真正步入intel、AMD两强争霸的时代。
七、CPU发展的青年期(2024~2024)
代表CPU:intel Pentium4/Celeron4、AMD Athlon xp/Duron 面对市场的压力,intel于2024年发布了Pentium4处理器。但接下来的一切都不是很顺利,光是接口就改了2次。第一次是因为刚开始的423接口的Willamette 核心 P4 所搭配的 RDRAM(i850芯片组)价格太高,市场反应冷淡,于是又改成NORTHWOOD核心的478接口P4。再后来为了提升频率,intel又将核心改换为 Prescott 核心,接口也换为LGA775,虽然经过这么一折腾,频率是上去了,最高的达到了4G,但是发热量也高的惊人,而且如此频繁的改换接口,也令消费者不厌其烦。
在低端市场,intel则一律把CPU的二级缓存消减3/4,从512K到128K(后期的 Prescott 核心赛扬为256K),使性能大大削弱了。
而AMD公司则在2024年6月份推出了Athlon xp处理器,再次向英特尔发出了挑战,并在DIY市场取得重大成功,可以这么说,在进入到Pentium4时代以来,在AMD的紧逼下,intel感到了前所未有的危机,这也为AMD后来的K8处理器打下了一个坚实的基础。
早期的Palomino核心Athlon XP为0.18微米制造工艺,发热量较大。但在AMD采用了新的Thoroughbred核心后,发热量问题得到了很好的控制。而两者除了在发热量及DIE尺寸上有所不同外,外形几乎一样,都是462针的接口、128K的一级缓存和256K的二级缓存和3750万的晶体管数。
八、CPU发展的壮年期(2024~至今)
代表CPU:AMD Athlon 64
第五篇:CPU学习心得
CPU学习感想
今天终于测试成功了!
清楚得记得,3周前自己把所有线路都接好时的兴奋和小小的成就感。可是,我并没有在第一次测试时就成功,甚至当第一次接上电源时,连可爱的保护电路都是“罢工”状态,当时背上就出汗了,惊愕啊!记得当时自己还有点不耐烦,因为那断时间做事情都很不顺利,还遇到好多不开心的事情,现在面前又摆了个不work的CPU电路板,郁闷不说,还产生了放弃的念头。。在这里真的要感想小孟学长,若不是他的耐心指导和帮助,让我看到一点希望,我想我也许就放弃了吧。
说实话,从去听课介绍CPU,到自己上网查各类资料,再到和老师沟通,再到开始动手插面包板,到最后的测试找Bug并且Debug,这一过程中,我学到的不仅仅只是关于CPU的知识,还有耐心、细心、谦虚。
我本身对电脑知识了解的很少,刚去听课时,对什么CPU的基本知识都一无所知,像ALU,CAD等等,也找不到头绪,不知道从哪下手,感觉自己不知道得实在太多。我开始和老师频繁得通e-mail,询问老师各种看来都很低级的问题,金老师有个特点,他不会直接告诉你答案,而是要你自己去思考和寻找答案——这也是我在学习CPU时最大的收获,并且已经感觉到它的重要性。老师会给我指一个方向,给我一点提示,接下来都要靠自己去思考自己动手。我开始对CPU有了大致的了解和概念,也对自己制作这样一个电路板有了一些信心。
在开始动手后,有一个让我印象格外深——输入A由register file出来后要与check做AND再输入IC7483,可是,平时做的AND,2个输入都是1bit,现在一个输入A(4bit)另一个输入check(1bit),这要怎么做呢?看着IC7408,恍然发现,可以让A的4个bit分别与check做AND,然后再依序输出,就能得到4bit的A与1bit的check做AND的结果了!当时很开心,一路接下去也很顺利。沿途还注意到IC7483是做加法器用,所以Co要接地;总共有2个clock,IC74195 和IC74157,并且每种有2颗,当时我就想到,可以只做一个clock电路,让IC74157的clock位接到Q,IC74195的enable位接Q’,因为当74157的选择位是0时,会选择输出B的资料,第一次就把B写进去了,摁下clock后就会将A写进去,这样就能完成接下来的A*B的工作;同时,我还想,接一个保护电路的话,保护力度会不够,所以在第二块板上也加了一个保护电路;感觉自己做的最明智得就是将重要的输入输出都拉出来,经过LED显示,并在板子周边贴上小纸条做标记,心想,这样出来的效果会更明显些。在接近尾声时,发现自己的材料不够,甚至IC还有拿错的,我2次跑去实验室找学长拿材料,那时候心情也很好,觉得自己在做一件很伟大的事情一样。
测试时经历时间最长的,在第三次时终于成功了。也许是在宿舍放太久了吧,第一次接上电源,保护电路的LED都不亮,自信心一下子就浇灭了一半。学长建议换个LED试试,这才看到一丝光亮。第一次测试,经过换LED、换IC、重接clock电路,让保护电路和clock电路正常work了。第二次测试,我和学长从9点一直Debug到12点半,各种稀奇古怪的情况和小错误,类似LED坏了,IC坏了,有线没插好,线插错位置了,DIPI开关接错等等,一点一点找问题,然后再解决。我们顺利让74157和register file工作了。我还确定了,剩下的问题来自于7483,导致74195无法正常work。这真的很锻炼耐性和细心。我记得那次从实验室里走出来,腿都软了。第三次测试,只花了半小时。学长和我一开始怎么都找不到7483那块问题所在,我们甚至还把所有DIPI开关和排阻来控制输入的电路换了另一种接法(其中,我知道LED不亮并不代表off,只有它真正接地才是off状态),试图想“唤醒”7383.,可是7483 很不给“面子”,其他都正常,就它在“罢工”,最后没辙,决定换颗IC试试。不能怕麻烦,真的,即使那颗IC被很多线缠绕,也要耐性把它从里面“解救”出来并且把好的在放到正确的位置。当新的7483按上的那一瞬间,期望的LED都亮了!开心得不得了!那种喜悦,真的只有真正经历的人才能体会哈!
感谢一路帮我的小孟学长。
感谢最最最好的金老师,教会我好多,学习上的,做人做事上的,让我受益匪浅!
推荐阅读:
CPU基础知识(含五篇)
安全生产协议书
落实责任履行基层党建工作(三)[大全]
党员廉洁自律准则学习笔记[范文模版]
六年级重阳节庆祝作文(五篇范文)
相关文章:
- [ 四号文库 ]CPU基础知识(含五篇)
- [ 四号文库 ]有关可贵作文700字[推荐五篇]
- [ 四号文库 ]2024年社区元旦联欢会主持词开场词(二十三篇)
- [ 四号文库 ]保洁公司员工规章制度 家政公司员工规章制度(二十篇)
- [ 四号文库 ]月度工作例会主持词 公司月度会议主持词(二十二篇)
- [ 四号文库 ]最新六一儿童节文艺汇演主持词结尾(二十一篇)
- [ 四号文库 ]2024年六一儿童节庆祝词主持词(3篇)
- [ 四号文库 ]2024年六一儿童节感人主持词结束语(21篇)
- [ 四号文库 ]三八妇女节晚会主持词及串词(24篇)
- [ 四号文库 ]网课利弊精彩发言稿范文5篇
- [ 四号文库 ]家风家训家规作文精选五篇
- [ 四号文库 ]学校联欢晚会主持词结束语 学校新年联欢会主持词开场白和结束语(三篇)
- [ 四号文库 ]和谐人际关系制度
- [ 四号文库 ]乡镇人大工作存在的问题及对策
- [ 四号文库 ]国企党史教育党课讲稿
- [ 四号文库 ]部编版三年级上册语文第六单元第20课《美丽的小兴安岭》同步练习A卷
- [ 四号文库 ]英语四六级作文必背短语、短句
- [ 四号文库 ]最新幼儿园母亲节的主持词 幼儿园母亲节主持结束语(3篇)
- [ 四号文库 ]中国新疆之历史印记观看简报(五篇)
- [ 四号文库 ]多字的日记600字左右(含五篇)