Lecture 14
Microarchitecture,也称为计算机组织,指处理器内部指令执行流程等,即定义特定指令集在处理器中如何具体执行。
结构分类
(Flynn’s taxonomy,费林分类法)
计算机可以有单个 (S) 或多个 (M) 指令流 (I) 和数据流 (D),经过组合则有四种类型的体系
- MISD 只作为理论模型出现,没有投入到实际应用之中。
SISD
SISD 架构中,主要是执行标量 (scalar) 操作,即每个指令操作单个数据元素。
应用于要求简化设计、降低成本的背景,无需引入复杂的并行处理,比如简单的嵌入式系统(传感器)。
SIMD
单指令多数据,即并行处理一组多个不同数据单元,由单一指令部件控制。适用于需要大量计算且所有处理器执行相同工作的情况,没有相同且独立的任务的情况。
- 例如,执行数组 [1,2,3,4] 加上 [5,6,7,8],得到 [6,8,10,12]。此时共有 4 个算术单元在工作,但它们都共享相同的“加法”指令,且所有相同的操作都是同步执行。
MIMD
多指令多数据,即每个并行单元具有独立的指令,因此每个单元都可以在任何时间执行不同的操作:一个执行加法,另一个可能执行乘法等。
MIMD 处理器往往很昂贵,但可以比 SIMD 解决更复杂的问题。
具体技术
人们通常认为并行等同于多核,但现代计算机在不同层次上都使用了并行技术。
指令级并行
Instruction-Level Parallelism,ILP
关注同一个时钟周期内多个指令同时执行
流水线
Pipeline
非流水线操作则一条指令需要需要花费五个处理器周期来完成,即一条指令的生命周期
(the typical machine cycle that a CPU uses to process instructions)
- 取指(Instruction Fetch, IF):从指令存储器中获取下一条要执行的指令。
- 译码(Instruction Decode, ID):解析指令,并确定需要执行的操作和操作数。
- 执行(Execution, EX):执行指令的操作,可能涉及算术运算、逻辑操作等。
- 访存(Memory Access, MEM):如果指令需要读取或写入内存数据,则执行内存访问操作。
- 写回(Write Back, WB):将执行结果写回到寄存器或内存。
流水线操作指在程序执行时多条指令重叠进行操作的一种“准并行”实现技术
- 逻辑上模拟了并行操作,但实际上仍然是串行执行的
- 每个阶段的执行时间必须足够短,以便在下一个时钟周期开始之前完成,因此具有数据相关性(data dependency),容易造成资源矛盾(resource conflicts)
超标量处理
- 分清楚 ⚠️ 处理器架构和处理器微架构的区别
比如同样是 x86 架构,8086 处理器不是超标量处理器,但 Pentium 系列是
数据级并行
Data-Level Parallelism,DLP
关注一个指令对多个相同类型的数据进行同一的操作
向量操作
数据向量是一种表示多个数据元素的数据结构,可以理解为一维数组,它将多个数据元素打包成一个连续的序列,可以同时进行并行操作。
主要通过向量指令集(Vector Instruction,或等同于 SIMD Instruction)实现
- MMX(Multi-Media Extensions):Intel x86 架构的一套向量指令集,引入了一组加速多媒体应用的 SIMD 指令。
- SSE(Streaming SIMD Extensions):Intel x86 架构的一套向量指令集,引入了一组更广泛的SIMD指令,以提供更高的并行性和向量处理能力。
🧐 之前笔记提到的指令可以理解为 x86 的基本指令集
并行循环
任务级并行
这部分主要涉及 MIMD,即进行、线程、多核处理器、分布式计算等操作系统的内容
MIMD 经常利用到一些拓扑结构 (Topology),用于定义处理器和内存之间的连接方式和布局。