计算机基础cpu知识,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基础知识大全详解相关文章:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/567793.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++ 不插入重复元素但也不排序_面试官爱问的 10 大经典排序算法,20+ 张图来搞定...

(给算法爱好者加星标&#xff0c;修炼编程内功)作者&#xff1a;技术让梦想更伟大 / 李肖遥 (本文来自作者投稿)冒泡排序简介冒泡排序是因为越小的元素会经由交换以升序或降序的方式慢慢浮到数列的顶端&#xff0c;就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样&#xf…

基础功能2-python修改文件中所有文件名

将policeImage中的所有图片命名为000001.jpg,000002.jpg等形式 import os path F:/vocDataset/policeImage files os.listdir(path) preindex for i, file in enumerate(files):if i>0 and i<9:preindex00000elif i>9 and i<99:preindex0000elif i>99 and i&…

计算机硬件操作系统应用软件之间的关系,操作系统是其他应用软件运行的基础,什么是操作系统...

简单理解操作系统就是一个人与计算机硬件之间的中介。打个比喻&#xff0c;没有操作系统的机器就像是没有用的砖头一样&#xff0c;而有操作系统的机器就是可以玩的砖头。 (推荐学习&#xff1a;phpstorm)操作系统&#xff0c;英文名称Operating System&#xff0c;简称OS&…

matplotlib 横坐标少了一个点_收藏起来!比 matplotlib 效率高十倍的数据可视化神器!...

点击上方“涛哥聊Python”&#xff0c;选择“星标”公众号作者&#xff1a;Will Koehrsen图文投稿&#xff1a;Allen编辑&#xff1a;Kooyee原文链接&#xff1a;https://towardsdatascience.com/the-next-level-of-data-visualization-in-python-dd6e99039d5e其他&#xff1a;…

ssd训练自己数据集

1、用labelImg标数据 2、将数据转换为tfrecord 错误记录&#xff1a; NotFoundError&#xff1a;无法创建NewWriteableFile 解决方法&#xff1a;您需要在运行此脚本的运行环境文件夹中自己创建一个目录 1、前期准备工作 第一步&#xff1a;先将SSD框架下载到本地&#…

计算机网络技术三级做题技巧,三级网络技术——我的经历,我的技巧

作者&#xff1a;liyunfei大家好&#xff0c;我是华北工学院的&#xff0c;专业是经济学。马上就要上大四了&#xff0c;现在已经拿到三级证书。作为过来人&#xff0c;对于网络考试&#xff0c;我有一些自己的感受&#xff0c;想和大家做个交流&#xff0c;供正在努力中的朋友…

elasticsearch date_MySQL数据实时增量同步到Elasticsearch

Mysql到Elasticsearch的数据同步&#xff0c;一般用ETL来实现&#xff0c;但性能并不理想&#xff0c;目前大部分的ETL是定时查询Mysql数据库有没有新增数据或者修改数据&#xff0c;如果数据量小影响不大&#xff0c;但如果几百万上千万的数据量性能就明显的下降很多&#xff…

联想计算机不能进入系统桌面,联想笔记本进不去桌面的解决方法

联想笔记本进不去桌面的解决方法笔记本电脑开机后&#xff0c;电源指示灯亮&#xff0c;显示器屏如果有显示&#xff0c;但进不了系统&#xff0c;这种情况多数是系统故障导致的&#xff0c;可以尝试开机按F8键&#xff0c;进入安全模式&#xff0c;然后进入最后一次安全配置进…

springboot jpa sql打印_SpringBoot集成Spring Data JPA以及读写分离

相关代码:github OSCchinaJPA是什么JPA(Java Persistence API)是Sun官方提出的Java持久化规范,它为Java开发人员提供了一种对象/关联映射工具 来管理Java应用中的关系数据.它包括以下几方面的内容:1.ORM映射 支持xml和注解方式建立实体与表之间的映射.2.Java持久化API 定义了一…

win10 make命令的安装

1、下载MinGWMinGW官网下载&#xff1a;http://www.mingw.org &#xff0c;点击右上角Downloads 或者网盘下载&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1vQVKycK1TKVsnLV_OMgiCg 提取码&#xff1a;bbhl 点击下载 mingw-get-setup.exe 安装 mingw-get-setup.exe…

html中svg的css,HTML5 内联 SVG

什么是SVG&#xff1f;SVG 指可伸缩矢量图形 (Scalable Vector Graphics)SVG 用于定义用于网络的基于矢量的图形SVG 使用 XML 格式定义图形SVG 图像在放大或改变尺寸的情况下其图形质量不会有损失SVG 是万维网联盟的标准SVG 的优势与其他图像格式相比(比如 JPEG 和 GIF)&#x…

fast-rcnn win10 tensorflow部署

1、下载代码https://github.com/chde222/Faster-RCNN-TensorFlow-Python3 2、安装所依赖包 pip install -r requirements.txt 或者单独利用pip install cython pip install easydict 3、在 ./data/coco/pythonAPI 下打开cmd运行&#xff1a; python setup.py build_ext --in…

如何找到python的安装路径_如何查看python的安装路径

展开全部 官方文档上有写的&#xff0c;sys.executable是当前Python解释器&#xff08;或者其他Python实现&#xff09;的路径。 1、安装mysql 首先到mysql官网e68a843231313335323631343130323136353331333365643662下载文件&#xff1a;mysql-installer-community.msi 安装过…

两个html之间传递对象,解决微信警告:该链接含有无法解析的地址链接-两个html之间的传值(JSON数据)...

最近微信公众号开发进入二期了&#xff0c;增添关于汽车租赁的商城模块。遇到界面传值数据问题。1.首先我用的方式是&#xff1a;location.href"sales-detail.html?id"escape(JSON.stringify(htmlObj));另外&#xff0c;在第二界面用&#xff1a;var obj JSON.parse…

vue 获取url地址的参数_Vue之vuerouter的使用

1. 什么是vue-router?所谓的vue-router, 通俗的来讲 就是路由 但是这个和后端路由是不同的, 这是前端路由,是url和单页面组件的对应关系, 也就是SPA(单页应用)的路径管理器。再通俗的说&#xff0c;vue-router就是WebApp的链接路径管理系统。vue-router是Vue.js官方的路由插件…

win10下openpose1.5安装

历经一个星期的安装挫折&#xff0c;终于安装成功了。赶紧记录一下。 1、准备所需资料 &#xff08;1&#xff09;下载cuda和cudnn。版本最好都是cuda10和cudnn10.我下载的是下图所示版本。 如果不是这个版本可能会出错&#xff0c;而且出错几率很高。本人就因为安装的cuda10…

div展示html文本,html – 使文本适合div

我一直在努力重新创建我在90年代创建的父亲网站(呃),我一直无法让文本适合div内部并水平对齐.我需要将文本放在一起,以便它们适合div.这是jsfiddle中页面的代码示例HTMLHomeInside StaffOur Mission示例CSSdiv img#header{width: 50%;height: 15%;margin-left: 125px;margin-ri…

ImportError: cannot import name 'pyopenpose' from 'openpose'错误解决方法

前提条件&#xff1a;openpose1.5配置过程前面都成功&#xff0c;c api成功运行&#xff0c;但是python api配置中&#xff0c;cmake也添加了build_python_path.运行中仍出现 ImportError: cannot import name pyopenpose from openpose 这个错误。 解决方法&#xff1a; 将你…

python语句join_详解Python中的join()函数的用法

原博文 2017-08-07 20:51 − 函数&#xff1a;string.join() Python中有join()和os.path.join()两个函数&#xff0c;具体作用如下&#xff1a; join()&#xff1a; 连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串 &n...0584 相…

计算机网络期末考长沙学院,校内用-第二套计算机网络试卷A..doc

《计算机网络》课程考试 A卷题号一二三四五六总分合分人复核人满分得分一、单选题(在本题的每一小题的备选答案中&#xff0c;只有一个答案是正确的&#xff0c;请把你认为正确答案的题号&#xff0c;填入题干的括号内。多选不给分。每小题1分&#xff0c;共20分)得分评卷人复核…