希望大家关注菜鸟,不然后期的文章,各位可能无法及时看到

文章目录

  • 深入浅出计算机组成原理
    • 1、计算机性能的两个指标
    • 2、计算机的计时单位: CPU时钟
    • 大家了解了上面的知识点,那接下来就是两者结合的高光时刻了

深入浅出计算机组成原理

入门四知识点:

1、计算机性能的两个指标

响应时间(Response time)或者叫执行时间(Execution time),表示执行一个程序一共所花的时间
吞吐率(Throughput)或者叫带宽(Bandwidth),表示一定时间内,计算机可以执行的的指令的多少。

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

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

① 第一个就是时间不“准”。
为什么不准呢?

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

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

而Linux里面有一个叫 time 的命令,可以帮我们统计出来,同样的 Wall Clock Time (统计时间是用类似于“掐秒表”一样,记录程序运行结束的时间减去程序开始运行的时间。这个时间也叫 Wall Clock Time 或者Elapsed Time,就是在运行程序期间花费的时间)下,程序实际在 CPU 上到底花了多少时间。运行下面代码:

time seq 1000000 | wc -l  //代码表示,输出从 1 到1000000的列表,然后通过通道传入到wc中,并只打印出列数

这里不清楚通道的可以看我的博客 趣谈Linux操作系统 熟悉常用命令(自我提升第5天) 不清楚seq的看 这篇博客 不清楚wc的看菜鸟教程wc
可以得到该结果(当然这是测试CPU运行时间的,所以每个电脑不一样,同一个电脑也可能不一样)

1000000real    0m0.013s
user    0m0.017s
sys     0m0.008s

time 命令。它会返回三个值

第一个是real time,也就是我们说的Wall Clock Time,也就是运行程序整个过程中流逝掉的时间;

第二个是user time,也就是 CPU 在运行你的程序,在用户态运行指令的时间(这是执行此进程所消耗的实际CPU时间,其他进程和此进程阻塞的时间并不包括在内);

第三个是sys time,是 CPU 在运行你的程序,在操作系统内核里运行指令的时间(即在内核执行系统调用所使用的CPU时间)。

而程序实际花费的 CPU 执行时间(CPU Time),就是 user time 加上 sys time。(程序实际占用的 CPU 时间一般比 Elapsed Time 要少不少)

但是我这里却出现了real<user+sys,这是为什么?

在多处理器的系统上,一个进程如果有多个线程或者有多个子进程可能导致real time比CPU time(user + sys time)要小,这是因为不同的线程或进程可以并行执行。换句话说,这里的并行是指真正的并行,不是在单CPU上的多线程并发,如果系统只有一个CPU(单核),那么即使多线程,也不会使得real < user + sys。

举个例子,一个纯计算任务,没有系统调用(即没有耗费sys time,只有user time),采用单线程需要执行的时间为8s。那么在一个四核的机器上,采用并行算法,用4个核一起算,理想上如果完全并行,加速比为4,2s内就能完成,那么从开始到结束,real time是2s。user time呢?应该是2s * 4 = 8s. 所以此时会出现real < sys + user的情况。

同样,对于多CPU的机器上的多线程程序,也会有这样的结果。
参考该篇博客
这里不明白可以不用深究!!!!

②其次,即使我们已经拿到了 CPU 时间,我们也不一定可以直接“比较”出两个程序的性能差异。
这里又为什么呢?

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

所以,我们需要对“时间”这个我们可以感知的指标进行拆解,把程序的 CPU 执行时间变成 CPU时钟周期数(CPU Cycles)和 时钟周期时间(Clock Cycle)的乘积

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

我们先来理解一下什么是时钟周期时间
这个时钟周期,在你买电脑的一刻就已经确定了,即是你电脑CPU 的一个“钟表”能够识别出来的最小的时间间隔(当然,这个你可以自己去调整)。在 CPU 内部,和我们平时戴的电子石英表类似,有一个叫晶体振荡器(Oscillator Crystal)的东西,简称为晶振。我们把晶振当成 CPU 内部的电子表来使用。晶振带来的每一次“滴答”,就是时钟周期时间。而CPU主频越高,意味着这个表(晶振)走得越快,我们的CPU 也就“被逼”着走得越快。

接下来回到公式,那么我们想减少程序的CPU执行时间,那我们应该减少时钟周期时间,即提高主频,但是这似乎并不是主要的,毕竟这个晶振是固定的,如果不人为改变那么是不会变短的,要么就买个更好的,但这不现实,所以我们的目标应该放在:CPU 时钟周期数

对于 CPU 时钟周期数,我们可以再做一个分解,把它变成 “ 指令数×每条指令的平均时钟周期数(Cycles Per Instruction,简称 CPI)” 。不同的指令需要的 Cycles 是不同的,加法和乘法都对应着一条 CPU 指令,但是乘法需要的 Cycles 就比加法要多,自然也就慢。所以:

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

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

  1. 时钟周期时间,就是计算机主频,这个取决于计算机硬件。我们所熟知的摩尔定律就一直在不停地提高我们计算机的主频。比如说,我最早使用的 80386 主频只有 33MHz,现在手头的笔记本电脑就有 2.8GHz,在主频层面,就提升了将近 100 倍[ 但现在这个方法就不太好实现,因为继续提高主频,功耗和散热都会是问题,而且其它部件跟不上节奏也是白忙活的,这也是为什么现很多厂家主频不进反退 ]。

  2. 每条指令的平均时钟周期数 CPI,就是一条指令到底需要多少 CPU Cycle [ 计算机执行一条指令所需的时钟周期数 ]。在后面讲解CPU 结构的时候,我们会看到,现代的 CPU 通过流水线技术(Pipeline),让一条指令需要的 CPU Cycle 尽可能地少。因此,对于 CPI 的优化,也是计算机组成和体系结构中的重要一环。

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

(这里大家先了解如何减少CPU执行时间就行)

大家了解了上面的知识点,那接下来就是两者结合的高光时刻了

1、和搬东西做对比,如果我们的响应时间快(速度快),那自然也可以在相同时间内搬更多的东西,吞吐率自然也就高了。

2、除了提高响应时间,我们还可以多来一些人,例如:现在的多核计算机,就是增加了更多的处理器(增加工人),那速度自然就上去了(这里细心的读者就会发现上面我说了的,即:real<user+sys)。

3、提升吞吐率的办法有很多。大部分时候,我们只要多加一些机器,多堆一些硬件就好了。(但是这个也是定性的,所以考虑范围不大,同:晶振)

4、性能的定义定义成响应时间的倒数,也就是:性能 = 1/ 响应时间(上面了解了时钟周期,这里的响应时间[程序运行结束的时间减去程序开始运行的时间],想必大家也就了解了吧)

深入浅出计算机组成原理 通过CPU主频看性能(自我提升第8天)相关推荐

  1. 【练拳不练功,到老一场空】深入浅出计算机组成原理

    深入浅出计算机组成原理 文章目录 深入浅出计算机组成原理 计算机的基本组成 硬件设备组成 CPU 内存 主板 I/O 设备 硬盘 显卡 冯.诺依曼体系结构 运算器/处理器单元 控制器 存储器 输入设备 ...

  2. 极客时间 自我提升第二天 数据结构与算法之美 应该掌握 / 趣谈网络原理 / 深入浅出计算机组成原理 思维导图

    菜鸟今天又来完成所说的诺言,也希望大家督促,在今天的学习中,菜鸟有了新的认知,我会将上一篇中理解不完善的一些地方进行补充,学习本就是不断打破自己的认知,如果思考都不做,何来的知识的积累 文章目录 数据 ...

  3. 【计组】入门篇 --《深入浅出计算机组成原理》(一)

    课程链接:深入浅出计算机组成原理_组成原理_计算机基础-极客时间 目录 一.为什么需要学习计算机组成原理 二.冯·诺依曼体系结构:计算机组成的金字塔 1.计算机的基本硬件组成 2.冯·诺依曼体系结构 ...

  4. 【计组】设计大型DMP系统--《深入浅出计算机组成原理》(十四)

    目录 一.DMP:数据管理平台 二.MongoDB 真的万能吗 三.关系型数据库:不得不做的随机读写 (一)Cassandra:顺序写和随机读 1.Cassandra 的数据模型 2.Cassandr ...

  5. 深入浅出计算机组成原理 指令跳转(自我提升第十八天)

    上节学这个徐文浩的深入浅出计算机组成原理,就吃了大亏,渐渐的就发现了,其实他讲的并不单纯是计算机组成原理,而是讲的汇编语言和单片机,(lll¬ω¬)汗! 菜鸟倒是还好,因为学过单片机的,汇编语言多少了 ...

  6. 【计算机组成原理】CPU:单周期数据通路(MIPS)

    寄存器传送语言RTL 1)R(r)表示寄存器r的内容 2)M(address)表示主存储器地址address的内容 3)传输方向"←"表示,从右向左传输 4)程序计数器PC的内容直 ...

  7. 计算机组成原理 启航教育,2021计算机考研:计算机组成原理知识点CPU的功能和基本结构...

    启航教育小编为大家整理了关于"2021考研:计算机组成原理知识点CPU的功能和基本结构"的相关内容,希望可以帮助到大家,祝大家考上自己理想的院校 CPU的功能和基本结构 CPU主要 ...

  8. 【计算机组成原理】CPU如何区分指令和数据

    [计算机组成原理]CPU如何区分指令和数据 指令周期 题目 指令和数据放在内存中,对于CPU而言,我们要怎么区分里面是数据还是指令呢? 冯 · 诺依曼计算机中指令和数据均以二进制形式存放在存储器中,C ...

  9. 计算机组成原理网易云,计算机组成原理之CPU

    课程概况 哈尔滨工业大学"计算机组成原理"课程是国家级精品课程,以国家级教学名师唐朔飞教授编写的"十二五"规划教材为基础,将教学课件.学习指导与习题解答.试题库 ...

最新文章

  1. Compass(更新中。。。)
  2. matlab如何使音频文件声音变大_如何制作视频课程
  3. 附一张css hack
  4. 小程序 mpvue 生命周期一览
  5. python取模1e9+7_G题取1E9+7wa,取1E9+9等一些其他的值ac
  6. Modown V1.9 WordPress资源素材付费下载Erphpdown主题模板原版
  7. GRE蓝宝的核心词汇
  8. 安全红蓝对抗反制(反捕、画像)
  9. 使用豆瓣源安装Django
  10. Oracle between and
  11. 计算机弹出虚拟U盘,我们通过工具所自带的电脑模拟器对我们u盘制作启动盘进行模拟启动测试...
  12. Knowledge-aware Graph Neural Networks with Label Smoothness Regularization for Recommender Systems
  13. Tridium公司的Niagara N4 使用
  14. 移动端网页开发-vh/vw/rem
  15. 教你如何还原本地IP
  16. 微信小程序开发竟然这么简单?!
  17. RFI\RFP\RFQ的区别
  18. Scala基础教程--10--数组列表与函数式编程
  19. 怎么通过在线PS修图 修图工具有什么
  20. 【图像重建】基于正交匹配追踪(OMP)算法结合小波变换是图像重建含Matlab源码

热门文章

  1. 干货 | 50题带你入门Python数据分析(下)
  2. wps怎么添加附录_如何在word尾注后添加附录、成果等其他内容
  3. 【渝粤题库】陕西师范大学164201 运筹学 作业(专升本)
  4. 计算机系统管理员工作总结.doc
  5. c语言编程刷屏怎么办,为什么输入的不是数字就不停刷屏?各位老哥请帮忙
  6. Python3-基本数据类型之列表
  7. Ulead GIF Animator制作滚动的文字条幅,循环滚动
  8. 解决:Ulead VideoStudio 启动黑屏的问题
  9. 计算混响时间的意义_如何计算混响时间?
  10. arm上使用tcpdump抓包