跳转至

Lec1 绪论

阅读信息

964 字  4 分钟  本页总访问量 加载中...

计算机设计导论

计算机体系结构研究的问题是,如何用电子硬件高效地执行存储在内存中的程序。

计算机架构:

  • 冯诺依曼架构:数据和程序都存放在内存中。CPU 从内存取指令和数据,执行运算,然后把结果写回内存。
  • 哈佛架构:指令存储和数据存储分离,通常总线也分离,可并行取指和访存

计算机的基本组成:输入输出设备、存储器、运算器、控制器,分为datapath和control path。

计算系统的分类:

  • 按用途分类:桌面计算机(PC)、服务器、嵌入式计算机(国内和PC近似)、移动设备、超算
  • Flynn分类法:按指令流和数据流的数量,分为SISD、SIMD、MISD、MIMD四类,其中S为single、M为multiple。常见为SIMD(一条指令同时处理多条数据)和MIMD(多个处理器各自执行不同指令、处理不同数据)。

技术发展趋势

三大技术发展趋势:

  • 性能趋势:CPU性能快速提升(摩尔定律),频率提高,但单核性能提升变慢
  • 功耗趋势:频率提高导致功耗急剧增加,造成“功耗墙”
  • 成本发展趋势:之硬件成本下降、软件成本上升,导致很多功能基于软件实现。未来可能出现AI专用硬件、硬件成本上升。

现在,从指令级并行和提高频率转向线程级并行、数据级并行。

性能基础

Q:怎么定义计算机性能?

两个核心概念:

  1. 响应时间(latency/response time):从开始到完成一个任务所需要的时间,考察单个任务延迟。
  2. 吞吐率(throughput):单位时间内完成的任务数量,考察系统整体并发能力。

系统性能定义为执行时间的倒数。

Q:怎么定义执行时间?

执行时间(execution time/elapsed time)为程序从开始到结束的真实时间,包括CPU计算时间、I/O时间、操作系统调度、等待时间,其中主要为CPU时间。

CPU时间为两种解释:

  1. 用户CPU时间:执行程序代码本身的时间,只取决于程序算法
  2. 系统CPU时间:操作系统执行任务的总时间,由程序算法、编译器、处理器、I/O系统共同决定。

CA的目标为减少系统的CPU执行时间。

CPU性能定量分析方法

单位换算:(从小到大)KB、MB、TB、GB、PB

Q:怎么计算CPU执行时间?

  • 计算CPI(cycles per instruction):
\[ \text{CPI} = \sum (\text{CPI}_i \times \text{frequency}_i) \]
  • 计算clock cycles:
\[ \text{clock cycles} = \text{IC} \times \text{CPI} \]
  • 计算CPU time:
\[ \text{CPU time} = \text{cycle time} \times \text{clock cycles} = \frac{\text{clock cycles}}{\text{clock rate}} \]

Q:怎么计算性能提升的比例?

  • Amdahl's Law:
\[ \text{improved time} = \frac{\text{affected time}}{\text{improvement}} + \text{unaffected time} \]
  • 计算speedup:
\[ \text{speedup} = \frac{\text{unimproved time}}{\text{improved time}} \]

ISA指令集结构

Q:设计ISA要考虑什么?

ISA包括指令、寄存器、数据类型、寻址方式、内存模型等。

要考虑:操作数放在哪里,一条指令有几个操作数,怎么找到操作数,支持哪些数据类型,支持哪些操作

三大ISA架构

按照指令存储的位置,ISA分为stack, accumulator, register三种架构。

栈结构(stack architecture)

特点:操作数时钟在栈顶,没有显示操作数。需要先push入栈,取栈顶数计算,计算结果作为新的数存放在栈顶;如计算结果要另外存储,pop成新的变量。

  • 优点:指令简单,编码短
  • 缺点:频繁访存下慢,难以优化。几乎不用。
D=A*B-(A+C*B)
Text Only
push A
push B
mul
pop E

push C
push B
mul

push A
add

push E
sub

pop D

累加器结构(accumulator architecture)

特点:有一个隐式寄存器(累加器)ACC和一个显示操作数。运算结果直接放到ACC参与后续运算,ACC既是结果也是操作数。如要另外存储ACC结果,用store存储在新寄存器中。

  • 优点:比栈更高效,指令较简单
  • 缺点:单寄存器导致并行性差。在历史早期CPU中常见。
D=A*B-(A+C*B)
Text Only
1
2
3
4
5
6
7
8
load C   // ACC = C
mul B    // ACC = ACC * B
add A    // ACC = ACC + A
store E  // E = ACC
load A   // ACC = A
mul B    // ACC = ACC * B
sub E    // ACC = ACC - E
store D  // D = ACC

寄存器架构(register architecture)

特点:使用通用寄存器(GPR),显式指定操作数。现代CPU基本都使用这种架构。

按照访存指令的种类,分成两种子类型:

  1. Register-memory:所有指令都能访存
  2. Load-store(也称register-register):只有load/store能访存
D=A*B-(A+C*B)
Text Only
1
2
3
4
5
6
7
load R1, C   // R1 = C
mul  R1, B   // R1 = R1 * B
add  R1, A   // R1 = R1 + A
load R2, A   // R2 = A
mul  R2, B   // R2 = R2 * B
sub  R2, R1  // R2 = R2 - R1
store R2
Text Only
1
2
3
4
5
6
7
load R1, C
load R2, B
add  R1, R1, R2
load R3, A
add  R1, R1, R3
mul  R4, R2, R3
sub  R1, R4, R1