深入浅出计算机组成原理:通过你的CPU主频,我们来谈谈“性能”究竟是什么?(第3讲)

一、性能到底指的是什么?

买新电脑的时候,我们会说:"原来的电脑性能跟不上了"
写程序的时候,我们会说:"这个程序西能需要优化一下"

1、"性能"到底指的是什么?

在计算机组成原理乃至体系结构中"性能"都是最重要的一个主题。我在前面说过学习和研究计算机组成原理,就是在理解计算机是怎么运作的,

以及为什么要这么运作。"为什么"?所要解决的事情,很多时候就是提升"性能"

2、性能有几个指标?分别是什么

计算机的性能,其实和我们干体力劳动很像,好比是我们要搬东西,对于计算机的性能,我们需要有个标准来衡量这个标准中主要有两个指标

响应时间

响应时间:第一个是响应时间或者叫执行事假,要想提升响应时间这个性能指标,你可以理解为计算机"跑的更快"

响应时间指的就是,我们执行一个程序,到底需要花多少时间,花的时间越少,自然性能就越好

吞吐率

吞吐率:第二个是吞吐率或者带宽,想要提升这个指标,你可以理解为让计算机"搬得更多"

服务器使用的网络带宽,通常就是一个吞吐率性能指标,

吞吐率是指我们在一定的时间范围内,到底能处理多少事情,这里的"时间",在计算机里就是处理数据或者执行的程序指令

3、如何提高性能?

1、缩短程序的相应时间能提高吞吐率吗?

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

2、除了缩短响应时间,我们还有别的方法吗?

当然有,比如说,我们还可以多找几人一起来搬,这就是类似现代的服务器都是8核、16核的人多力量大,同时处理数据,在单位时间内就可以处理更多的数据,吞吐率自然就上去了

二、CPU跑分软件

各大CPU和服务器厂商组织了一个叫SPEC的第三方机构,专门用来指定各种"跑分"的规则

提供的CPU基准测试程序,就好像CPU届的"高考",通过数十个不同的计算机程序,对于的性能给出一个最终评分,

三、计算机的计时单位:时钟

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

第一就是时间“不准”

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

1、但是计算机可能同时运行着好多程序,CPU实际上不停地在各个程序之间进行切换。在这些走掉的时间里,很可能CPU切换去运行别的程序了,

2、而且,游戏程序在运行的时候,可能要从网络、硬盘去读取数据,要等网络和应哦按把数据读出来,给到内存和CPU
所以说:要想准确统计某个程序运行时间,进而去比较两个程序的实际性能,我们得把这些时间给刨删掉

[[email protected] ~]# time seq 1000000 | wc -l
1000000

real	0m0.101s   #Wall Clock Time 也就是运行程序整个过程中流失的时间
user	0m0.031s   #CPU在运行你的程序,在用户态运行指令的时间,
sys	0m0.016s   #CPU在运行你的程序,在操作系统内核里运行指令的时间

而程序实际花费的CPU执行时间,就是User Time加上sys Time

在我给的这个例子里,你可以看到,实际上程序用了0.101s,但是CPU Time只有0.031+0.016=0.047s。运行程序的时间里,
只有不到一半是是花在这个程序上的

其次、及时我们已经拿到了CPU时间,我们也不一定可以直接"比较"出两个程序的性能差异

即使在统一台计算机上,CPU可能满载运行也可能降频运行,降频运行的时间自然花的时间会多一些

除了CPU之外,时间这个西能指标还会受到主板、内存这些其他相关硬件的影响,所以我们需要对"时间"这个我们可以感知的指标进行拆解
把程序的CPU执行时间编程CPU时钟周期数C和时钟周期时间的乘积

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

四、什么是时钟周期时间?

比如我手头这台电脑就是Intel Core-i7-7700HQ 2.8GHz,这里2.8GHz就是电脑的主频,可以先粗浅地认为cpu1秒时间内,可以执行的简单质量的数量是2.8G条

准确一点描述2.8GHz就代表CPU的一个“钟表”能识别出来的最小的时间间隔,就像我们挂在墙上的挂钟的最小能够识别单位就是秒

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

1、超频

就相当于把买回来的CPU内部的钟给调快了,于是CPU的计算跟着这个时钟的节奏,也就自然快了,

当然这个快不是没有代价的,CPU跑得越快,散热的压力也就越大,就和人一样,超过生理极限,CPU就会崩溃了

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

如果能够减少程序需要的CPU时钟周期数,一样能够提升程序性能

每条指令的平均时钟周期数,不同指令需要的Cycles 是不同的,加法和乘法都对应着一条 CPU 指令但是乘法需要的 Cycles 就比加法要多,自然也就慢。

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

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

1、时钟周期时间

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

比如说,我最早使用的80386主频只有33MHZ,现在手头的笔记本就有2.8GHz,在主频层面,就提升了将近100倍

2、每条指令的平均时钟周期数CPI

每条指令的平均时钟周期数CPI,就是一条指令到底需要多少CPU Cycle,在后面讲解CPU结构的时候,我们会看到,现代CPU

通过流水线技术,让一条指令需要的CPU Cycle尽可能地少,因此对于CPI的优化,也是计算机组成和体系结构中重要的一环

3、指令数

指令数,代表执行我们的程序到底需要多少条指令,用那些指令。这个很多时候就把挑战交给了编译器,同样的代码,编译

成计算机指令时候,就有格子能够不同的表示方式

我们可以把自己想像成一个CPU,坐在那里写程序。计算机主频就好像是你打字的速度,打字越快,你自然可以多写一点程序;

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

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

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

五、课后题以及问题

1、课后题

每次有新手机发布的时候,总会有一些对于手机的跑分结果的议论。乃至于有“作弊”跑分或者“针对跑分优化”的说法。我们能针对“
“跑分”作弊么?怎么做到呢?“作弊”出来的分数对于手机性能还有参考意义?

2、经典答案

可以通过超频作弊,也就是老师说的调高时钟,这种做法事不顾功耗专门针对跑分来全力冲刺,不能作为日常使用的标准,不过依然能反应出机器性能的极限,如果用户可以选择进入超频状态,一些发烧友有特殊需求时是能用上的。
不太清楚跑分测试的机制,似乎是送样机给相关机构,是不是还能直接给出特殊机型来作弊呢?这种就完全是欺骗了。
2019-04-29
作者回复: ??只要有考试,总会出现有作弊的情况的。不过现在已经很罕见了,大家对于跑分也没有那么关注了

3、问题:为什么user + sys 运行出来会比real time 多呢

[[email protected] ~]# time seq 1000000 | wc -l
1000000

real	0m0.058s   #Wall Clock Time 也就是运行程序整个过程中流失的时间
user	0m0.047s   #CPU在运行你的程序,在用户态运行指令的时间,
sys		0m0.044s	#CPU在运行你的程序,在操作系统内核里运行指令的时间

4、作者回复

我知道原因了,这个的确是因为“并行原因”的运行的。虽然seq和wc这两个命令都是单线程运行的,但是这两个命令在多核cpu运行的情况下,会分别分配到两个不同的cpu,

于是user和sys的时间都是两个cpu上运行的时间之和,就可能超过real的时间。你可以这样来快速验证运行

time seq 100000000 | wc -l &

让这个命令多跑一会儿,并且在后台运行。

然后利用 top 命令看不同进程的cpu占用情况,你会在top的前几行里看到seq和wc的cpu占用都接近100,实际是各被分配到了一个不同的cpu执行。

我写文稿测试的时候开了一个1u的最小的虚拟机,只有一个cpu所以不会遇到这个问题。

原文地址:https://www.cnblogs.com/luoahong/p/10798372.html

时间: 2024-08-06 11:54:29

深入浅出计算机组成原理:通过你的CPU主频,我们来谈谈“性能”究竟是什么?(第3讲)的相关文章

深入浅出计算机组成原理

课程目录:第00课.开篇词丨为什么你需要学习计算机组成原理?.rar第01课.冯-诺依曼体系结构:计算机组成的金字塔.rar第02课.给你一张知识地图,计算机组成原理应该这么学.rar第03课.通过你的CPU主频,我们来谈谈“性能”究竟是什么?.rar第04课.穿越功耗墙,我们该从哪些方面提升“性能”?.rar第05课.计算机指令:让我们试试用纸带编程.rar第06课.指令跳转:原来if.rar第07课.函数调用:为什么会发生stackoverflow?.rar第08课.ELF和静态链接:为什么

重学计算机组成原理(二)- 制定学习路线,攀登“性能”之巅

0 学习路线的知识点概括 学习计算机组成原理,就是学习计算机是如何协调运行的 计算机组成原理的英文叫Computer Organization Organization 意"组织机构". 该组织机构能够进行各种计算.控制.读取输入,进行输出,达成各种强大的功能. 把整个计算机组成原理的知识点拆分成了四大部分 计算机的基本组成 计算机的指令和计算 处理器设计 存储器和I/O设备. 0.1 计算机的基本组成 计算机的硬件组成 这些硬件,怎么对应到经典的冯·诺依曼体系结构的 除此之外,还需要

编程必备基础知识|计算机组成原理篇(09):CPU的控制器和运算器

计算机基础方面的知识,对于一些非科班出身的同学来讲,一直是他们心中的痛,而对于科班出身的同学,很多同学在工作之后,也意识到自身所学知识的不足与欠缺,想回头补补基础知识.关于计算机基础的课程很多,内容繁杂,但无论是相关书籍还是大学课程,都有点脱离工作.特别地,计算机基础知识体系庞杂,想要从零学习或者复习都耗时耗力. 有鉴于此,本系列文章将带你更快的补足编程必备基础知识,涵盖计算机领域三大基础知识:计算机组成原理.操作系统.计算机网络,这些都是大学计算机课程里面最重要的内容.文章对这些内容做了提炼和

深入浅出计算机组成原理:Superscalar和VLIW-如何让CPU的吞吐率超过1?(第26讲)

一.引子 到今天为止,专栏已经过半了.过去的20多讲里,我给你讲的内容,很多都是围绕着怎么提升CPU的性能这个问题展开的.我们先回顾一下第4讲,不知道你是否还记得这个公式: 程序的CPU执行时间 = 指令数 × CPI × Clock Cycle Time 这个公式里,有一个叫CPI的指标.我们知道,CPI的倒数,又叫作IPC(Instruction Per Clock),也就是一个时钟周期里面能够执行的指令数,代表了CPU的吞吐率.那么,这个指标,放在我们前面几节反复优化流水线架构的CPU里,

深入浅出计算机组成原理:GPU(下)-为什么深度学习需要使用GPU?(第31讲)

一.引子 上一讲,我带你一起看了三维图形在计算机里的渲染过程.这个渲染过程,分成了顶点处理.图元处理.栅格化.片段处理,以及最后的像素操作.这一连串的过程, 也被称之为图形流水线或者渲染管线. 因为要实时计算渲染的像素特别地多,图形加速卡登上了历史的舞台.通过3dFx的Voodoo或者NVidia的TNT这样的图形加速卡,CPU就不需要再去处理一个个像素点的图元处理.栅格化和片段处理这些操作.而3D游戏也是从这个时代发展起来的. 你可以看这张图,这是“古墓丽影”游戏的多边形建模的变化.这个变化,

深入浅出计算机组成原理:异常和中断-程序出错了怎么办?(第28讲)

一.引子 过去这么多讲,我们的程序都是自动运行且正常运行的.自动运行的意思是说,我们的程序和指令都是一条条顺序执行,你不需要通过键盘或者网络给这个程序任何输入.正常运行是说,我们的程序都是能够正常执行下去的,没有遇到计算溢出之类的程序错误. 不过,现实的软件世界可没有这么简单.一方面,程序不仅是简单的执行指令,更多的还需要和外部的输入输出打交道.另一方面,程序在执行过程中,还会遇到各种异常情况,比如除以0.溢出,甚至我们自己也可以让程序抛出异常. 那这一讲,我就带你来看看,如果遇到这些情况,计算

深入浅出计算机组成原理:32-FPGA、ASIC和TPU(上)-计算机体系结构的黄金时代(第32讲)

一.引子 过去很长一段时间里,大家在讲到高科技.互联网.信息技术的时候,谈的其实都是“软件”.从1995年微软发布Windows 95开始,高科技似乎就等同于软件业和互联网.著名的风险投资基金Andreessen Horowitz的合伙人Marc Andreessen,在2011年发表了一篇博客,声称“Software is Eating the World”.Marc Andreessen,不仅是投资人,更是Netscape的创始人之一.他当时的搭档就是我们在前两讲提过的SGI创始人Jim C

深入浅出计算机组成原理:SIMD:如何加速矩阵乘法?(第27讲)

一.引子 上一讲里呢,我进一步为你讲解了CPU里的“黑科技”,分别是超标量(Superscalar)技术和超长指令字(VLIW)技术. 超标量(Superscalar)技术能够让取指令以及指令译码也并行进行:在编译的过程,超长指令字(VLIW)技术可以搞定指令先后的依赖关系,使得一次可以取一个指令包. 不过,CPU里的各种神奇的优化我们还远远没有说完.这一讲里,我就带你一起来看看,专栏里最后两个提升CPU性能的架构设计.它们分别是,你应该常常听说过的 超线程(Hyper-Threading)技术

深入浅出计算机组成原理:解读TP-设计和拆解一块ASIC芯片(第33讲)

一.引子 过去几年,最知名.最具有实用价值的ASIC就是TPU了.各种解读TPU论文内容的文章网上也很多.不过,这些文章更多地是从机器学习或者AI的角度,来讲解TPU. 上一讲,我为你讲解了FPGA和ASIC,讲解了FPGA如何实现通过“软件”来控制“硬件”,以及我们可以进一步把FPGA设计出来的电路变成一块ASIC芯片. 不过呢,这些似乎距离我们真实的应用场景有点儿远.我们怎么能够设计出来一块有真实应用场景的ASIC呢?如果要去设计一块ASIC,我们应该如何思考和拆解问题呢?今天,我就带着你一