计算机性能
计算机的性能: 论其在执行特定任务时的效率和能力。根据用户不同,需求不同,处理的东西不同,所要求的性能是不一样的。
性能的度量
-
响应时间 (执行时间): 从用户发起一个请求或指令到系统完成该请求并给出反馈所需的时间。包括硬盘访问、内存访问、I/O 活动、操作系统开销和 CPU 执行时间等。
- 一般题目使用:
执行结束时间 - 执行开始时间 = 响应时间
- 一般题目使用:
-
吞吐率 (带宽): 这是衡量系统在一定时间内能处理多少工作量的能力,通常以每秒处理的任务数量或者数据传输量来表示。
-
时钟周期: 几乎所有计算机都用时钟来驱动硬件中发生的各种事件,时钟间隔的时间称为时钟周期。
- 单位通常是皮秒(ps)、纳秒(ns)、微秒(μs)或者毫秒(ms)。
- ps = ns = μs = ms = s ( 每一级相差 )
- 区分:
- 1B = 8b
- TB = (1024) GB = MB = KB = B
- 需要熟悉 10以内的2的幂!
-
时钟长度: 每个时钟周期持续的时间长度。
-
时钟频率 (主频): 即时钟周期的倒数,表示单位时间内时钟周期的数量,通常以赫兹(Hz)为单位。10Hz表示每秒10次。
- 主频 = , 时钟周期 =
- 即
CPU性能
CPU性能: CPU性能是一个核心指标。CPU执行时间,即程序在CPU上运行所需的时间,是评估CPU性能的关键。
时钟频率和时钟周期时间互为倒数关系: (理论基础: )
硬件设计者可以通过减少程序的CPU时钟周期数或降低时钟周期时间来提高性能。然而,在实际的设计过程中,设计者经常需要在这些因素之间进行权衡。因为很多技术在减少时钟周期数的同时,可能会导致时钟周期时间的增加。
指令性能
指令性能: CPI
(clock cycle per instruction) 表示执行每条指令所需的时钟周期数
的平均值。
上式表明,CPU的性能(CPU执行时间)取决于三个要素: 主频、CPI 和指令条数。主频、CPI和指令条数是相互制约的。例如,更改指令集可以减少程序所含的指令条数,但同时可能引起CPU结构的调整,从而可能会增加时钟周期的宽度(降低主频)。
所以,在衡量一个计算机的好坏的时候,我们要把全部的三个因素全部都考虑进去才行。而不是只讨论其中一个:
影响因素 | 硬件或软件指标 | 如何影响 |
---|---|---|
算法 | 指令数,CPI | 算法决定源程序执行指令的数目,从而也决定了 CPU 执行指令的数目。算法也可能通过使用较快或较慢的指令影响 CPI。例如,当算法使用更多的除法运算时,将会导致 CPI 增大。 |
程序语言 | 指令数,CPI | 编程语言显然会影响指令数,因为编程语言中的语句必须翻译为指令,从而决定了指令数。编程语言也可影响 CPI,例如,Java 语言充分支持数据抽象,因此将进行间接调用,需要使用较高的 CPI 指令。 |
编译程序 | 指令数,CPI | 编译程序决定了源程序到计算机指令的翻译过程,所以编译程序的效率既影响指令数又影响 CPI。编译器会以复杂的方式影响 CPI。 |
指令集体系结构 | 指令数,CPI,时钟频率 | 指令集体系结构影响 CPU 性能的所有 3 个方面,因为它影响完成某功能所需的指令数、每条指令的周期数以及处理器的时钟频率。 |
MIPS
这个是考研以及408可能需要学习的
- IPS: 每秒执行了多少条指令.
有一种用 MIPS(million instructions per second, 每秒百万条指令) 取代时间以度量性能的方法。对于一个给定的程序,MIPS 表示为:
(注: 用于与百万条
进行单位换算)
但是 MIPS 规定了指令执行的速率,但没有考虑指令的能力,没有办法用 MIPS 比较不同指令集的计算机,因为指令数肯定是不同的。
练习题
- 主频高的CPU一定比主频低的CPU快吗?
- 答: 不一定, 还有 呢. (快, 即问的是 "时间")
- 如果两个CPU的CPI相同, 此时主频高的CPU一定比主频低的CPU快吗?
- 答: 不一定, 还有 指令集架构 等等因素
功耗
功耗: 功耗代表了我们需要用多大的代价来进行冷却。
在计算机设计中,价格、性能和能耗是三个关键因素。价格反映了计算机的成本和普及程度,性能则决定了计算机能够完成的任务和效率,而能耗则关系到计算机的续航能力和环境影响。最佳的设计应该根据特定的应用领域和需求,在这三个因素之间取得适当的平衡。
并行编程: (理解即可, 具体会在《操作系统》课程深入学习)
-
随着时代的发展,处理器的性能增长速度慢慢变小,尤其是功耗问题。也正是因为功耗达到了极限的原因,迫使计算机设计者们另谋方法,微处理器的时代慢慢落下帷幕。
多处理器
开始蓬勃发展。 -
而多核的出现诞生出来了另外一个名词,并行编程。
-
并行性对计算性能一直十分重要,但它往往是隐蔽的。 后面我们会讲到流水线,通过指令重叠执行使程序运行得 更快。这是指令级并行性的一个例子。这个是利用了硬件的本质。这时候,对于程序员有做出了要求。让程序员意识到硬件的并行性,并显式地按并行方式重写其程序成为了程序员的难点。