跳转至

Ch1~2 导论 计算机的演变和性能

计算机发展简史

  • 第一代:真空管
  • 第二代:晶体管
  • 第三代:集成电路
  • 第三代以后:超大规模集成电路

IAS 计算机

  • 1945 年,冯·诺依曼提出的计算机体系结构

摩尔定律

  • 集成电路的集成度每年翻一倍,后修正为 18 个月
  • 影响:
    • 集成度增加的同时单芯片成本几乎不变;
    • 高集成度,电路短,速度快;
    • 体积、能耗、冷却需求小;
    • 片外互联少,可靠性高。

微处理器速度

芯片制造技术

  • 当代处理器内置技术:
    • 流水线
    • 分支预测
    • 超标量执行
    • 数据流分析
    • 推测执行

性能平衡

  • 问题 1:处理器比主存快太多
    1. 提高一次性读取数据位数;
    2. 改进 DRAM 接口(使用 cache);
    3. 减少主存访问频度(多级 cache);
    4. 提高互联带宽(更高速的总线,改进总线层次)
  • 问题 2:频繁操作、高吞吐量的 IO 与处理器间的数据传输
    1. 提高 IO 设备速度;
    2. 减少 IO 操作频度(使用 cache);
    3. 改进 IO 接口(DMA);
    4. 改进互联结构(高速总线、改变互联结构)

改进芯片组成和体系结构

提高处理器速度的方法

  1. 提高硬件速度:缩小逻辑门尺寸,提高时钟频率(CLK)
    • 但是时钟频率和逻辑密度的增加会造成:功率增加、RC 延迟增长、内存延迟和吞吐量滞后更严重
  2. 增加处理器与主存间高速缓存的大小和速度
  3. 改变体系结构:更复杂的指令执行逻辑,并行、流水线、超标量
    • 上述方法收益递减,因此目前新方向是多核

计算机性能评估

  1. 时钟速度(也叫时钟频率):传统
    • 缺点:不同指令需要的时钟周期不同;有流水线的处理器在相同时钟频率下执行的指令更多
  2. 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} \]
  3. 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} \]
  4. 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{这段时间}} \]