Ch1~2 导论 计算机的演变和性能¶
计算机发展简史¶
- 第一代:真空管
- 第二代:晶体管
- 第三代:集成电路
- 第三代以后:超大规模集成电路
IAS 计算机¶
- 1945 年,冯·诺依曼提出的计算机体系结构
摩尔定律¶
- 集成电路的集成度每年翻一倍,后修正为 18 个月
- 影响:
- 集成度增加的同时单芯片成本几乎不变;
- 高集成度,电路短,速度快;
- 体积、能耗、冷却需求小;
- 片外互联少,可靠性高。
微处理器速度¶
芯片制造技术¶
- 当代处理器内置技术:
- 流水线
- 分支预测
- 超标量执行
- 数据流分析
- 推测执行
性能平衡¶
- 问题 1:处理器比主存快太多
- 提高一次性读取数据位数;
- 改进 DRAM 接口(使用 cache);
- 减少主存访问频度(多级 cache);
- 提高互联带宽(更高速的总线,改进总线层次)
- 问题 2:频繁操作、高吞吐量的 IO 与处理器间的数据传输
- 提高 IO 设备速度;
- 减少 IO 操作频度(使用 cache);
- 改进 IO 接口(DMA);
- 改进互联结构(高速总线、改变互联结构)
改进芯片组成和体系结构¶
提高处理器速度的方法¶
- 提高硬件速度:缩小逻辑门尺寸,提高时钟频率(CLK)
- 但是时钟频率和逻辑密度的增加会造成:功率增加、RC 延迟增长、内存延迟和吞吐量滞后更严重
- 增加处理器与主存间高速缓存的大小和速度
- 改变体系结构:更复杂的指令执行逻辑,并行、流水线、超标量
- 上述方法收益递减,因此目前新方向是多核
计算机性能评估¶
- 时钟速度(也叫时钟频率):传统
- 缺点:不同指令需要的时钟周期不同;有流水线的处理器在相同时钟频率下执行的指令更多
-
CPI(程序每条机器指令所需的平均时间周期数):
- 通常不同类指令的 CPI 不同
- \(I_c\):规定时间内执行的机器指令总条数
- \(CPI_i\),\(I_i\):给定程序中 i 类指令的 CPI 和执行条数
- \(f\):时钟频率,\(\tau=\frac{1}{f}\)
-
有:
\[ \begin{aligned} CPI&=\frac{\sum_{i=1}^{n}(CPI_i×I_i)}{I_c}\\ T&=I_c×CPI×τ \end{aligned} \]
-
MIPS 速率(每秒执行的百万条指令的数量):
-
\[ MIPS=\frac{I_c}{T\times 10^6}=\frac{f}{CPI\times 10^6} \]
-
注:关于 CPI 与 MIPS 计算,课本 p43 有例题
- MFLOPS 速率(每秒执行的百万次浮点运算的数量):
- 是由于 CISC 相比 RISC,一条指令耗时更长但功能更多,用 MIPS 可能不合适
-
\[ MFLOPS=\frac{\text{程序中执行的浮点操作数量}}{\text{执行时间}\times 10^6} \]
-
-
SPEC 速度度量:
- 以基准程序 i 在参照系统上的运行时间作为基准程序 i 的参考运行时间 \(Tref_i\)
- 以基准程序 i 在被测系统上的运行时间作为基准程序 i 的参考运行时间 \(Tsut_i\)
-
\[ r_i=\frac{Tref_i}{Tsut_i} \]
-
是参考时间/被测时间,速度更快的机器比值更高
-
\[ r_G=(\prod_{i=1}^{n}r_i)^{\frac{1}{n}} \]
-
-
作几何平均,作为被测机器的 SPEC 速度度量
- SPEC 频率度量:
- 测量执行多个任务的吞吐量,多个基准程序的拷贝同时执行
-
\[ r_i=\frac{N×Tref_i}{Tsut_i} \]
-
-
\(Tref_i\) 为基准程序 i 在参照系统上运行的时间,N 是同时执行的程序数量
- \(Tsut_i\) 为 N 个基准程序在被测系统上从开始执行到全部完成所需时间
Amdahl 定律:衡量多个处理器的加速比¶
\[
\text{加速比}=\frac{\text{增强前的性能(执行时间)}}{\text{增强后的性能(执行时间)}}= \frac{\text{程序在单处理器上的执行时间}}{\text{程序在 N 个并行处理器上的执行时间}}
\]
令:\(f\) 为程序中可以无限并行执行的部分,\(1-f\) 为程序中固定只能串行执行的部分,\(T\) 为程序在单处理器上的执行时间,\(N\) 为并行系统的处理器数,则:
\[
Speedup=\frac{T}{T(1-f)+\frac{Tf}{N}}=\frac{1}{(1-f)+\frac{f}{N}}
\]
结论:
- \(f\) 非常小时并行处理意义不大;
-
\[ \lim_{N→∞}Speedup=\frac{1}{1-f} \]
总线数据传输率¶
\[
\text{总线数据传输率}=\frac{\text{一段时间内传输的数据量}}{\text{这段时间}}
\]