02计算机组成原理-计算机的性能
1.计算机性能衡量标准
计算机的性能:论其在执行特定任务时的效率和能力。会受到很多因素的影响,比如说硬件设计的影响,软件运行,操作系统,网速等印象。根据用户不同,需求不同,处理的东西不同,所要求的性能是不一样的。
对系统的性能评价我们从下面两个点考虑:
1.响应时间(执行时间) :从用户发起一个请求或指令到系统完成该请求并给出反馈所需的时间。包括硬盘访问、 内存访问、I/O 活动、操作系统开销和 CPU 执行时间等。不要简单理解成CPU执行的时间,比如CPU需要一些数据,为了完成这个操作,可能CPU需要去访问硬盘,或者说手动输入输出去调这个数据,这些操作肯定比CPU的速度满很多,但这个等待时间也要算进相应时间里。甚至你的电脑和别的电脑交互,网络延迟的时间也要算进去。响应时间直接反应电脑执行一个软件是否流畅。
我们用户比较关心这个,比如你要打开QQ,从双击QQ,到QQ弹出QQ页面这段时间我们要求肯定是快速的,有些性能不好的电脑你可能要等好几分钟。这会让用户有不好的体验。
2.吞吐率(带宽):这是衡量系统在一定时间内能处理多少工作量的能力,通常以每秒处理的任务数量或者数据传输量来表示。比如web服务器中吞吐率就可以指单位时间内服务器能够相应的HTTP的数量,或者在数据库中吞吐率可以表示每秒数据库能查询或者读取多少数据。
这个一般数据中心比较关心,因为服务器或任务中心需要同时处理大量的任务和系统,因此在一定时间内能处理多少工作服务器或任务中心们比较关心的。大家肯定都用过百度云盘之类的来上传资料或者下载资料吧,如果你不开会员的话,下载的速度是特别慢的,开了会员后会快一些。因为百度云盘就像一个数据中心,我们所有人都可以把数据上传到服务器,同一时间内很有可能不止一个人在上传数据或者下载数据,服务器需要同时响应成百上千个用户的请求,这时候吞吐量就是衡量其性能的核心指标 ------ 非会员用户的下载速度被限制,本质就是数据中心为了保障整体吞吐量,对单用户的资源占用做了限流,避免个别用户过度占用带宽、存储 IO 等资源,导致其他用户的请求无法被及时处理,整体系统的处理效率大幅下降。
响应时间和吞吐率不是相互独立的,相互之间是有一个权衡关系的。为了提高吞吐率,我们系统可能会采用并发或者并行的操作会同一时间处理多个任务,这时候就出现了一个问题,每个任务的响应时间可能增加了。如果你是并行的话,电脑有多个CPU,每个CPU处理一个任务,这样也就还好。但受硬件资源的影响,CPU也不可能加到无限多,现在大家基本都用的4核或者8核。所以当任务数量多到一定程度的时候我们就要采用并发来解决。来看下面这个例子:现在有三个任务,每个任务从开始到完成需要2秒,我们用6秒中的时间来完成这3个任务,采取并发的思想,在第一秒内我开始执行任务1,二秒内我开始执行任务2,三秒内我开始执行任务3,在第四秒内我又执行任务1,系统对任务1的响应时间是4秒,它不会管你中间是否做了其他任务,只关注从开始到结束一共用了多久,进而导致响应时间下降了。

反之要提高相应时间可能就会降低系统吞吐率,它们是相互制衡的。
通过上述的陈述,我们关注一个计算机的性能的核心其实我们就是在关注时间问题。我们作为普通用户我们关心的是响应时间,相应时间内各个硬件的工作快慢我们不可见也不太关心,我们主要关心整体时间,但是对于计算机的设计者来说,那么我们就得去关心计算机硬件的效率。
硬件的时间度量概念:硬件执行的时间是非常短的可能就是几毫秒,几纳秒。我们人类几乎感知不到,那硬件执行的这个时间怎么算呢?在计算机的主板上有个晶振(石英晶体振荡器)。这个晶振可以发出一个主脉冲信号,这个东西就有点类似于我们上学时做广播体操广播中喊得12345678,22345678,在喊1的时候会做某个操作,喊2的时候做某个操作,12一起又做什么操作,我们是根据广播体操的节奏来采取我们的行动的。对于计算机硬件也是这样的,他们也需要一个东西来给他们发出一个发出"节奏"来去执行每个具体的操作。在计算机内部我们是用石英晶体振荡器来发出主脉冲信号,基于这个信号去做每一个操作。如下图大致就是晶振发出的主脉冲信号,从发出信号开始到信号结束会经过一段很短的时间,这个间隔时间我们就称为时钟周期。计算机硬件的每一个具体操作所需要的时间其实基本都是基于时钟周期来定的。所以我们去衡量每个硬件的时间的时候我们也是根据这个时钟周期来定的。

3.时钟周期 :几乎所有计算机都用时钟来驱动硬件中发生的各种事件,时钟间隔的时间称为时钟周期。单位通常是纳秒(ns)、微秒(μs)或者毫秒(ms)。
4.时钟长度 :每个时钟周期持续的时间长度。
5.时钟频率(主频):即时钟周期的倒数,表示单位时间内时钟周期的数量,通常以赫兹(Hz)为单位。10Hz表示每秒10次。可表示反映 CPU 时钟节拍快慢,主频越高电脑速度越快,执行一个固定的操作的时间越短。
2.CPU性能
CPU(中央处理器)性能:CPU性能是一个核心指标。CPU(执行)时间,即程序在CPU上运行所需的时间,不包括IO等待时间,或者是其他程序运行的时间,是评估CPU性能的关键。
CPU时间=用户CPU时间+系统CPU时间。为什么会有这两部分的时间呢?执行一个程序/软件的时候,我们并不会只执行这个程序/软件。当我们执行一个程序的时候,用户程序本身不能直接操作硬件,涉及到硬件的 IO 操作、访存操作等,都需要向操作系统发起请求,由操作系统来完成硬件控制,这就需要操作系统提供服务的时间。我们不是单独的运行这个程序本身,我们是需要使用到操作系统给我们提供的一些服务的,所以CPU时间分为两部分,一部分用户CPU时间就是单纯的执行用户程序的时间,系统CPU时间就是操作系统提供服务的时间。比如你去餐馆吃菜,前20分钟点菜(接收餐馆提供的服务),后面20分钟吃完菜。但吃饱总的时间是40min。但在运行的过程中其实我们很难区分这两种时间,因为我们很难分清哪些操作系统的活动是属于哪个用户程序的。所以我们一般就在理论上分析这两种时间。就像前面的例子,我在等菜的过程中,我怎么知道这20分钟厨师是不是全都在抄我的菜。
CPU执行时间 = CPU时钟周期数 × 时钟周期时间
时钟频率和时钟周期时间互为倒数关系:
CPU执行时间 = CPU时钟周期数 / 时钟频率
硬件设计者可以通过减少程序的CPU时钟周期数或降低时钟周期时间(提高频率)来提高性能。然而,在实际的设计过程中,设计者经常需要在这些因素之间进行权衡。因为很多技术在减少时钟周期数的同时,可能会导致时钟周期时间的增加。
3.指令性能
指令性能:CPI (clock cycle per instruction) 表示执行每条指令所需的时钟周期数的平均值。
之前说过高级语言写的程序会被计算机翻译成机器指令,显然不同类型的机器指令执行所需的时钟周期数不相同,比如加法指令比乘法指令简单,加法指令执行所需的时钟周期数远少于乘法指令,所以 CPI(每条指令的时钟周期数)表示的是一个程序执行过程中,平均每条机器指令所需的时钟周期数。
CPU时钟周期数=程序的指令数 * CPI
CPU时间 = 指令数 * CPI * 时钟周期时间
CPU时间 = (指令数 * CPI) / 主频
上式表明,CPU的性能(CPU执行时间)取决于三个要素:主频、CPI 和指令条数。主频、CPI和指令条数是相互制约的。例如,更改指令集可以减少程序所含的指令条数,但同时可能引起CPU结构的调整,从而可能会增加时钟周期的宽度(降低主频)。
所以,在衡量一个计算机的好坏的时候,我们要把全部的三个因素全部都考虑进去才行。而不是只讨论其中一个:
4.IPS (每秒执行多少条指令)
有一种用 MIPS (million instructions per second, 每秒秒百万条指令)取代时间以度量性能的方法。对于一个个给定的程序, MIPS 表示为:
MIPS=指令条数/(执行时间x10^6)=主频/(CPI * 10^6)。
但是 MIPS 规定了指令执行的速率,但没有考虑指令的能力,没有办法用 MIPS 比较不同指令集的计算机,因为指令数肯定是不同的。
通过以上讲解现在来看两个问题:
1.主频高的CPU一定比主频低的CPU快吗-->不一定,我们还需要考虑到CPI
2.如果两个CPU的CPI相同,此时主频高的CPU一定比主频低的CPU快吗-->不一定,还要考虑到指令集架构,同样执行乘法运算,如果主频高的那个没有乘法指令,那就的分解成多个加法运算,这样指令条数就变多了。主频低的万一支持乘法操作,就不需要转换,直接一个乘法到位。
5.功耗
功耗:功耗代表了我们需要用多大的代价来进行冷却。
比如手机常见冷却就是散热板,电脑常见冷却有风扇,水冷。
在计算机设计中,价格、性能和能耗是三个关键因素。价格反映了计算机的成本和普及程度,性能则决定了计算机能够完成的任务和效率,而能耗则关系到计算机的续航能力和环境影响。最佳的设计应该根据特定的应用领域和需求,在这三个因素之间取得适当的平衡。
大概先写这些吧,今天的博客就先写到这,谢谢您的观看。