不是.CPU从存储器或高速缓冲存储器中取出指令,放入指令寄存器,并对指令译码,并执行指令
简单的说,电脑所有的动作都是输入指令然后通过CPU来执行
最后把结果呈现在我们眼前
B. 电子计算机的工作原理和执行程序的过程是怎样的
计算机从一开机就在执行程序,除了执行程序,它什么都不会干。执行程序的过程仅是以下4个过程的不断重复。
①CPU按指定的地址从存储器中取出指令。
②执行这条指令。
·每次执行指令一般是以下几种操作之一或二:
·从指定存储单元或I/O接口单元取出数据。
·将数据写入指定的存储单元或I/O接口单元。
·对数据进行算术或逻辑运算。
③计算下一条指令在存储器中的地址(在大多数情况下,下一条指令地址紧接着上一条指令的地址)。
④返回到第1步开始下一个取指令、执行指令周期。
可以看出计算机的运行过程,就是执行程序的过程。CPU 不断地从存储器中取出指令执行,通过执行指令完成对存储器中数据的加工和实现对I/O设备的操作。以上过程虽然很简单,每条指令能干的事情很少,但是计算机依靠高速地、大量地执行简单的指令来实现复杂的功能。所以计算机发展一直以提高速度为目标。
C. CPU执行方式
CPU的工作分为 5 个阶段:取指令阶段、指令译码阶段、执行指令阶段、访存取数和结果写回。
1、取指令(IF,instruction fetch),即将一条指令从主存储器中取到指令寄存器的过程。
2、指令译码阶段(ID,instruction decode),取出指令后,指令译码器按照预定的指令格式,对取回的指令进行拆分和解释,识别区分出不同的指令类 别以及各种获取操作数的方法。
3、执行指令阶段(EX,execute),具体实现指令的功能。CPU的不同部分被连接起来,以执行所需的操作。
4、访存取数阶段(MEM,memory),根据指令需要访问主存、读取操作数,CPU得到操作数在主存中的地址,并从主存中读取该操作数用于运算。
5、结果写回阶段(WB,write back),作为最后一个阶段,结果写回阶段把执行指令阶段的运行结果数据“写回”到某种存储形式。
(3)cpu执行指令需要从存储器搜索吗扩展阅读:
CPU的根本任务就是执行指令,对计算机来说最终都是一串由“0”和“1”组成的序列。CPU从逻辑上可以划分成3个模块,分别是控制单元、运算单元和存储单元,这三部分由CPU内部总线连接起来。
1、控制单元是整个CPU的指挥控制中心,由指令寄存器IR(Instruction Register)、指令译码器ID(Instruction Decoder)和 操作控制器 OC(Operation Controller)等,对协调整个电脑有序工作极为重要。
2、运算单元,是运算器的核心。可以执行算术运算(包括加减乘数等基本运算及其附加运算)和逻辑运算(包括移位、逻辑测试或两个值比较)。
3、存储单元,包括CPU片内缓存和寄存器组,是CPU中暂时存放数据的地方,里面保存着那些等待处理的数据,或已经处理过的数据,CPU访问寄存器所用的时间要比访问内存的时间短。
一 CPU的原始工作模式
在了解CPU工作原理之前,我们先简单谈谈CPU是如何生产出来的。CPU是在特别纯净的硅材料上制造的。一个CPU芯片包含上百万个精巧的晶体管。人们在一块指甲盖大小的硅片上,用化学的方法蚀刻或光刻出晶体管。因此,从这个意义上说,CPU正是由晶体管组合而成的。简单而言,晶体管就是微型电子开关,它们是构建CPU的基石,你可以把一个晶体管当作一个电灯开关,它们有个操作位,分别代表两种状态:ON(开)和OFF(关)。这一开一关就相当于晶体管的连通与断开,而这两种状态正好与二进制中的基础状态“0”和“1”对应!这样,计算机就具备了处理信息的能力。
但你不要以为,只有简单的“0”和“1”两种状态的晶体管的原理很简单,其实它们的发展是经过科学家们多年的辛苦研究得来的。在晶体管之前,计算机依靠速度缓慢、低效率的真空电子管和机械开关来处理信息。后来,科研人员把两个晶体管放置到一个硅晶体中,这样便创作出第一个集成电路,再后来才有了微处理器。
看到这里,你一定想知道,晶体管是如何利用“0”和“1”这两种电子信号来执行指令和处理数据的呢?其实,所有电子设备都有自己的电路和开关,电子在电路中流动或断开,完全由开关来控制,如果你将开关设置为OFF,电子将停止流动,如果你再将其设置为ON,电子又会继续流动。晶体管的这种ON与OFF的切换只由电子信号控制,我们可以将晶体管称之为二进制设备。这样,晶体管的ON状态用“1”来表示,而OFF状态则用“0”来表示,就可以组成最简单的二进制数。众多晶体管产生的多个“1”与“0”的特殊次序和模式能代表不同的情况,将其定义为字母、数字、颜色和图形。举个例子,十进位中的1在二进位模式时也是“1”,2在二进位模式时是“10”,3是“11”,4是“100”,5是“101”,6是“110”等等,依此类推,这就组成了计算机工作采用的二进制语言和数据。成组的晶体管联合起来可以存储数值,也可以进行逻辑运算和数字运算。加上石英时钟的控制,晶体管组就像一部复杂的机器那样同步地执行它们的功能。
CPU的内部结构
现在我们已经大概知道CPU是负责些什么事情,但是具体由哪些部件负责处理数据和 执行程序 呢?
1.算术逻辑单元ALU(Arithmetic Logic Unit)
ALU是运算器的核心。它是以全加器为基础,辅之以 移位寄存器 及相应控制逻辑组合而成的电路,在控制信号的作用下可完成加、减、乘、除四则运算和各种逻辑运算。就像刚才提到的,这里就相当于工厂中的生产线,负责运算数据。
2.寄存器组 RS(Register Set或Registers)
RS实质上是CPU中暂时存放数据的地方,里面保存着那些等待处理的数据,或已经处理过的数据,CPU访问寄存器所用的时间要比访问内存的时间短。采用寄存器,可以减少CPU访问内存的次数,从而提高了CPU的工作速度。但因为受到芯片面积和集成度所限,寄存器组的容量不可能很大。寄存器组可分为专用寄存器和通用寄存器。专用寄存器的作用是固定的,分别寄存相应的数据。而通用寄存器用途广泛并可由程序员规定其用途。通用寄存器的数目因微处理器而异
您在浏览本页面时使用的计算机便通过微处理器来完成其工作。微处理器是所有标准计算机的心脏,无论该计算机是桌面计算机、服务器还是笔记本电脑。您正在使用的微处理器可能是奔腾、K6、PowerPC、Sparc或者其他任何品牌和类型的微处理器,但是它们的作用大体相同,工作方式也基本类似。
3.控制单元(Control Unit)
正如工厂的物流分配部门,控制单元是整个CPU的指挥控制中心,由指令寄存器IR(Instruction Register)、指令译码器ID(Instruction Decoder)和 操作控制器 0C(Operation Controller)三个部件组成,对协调整个电脑有序工作极为重要。它根据用户预先编好的程序,依次从存储器中取出各条指令,放在指令寄存器IR中,通过指令译码(分析)确定应该进行什么操作,然后通过 操作控制器 OC,按确定的时序,向相应的部件发出微操作控制信号。操作控制器OC中主要包括节拍 脉冲发生器 、控制矩阵、 时钟脉冲 发生器、 复位电路 和启停电路等控制逻辑。
4.总线(Bus)
就像工厂中各部位之间的联系渠道,总线实际上是一组导线,是各种公共信号线的集合,用于作为电脑中所有各组成部分传输信息共同使用的“公路”。直接和CPU相连的总线可称为局部总线。其中包括: 数据总线DB(Data Bus)、地址总线AB(Address Bus) 、控制总线CB(Control Bus)。其中,数据总线用来传输数据信息;地址总线用于传送CPU发出的地址信息;控制总线用来传送控制信号、时序信号和状态信息等。
CPU的工作流程
由晶体管组成的CPU是作为处理数据和 执行程序 的核心,其英文全称是:Central Processing Unit,即中央处理器。首先,CPU的内部结构可以分为控制单元,逻辑运算单元和存储单元(包括内部总线及缓冲器)三大部分。CPU的工作原理就像一个工厂对产品的加工过程:进入工厂的原料(程序指令),经过物资分配部门(控制单元)的调度分配,被送往生产线(逻辑运算单元),生产出成品(处理后的数据)后,再存储在仓库(存储单元)中,最后等着拿到市场上去卖(交由应用程序使用)。在这个过程中,我们注意到从控制单元开始,CPU就开始了正式的工作,中间的过程是通过逻辑运算单元来进行运算处理,交到存储单元代表工作的结束。
数据与指令在CPU中的运行
刚才已经为大家介绍了CPU的部件及基本原理情况,现在,我们来看看数据是怎样在CPU中运行的。我们知道,数据从输入设备流经内存,等待CPU的处理,这些将要处理的信息是按字节存储的,也就是以8位二进制数或8比特为1个单元存储,这些信息可以是数据或指令。数据可以是二进制表示的字符、数字或颜色等等。而指令告诉CPU对数据执行哪些操作,比如完成加法、减法或移位运算。
我们假设在内存中的数据是最简单的原始数据。首先,指令指针(Instruction Pointer)会通知CPU,将要执行的指令放置在内存中的存储位置。因为内存中的每个存储单元都有编号(称为地址),可以根据这些地址把数据取出,通过地址总线送到控制单元中,指令译码器从指令寄存器IR中拿来指令,翻译成CPU可以执行的形式,然后决定完成该指令需要哪些必要的操作,它将告诉算术逻辑单元(ALU)什么时候计算,告诉指令读取器什么时候获取数值,告诉指令译码器什么时候翻译指令等等。
假如数据被送往算术逻辑单元,数据将会执行指令中规定的算术运算和其他各种运算。当数据处理完毕后,将回到寄存器中,通过不同的指令将数据继续运行或者通过DB总线送到数据缓存器中。
基本上,CPU就是这样去执行读出数据、处理数据和往内存写数据3项基本工作。但在通常情况下,一条指令可以包含按明确顺序执行的许多操作,CPU的工作就是执行这些指令,完成一条指令后,CPU的控制单元又将告诉指令读取器从内存中读取下一条指令来执行。这个过程不断快速地重复,快速地执行一条又一条指令,产生你在显示器上所看到的结果。我们很容易想到,在处理这么多指令和数据的同时,由于数据转移时差和CPU处理时差,肯定会出现混乱处理的情况。为了保证每个操作准时发生,CPU需要一个时钟,时钟控制着CPU所执行的每一个动作。时钟就像一个节拍器,它不停地发出脉冲,决定CPU的步调和处理时间,这就是我们所熟悉的CPU的标称速度,也称为主频。主频数值越高,表明CPU的工作速度越快。
如何提高CPU工作效率
既然CPU的主要工作是执行指令和处理数据,那么工作效率将成为CPU的最主要内容,因此,各CPU厂商也尽力使CPU处理数据的速度更快。
根据CPU的内部运算结构,一些制造厂商在CPU内增加了另一个算术逻辑单元(ALU),或者是另外再设置一个处理非常 大和 非常小的数据浮点运算单元(Floating Point Unit,FPU),这样就大大加快了数据运算的速度。
而在执行效率方面,一些厂商通过流水线方式或以几乎并行工作的方式执行指令的方法来提高指令的执行速度。刚才我们提到,指令的执行需要许多独立的操作,诸如取指令和译码等。最初CPU在执行下一条指令之前必须全部执行完上一条指令,而现在则由分布式的电路各自执行操作。也就是说,当这部分的电路完成了一件工作后,第二件工作立即占据了该电路,这样就大大增加了执行方面的效率。
另外,为了让指令与指令之间的连接更加准确,现在的CPU通常会采用多种预测方式来控制指令更高效率地执行。
D. CPU当前正在执行的指令与数据必须都存放在内存储器中吗
对!内存有堆内存,和栈内存。CPU可以直接访问内存数据,硬盘数据必须导到内存才能被使用!CPU-->内存-->硬盘
E. cpu执行指令需要从存储器读取数据时数据搜索的顺序是么
它是按堆栈的顺序顺序执行的,至于栈中的顺序是按优先级排 cache叫做高速缓冲存储器,是集成在CPU中的,存取速度最快,其次是内存,也就是主板上插的那个条条,速度最慢的是外存,也就是硬盘
F. CPU所执行的指令和处理的数据
错误的原因:CPU所执行的指令和处理的数据都是直接从磁盘或光盘中取出,处理结果也直接存入磁盘。
CPU和IO设备的速度不匹配。CPU不会直接从磁盘或CD-ROM执行指令,为了提高CPU效率,也不可能将数据直接保存到磁盘。
当计算机工作时,由中央处理器执行的程序和被处理的数据直接从主存储器而不是磁盘或CD-ROM中获得。
读取数据的顺序是:CPU——CPU缓存——内存——磁盘缓存——磁盘(CD-ROM)。
(6)cpu执行指令需要从存储器搜索吗扩展阅读:
CPU的结构大致可分为操作逻辑单元、寄存器单元和控制单元。所谓运算逻辑单元,主要是能进行相关的逻辑运算,如:能执行移位运算和逻辑运算,除了还能执行定点或浮点运算和地址运算和转换命令外,是一种多功能的运算单元。
寄存器是用来临时存储指令、数据和地址的。控制单元主要用于对指令进行分析并发出相应的控制信号。而计算机的存储器又可分为随机存取存储器(RAM)和只读存储器(ROM)。
G. 电脑CPU工作原理的知识简介
CPU从存储器或高速缓冲存储器中取出指令,放入指令寄存器,并对指令译码。它把指令分解成一系列的微操作,然后发出各种控制命令,执行微操作系列,从而完成一条指令的执行。指令是计算机规定执行操作的类型和操作数的基本命令。指令是由一个字节或者多个字节组成,其中包括操作码字段、一个或多个有关操作数地址的字段以及一些表征机器状态的状态字以及特征码。有的指令中也直接包含操作数本身。
提取
第一阶段,提取,从存储器或高速缓冲存储器中检索指令(为数值或一系列数值)。由程序计数器(Program Counter)指定存储器的位置,程序计数器保存供识别目前程序位置的数值。换言之,程序计数器记录了CPU在目前程序里的踪迹。提取指令之后,程序计数器根据指令长度增加存储器单元。指令的提取必须常常从相对较慢的存储器寻找,因此导致CPU等候指令的送入。这个问题主要被论及在现代处理器的快取和管线化架构。
解码
CPU根据存储器提取到的指令来决定其执行行为。在解码阶段,指令被拆解为有意义的`片断。根据CPU的指令集架构(ISA)定义将数值解译为指令。一部分的指令数值为运算码(Opcode),其指示要进行哪些运算。其它的数值通常供给指令必要的信息,诸如一个加法(Addition)运算的运算目标。这样的运算目标也许提供一个常数值(即立即值),或是一个空间的寻址值:暂存器或存储器位址,以寻址模式决定。在旧的设计中,CPU里的指令解码部分是无法改变的硬件设备。不过在众多抽象且复杂的CPU和指令集架构中,一个微程序时常用来帮助转换指令为各种形态的讯号。这些微程序在已成品的CPU中往往可以重写,方便变更解码指令。
在提取和解码阶段之后,接着进入执行阶段。该阶段中,连接到各种能够进行所需运算的CPU部件。例如,要求一个加法运算,算数逻辑单元(ALU,Arithmetic Logic Unit)将会连接到一组输入和一组输出。输入提供了要相加的数值,而输出将含有总和的结果。ALU内含电路系统,易于输出端完成简单的普通运算和逻辑运算(比如加法和位元运算)。如果加法运算产生一个对该CPU处理而言过大的结果,在标志暂存器里,运算溢出(Arithmetic Overflow)标志可能会被设置。
最终阶段,写回,以一定格式将执行阶段的结果简单的写回。运算结果经常被写进CPU内部的暂存器,以供随后指令快速存取。在其它案例中,运算结果可能写进速度较慢,但容量较大且较便宜的主记忆体中。某些类型的指令会操作程序计数器,而不直接产生结果。这些一般称作“跳转”(Jumps),并在程式中带来循环行为、条件性执行(透过条件跳转)和函式。许多指令也会改变标志暂存器的状态位元。这些标志可用来影响程式行为,缘由于它们时常显出各种运算结果。例如,以一个“比较”指令判断两个值的大小,根据比较结果在标志暂存器上设置一个数值。这个标志可借由随后的跳转指令来决定程式动向。在执行指令并写回结果之后,程序计数器的值会递增,反复整个过程,下一个指令周期正常的提取下一个顺序指令。如果完成的是跳转指令,程序计数器将会修改成跳转到的指令位址,且程序继续正常执行。许多复杂的CPU可以一次提取多个指令、解码,并且同时执行。这个部分一般涉及“经典RISC管线”,那些实际上是在众多使用简单CPU的电子装置中快速普及(常称为微控制(Microcontrollers))。
CPU包括运算逻辑部件、寄存器部件和控制部件等。
运算逻辑部件
运算逻辑部件,可以执行定点或浮点的算术运算操作、移位操作以及逻辑操作,也可执行地址的运算和转换。
寄存器部件
寄存器部件,包括通用寄存器、专用寄存器和控制寄存器。通用寄存器又可分定点数和浮点数两类,它们用来保存指令中的寄存器操作数和操作结果。通用寄存器是中央处理器的重要组成部分,大多数指令都要访问到通用寄存器。通用寄存器的宽度决定计算机内部的数据通路宽度,其端口数目往往可影响内部操作的并行性。专用寄存器是为了执行一些特殊操作所需用的寄存器。控制寄存器通常用来指示机器执行的状态,或者保持某些指针,有处理状态寄存器、地址转换目录的基地址寄存器、特权状态寄存器、条件码寄存器、处理异常事故寄存器以及检错寄存器等。有的时候,中央处理器中还有一些缓存,用来暂时存放一些数据指令,缓存越大,说明CPU的运算速度越快,目前市场上的中高端中央处理器都有2M左右的二级缓存,高端中央处理器有4M左右的二级缓存。
H. CPU基础知识大全详解
CPU基础 知识大全 详解有哪些? CPU在电脑中是最核心关键的硬件之一,相当于人的大脑,决定了电脑运算能力,因此CPU的选择至关重要。下面就让我带你去看看CPU基础知识大全详解,希望对你有所帮助吧!
程序员必须了解的CPU知识 - 科普篇
1导读
对于一名程序员来说,无论你使用的是什么语言,代码最终都会交给CPU来执行。所以了解CPU相关的知识一方面属于程序员的内功,另一方面也可以帮助你在日常编写代码时写出更加高效的代码
本文不打算对CPU进行深入探究,相反是以简单的语言来帮助大家了解CPU的工作原理以及不得不提到的CPU缓存相关知识,其中晦涩的内容我会通过配图来帮助大家理解,最后会以几个例子来帮助大家更直观的感受到CPU缓存带来的性能影响
2CPU基础知识
CPU即Central Processing Unit(中央处理器),是我们的代码打交道最多的硬件之一,要想让一个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字节术语就叫做Cache Line(缓存行),所以每一级CPU缓存就像下面这样
如果你手边有一台Linu__机器的话,可以通过下面的命令查看你的机器使用的CPU的Cache Line大小是多少
对于我的服务器来说,L1缓存就有 32KB / 64B = 512 个Cache Line
到这里,我们已经知道了CPU缓存的工作原理和加载方式,这里实际上还遗留了两个话题没有讲,一个是如何组织每一级的 Cache Line(例如 L1 的 512 个Cache Line)来提升访问的命中率;另一个更加复杂一点,在现代CPU都是多核的场景下如何保证数据的一致性,因为每个核都有自己的L1和L2缓存,那么如果核心1修改的时候只修改了缓存的数据而没有修改内存中的数据,其他核心读到的就是旧数据了,如何解决这一问题?
由于本篇 文章 只是期望对CPU知识进行一个科普,不希望对于小白来说一次性接触大量的新内容,所以这两个问题我准备在后面的另外两篇再进行更细致的讨论
4性能对比
下面以几个实际的例子来加深大家对Cache Line如何影响程序性能的理解
示例一
我们假设有一个5000万长度的int数组,接着把这个数组的其中一些元素乘以2,考虑下面这两份代码
直觉上代码一比代码二少循环了4倍,并且也少乘2了4倍,理论上代码一比代码二快4倍左右才合理
但在我的服务器上运行的结果是代码一平均花费90毫秒,代码二平均花费93毫秒,性能几乎是差不多的,读者可以自行思考一下原因,再点击下方空白处查看解析
点击下方空白区域查看解析
▼
解析
这里最主要的原因还是Cache Line,虽然代码一需要执行的指令确实比代码二要少4倍,但由于CPU一次会把连续的64个字节都读入缓存,而读写缓存的速度又特别快(还记得吗?L1的读取速度只有约4个时钟周期,是内存的50倍),以至于我们很难察觉到这4倍指令的差距
示例二
假设我们需要遍历一个二维数组,考虑下面这两种遍历 方法 :
由于数组长度是一模一样的,直觉上我们期望的是两份代码运行时间相差无几。但在我的服务器上代码一运行需要23毫秒,代码二运行需要51毫秒,读者可以自行思考一下原因,再点击下方空白处查看解析
点击下方空白区域查看解析
▼
解析
这里最主要的原因依然是Cache Line,由于C语言中二维数组的内存是连续的,所以我们按行访问的时候访问的一直都是连续的内存,而Cache Line也是连续的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代i3 i5 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的基础知识大全有哪些
★ CPU基础知识拓展大全
★ 电脑主板应用知识大全
I. cup所有的计算、存储、处理数据操作都由什么执行
CPU从存储器或高速缓冲存储器中取出指令,放入指令寄存器,并对指令译码。这是一个非常复杂的过程。它把指令分解成一系列的微操作,然后发出各种控制命令,执行微操作系列,从而完成一条指令的执行。指令是计算机规定执行操作的类型和操作数的基本命令。指令是由一个字节或者多个字节组成,其中包括操作码字段、一个或多个有关操作数地址的字段以及一些表征机器状态的状态字以及特征码。有的指令中也直接包含操作数本身。
提取
第一阶段,提取,从存储器或高速缓冲存储器中检索指令(为数值或一系列数值)。由程序计数器(program counter)指定存储器的位置。(程序计数器保存供识别程序位置的数值。换言之,程序计数器记录了cpu在程序里的踪迹。)
解码
cpu根据存储器提取到的指令来决定其执行行为。在解码阶段,指令被拆解为有意义的片段。根据cpu的指令集架构(isa)定义将数值解译为指令。一部分的指令数值为运算码(opcode),其指示要进行哪些运算。其它的数值通常供给指令必要的信息,诸如一个加法(addition)运算的运算目标。
执行
在提取和解码阶段之后,紧接着进入执行阶段。该阶段中,连接到各种能够进行所需运算的cpu部件。
例如,要求一个加法运算,算术逻辑单元(alu,arithmetic logic
unit)将会连接到一组输入和一组输出。输入提供了要相加的数值,而输出将含有总和的结果。alu内含电路系统,易于输出端完成简单的普通运算和逻辑运算(比如加法和位元运算)。如果加法运算产生一个对该cpu处理而言过大的结果,在标志暂存器里可能会设置运算溢出(arithmetic
overflow)标志。
写回
最终阶段,写回,以一定格式将执行阶段的结果简单的写回。运算结果经常被写进cpu内部的暂存器,以供随后指令快速存取。在其它案例中,运算结果可能写进速度较慢,但容量较大且较便宜的主记忆体中。某些类型的指令会操作程序计数器,而不直接产生结果。这些一般称作“跳转”(jumps),并在程式中带来循环行为、条件性执行(透过条件跳转)和函式。许多指令会改变标志暂存器的状态位元。这些标志可用来影响程式行为,缘由于它们时常显出各种运算结果。例如,以一个“比较”指令判断两个值大小,根据比较结果在标志暂存器上设置一个数值。这个标志可借由随后跳转指令来决定程式动向。在执行指令并写回结果之后,程序计数器值会递增,反复整个过程,下一个指令周期正常的提取下一个顺序指令。