100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > OS - 计算机组成原理及CPU主频揭秘

OS - 计算机组成原理及CPU主频揭秘

时间:2020-11-14 01:03:23

相关推荐

OS - 计算机组成原理及CPU主频揭秘

文章目录

生猛干货大纲视图计算机的基本组成计算机的指令和计算计算机性能指标计算机的计时单位 :CPU时钟小结搞定计算机基础内功

生猛干货

计算机专业学生、非科班程序员必备! 90%程序员忽略的大厂招聘考点、技能进阶秘诀尽在这里!

大纲视图

我们把整个计算机组成原理的知识点拆分成了四大部分,分别是计算机的基本组成、计算机的指令和计算、处理器设计,以及存储器和I/O设备

计算机的基本组成

运算器、控制器、存储器、输入设备和输出设备这五大基本组件 . 除此之外,我们还需要了解计算机的两个核心指标:性能和功耗

计算机的指令和计算

一条条指令执行的控制过程,就是由计算机五大组件之一的控制器来控制的。

实现这些运算功能的ALU(Arithmetic LogicUnit/ALU),也就是算术逻辑单元,其实就是计算机五大组件之一的运算器

计算机性能指标

计算机的性能,类比我们自己搬东西 ,有两个指标可以衡量

响应时间(Response time)或叫执行时间(Execution time): 可以理解为让计算机“跑得更快” 。 我们执行一个程序, 花的时间越少,自然性能就越好吞吐率(Throughput)或者带宽(Bandwidth):可以理解为让计算机“搬得更多”

和搬东西来做对比,如果我们的响应时间短,跑得快,我们可以来回多跑几趟多搬几趟。所以说,缩短程序的响应时间,一般来说都会提升吞吐率。

除了缩短响应时间, 还可以多找几个人一起来搬,这就类似服务器都是8核、16核的。人多力量大,同时处理数据,在单位时间内就可以处理更多数据,吞吐率自然也就上去了。

计算机的计时单位 :CPU时钟

时间是一个很自然的用来衡量性能的指标,但是用时间来衡量时,有两个问题

时 间 不 “ 准 ”

随便写的一个程序,来统计程序运行的时间,每一次统计结果不会完全一样。有可能这一次花了45ms,下一次变成了53ms。

为什么会不准呢?首先,我们统计时间是程序运行结束的时间减去程序开始运行的时间。这个时间也叫Wall Clock Time或者Elapsed Time,就是在运行程序期间,挂在墙上的钟走掉的时间。

但是,计算机可能同时运行着好多个程序,CPU实际上不停地在各个程序之间进行切换。在这些走掉的时间里面,很可能CPU切换去运行别的程序了。而且,有些程序在运行的时候,可能要从网络、硬盘去读取数据,要等网络和硬盘把数据读出来,给到内存和CPU。

所以说,要 想 准 确 统 计 某 个 程 序 运 行 时 间 , 进 而 去较 两 个 程 序 的 实 际 性 能 , 我 们 得 把 这 些 时 间 给 刨 除

Linux下有一个叫time的命令,可以帮我们统计出来,同样的Wall Clock Time下,程序实际在CPU上到底花了多少时间

$ time seq 1000000 | wc -l1000000real 0m0.101suser 0m0.031ssys 0m0.016s

real time,也就是我们说的Wall Clock Time,也就是运行程序整个过程中流逝掉的时间user time,也就是CPU在运行你的程序,在用户态运行指令的时间sys time,是CPU在运行你的程序,在操作系统内核里运行指令的时间。

程序实际花费的CPU执行时间(CPU Time),就是user time加上sys time

实际上程序用了0.101s,但是CPU time只有0.031+0.016 = 0.047s。运行程序的时间里,只有不到一半是实际花在这个程序上的

即使我们已经拿到了CPU时间,我们也不一定可以直接“比较”出两个程序的性能差异

即使在同一台计算机上,CPU可能满载运行也可能降频运行,降频运行的时候自然花的时间会多一些。除了CPU之外,时间这个性能指标还会受到主板、内存这些其他相关硬件的影响。

那如何量化呢?

程序的CPU执行时间=CPU时钟周期数×时钟周期时间

时钟周期时间是什么?

Intel Core-i7-7700HQ 2.8GHz,这里的2.8GHz就是电脑的主频(Frequency/Clock Rate)。这个2.8GHz,可以先粗浅地认为,CPU在1秒时间内,可以执行的简单指令的数量是2.8G条。

更准确一点描述,这个2.8GHz就代表,我们CPU的一个“钟表”能够识别出来的最小的时间间隔。就像我们挂在墙上的挂钟,都是“滴答滴答”一秒一秒地走,所以通过墙上的挂钟能够识别出来的最小时间单位就是秒。

在CPU内部,和我们平时戴的电子石英表类似,有一个叫晶体振荡器(Oscillator Crystal)的东西,简称为晶振。我们把晶振当成CPU内部的电子表来使用。晶振带来的每一次“滴答”,就是时钟周期时间。

在这个2.8GHz的CPU上,这个时钟周期时间,就是1/2.8G。CPU,是按照这个“时钟”提示的时间来进行自己的操作。主频越高,意味着这个表走得越快,CPU也就“被逼”着走得越快。

在回到上面程序CPU执行时间的公式

程序的CPU执行时间=CPU时钟周期数×时钟周期时间

最简单的提升性能方案,自然缩短时钟周期时间,也就是提升主频。换句话说,就是换一块好一点的CPU。

这个是硬件的,控制不了, 那我们看另一个因子——CPU时钟周期数上。如果能够减少程序需要的CPU时钟周期数量,一样能够提升程序性能。

对于CPU时钟周期数,可以再做一个分解,把它变成“指令数× 每 条 指 令 的 平 均 时 钟 周 期 数(Cycles PerInstruction,简称CPI)”。

不同的指令需要的Cycles是不同的,加法和乘法都对应着一条CPU指令,但是乘法需要的Cycles就比加法要多,自然也就慢。

在这样拆分了之后,程序的CPU执行时间就可以变成这样三个部分的乘积。

程序的CPU执行时间=指令数×CPI×Clock Cycle Time

因此,如果想要解决性能问题,其实就是要优化这三者。

时钟周期时间,就是计算机主频,这个取决于计算机硬件。我们所熟知的摩尔定律就一直在不停地提高我们计算机的主频。

每条指令的平均时钟周期数CPI,就是一条指令到底需要多少CPU Cycle。 现代的CPU通过流水线技术(Pipeline),让一条指令需要的CPU Cycle尽可能地少。因此,对于CPI的优化,也是计算机组成和体系结构中的重要一环。

指令数,代表执行我们的程序到底需要多少条指令、用哪些指令。这个很多时候就把挑战交给了编译器。同样的代码,编译成计算机指令时候,就有各种不同的表示方式。

类比一下 ,把自己想象成一个CPU,坐在那里写程序。

计算机主频就好像是打字速度,打字越快,你自然可以多写一点程序。

CPI相当于你在写程序的时候,熟悉各种快捷键,越是打同样的内容,需要敲击键盘的次数就越少。

指令数相当于你的程序设计得够合理,同样的程序要写的代码行数就少。

如果三者皆能实现,自然可以很快地写出一个优秀的程序,“性能”从外面来看就是好的。

小结

“响应时间”这个性能指标主要体现在 提升计算机主频,优化CPU设计使得在单个时钟周期内能够执行更多指令,以及通过编译器来减少需要的指令数。

搞定计算机基础内功

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。