Computer Architecture


计算机体系结构

绪论

一、课程基本信息

1. 课程定位与目标

  • 面向对象:高年级本科生或研究生,特别是计划从事计算机体系结构研究的学生
  • 教学目标:
    • 了解计算机体系结构基础和当代主流计算机系统
    • 掌握存储顺序性、Cache一致性、流水线和片上网络等内容
    • 掌握高性能处理器设计与分析方法
    • 了解异构计算和领域专用体系结构

2. 课程内容结构

八大章节:

  1. 绪论
  2. 基准评测集
  3. 高性能计算机体系结构
  4. 高性能处理器并行计算技术
  5. 高性能计算机存储层次
  6. 高性能计算机互连网络
  7. 异构计算体系结构
  8. 领域专用体系结构

二、量化设计与分析基础

重点内容:

  1. 计算机技术发展的关键转折点
  2. 丹纳德缩放定律(Dennard Scaling)及其终结
  3. 摩尔定律及其面临的挑战
  4. 单处理器性能发展历程

难点:

  1. 理解处理器性能增长放缓的深层原因
  2. 掌握能耗墙、内存墙等技术瓶颈的本质

关键概念:

  1. 摩尔定律:

    • 定义:晶体管数量每18-24个月翻倍,成本减半
    • 现状:增长开始放缓
    • 面临挑战:物理极限、成本效益、散热问题
  2. 丹纳德缩放定律:

    • 核心内容:功率密度随面积保持不变
    • 终结时间:2004年
    • 影响:推动了多核处理器的发展

三、高性能计算机发展史

重点内容:

  1. 高性能计算机四个发展阶段
  2. 中国超级计算机发展历程
  3. 超级计算机应用领域

实例分析:

重要里程碑机器:

  1. CDC 6600 (1964):第一台真正的超级计算机
  2. Cray-1 (1976):首次使用向量处理器架构
  3. 天河一号(2009):中国首台千万亿次超级计算机
  4. 神威·太湖之光(2016):首个使用国产芯片的世界最快超算

超级计算机应用领域:

  1. 科学计算:气候环境、天文物理、材料化工
  2. 工程应用:航空航天、石油勘探、工程设计
  3. 新兴领域:智慧城市、人工智能、精准医疗

重要图表位置标注:

  1. 超级计算机性能发展曲线:P139
  2. CPU性能发展趋势图:P140
  3. 超算应用领域分布图:P145

关键结论:

  1. “并行”是实现超级计算的唯一途径
  2. 未来发展趋势:
    • E级向Z级计算发展
    • 与AI、大数据融合
    • 探索非冯·诺依曼架构

基准评测集

一、计算机性能基础

1. 性能指标

重点:CPU性能评估方法
  • CPU时间计算公式:
    CPU Time = Instructions × CPI × Clock Cycle Time
  • 主要影响因素:
    • 指令数(Instructions)
    • 每指令周期数(CPI)
    • 时钟周期时间(Clock Cycle Time)
性能度量标准:
  1. MIPS (每秒百万指令数)

    MIPS = Instructions Number/(Execution Time × 10^6)
  2. FLOPS (每秒浮点运算次数)

    MFLOPS = Float Instructions Number/(Execution Time × 10^6)

2. 并行系统性能评估

重点概念:

  1. 加速比(Speedup):
    S = Ts/Tp
    其中:
  • Ts:串行执行时间
  • Tp:并行执行时间
  1. 效率(Efficiency):
    E = S/p
    其中p为处理器数量
难点:Amdahl定律
  1. 核心公式:
    S = 1/(f + (1-f)/p)
    其中:
  • f:串行部分比例
  • p:处理器数量
  1. 关键结论:
  • 加速比存在上限:1/f
  • 串行部分成为性能瓶颈
Gustafson定律
  1. 公式:
    S' = p - f(p-1)
  2. 特点:
  • 考虑问题规模随处理器数量增长
  • 突破了Amdahl定律的限制

二、基准测试程序

主要类型:

  1. 商用基准测试(TPC系列):
  • TPC-C:在线事务处理
  • TPC-H:决策支持系统
  • TPC-E:证券交易系统
  1. SPEC测试程序:
  • SPECint:整数运算
  • SPECfp:浮点运算
  • 特点:标准化、可比性强
  1. HPC特定测试:
  • Linpack:稠密矩阵运算
  • HPCG:稀疏矩阵求解
  • Graph500:图算法性能

实例分析:

以龙芯3A5000处理器为例:

SPEC CPU2006测试结果:
- SPECint2006:27.87
- SPECfp2006:30.29

性能分析表明:

  • 定点性能接近同代x86处理器
  • 浮点性能仍有提升空间

三、性能提升方法

主要策略:

  1. 利用并行性
  2. 遵循局部性原理
  3. 关注常见情况优化

并行算法设计步骤:

  1. 任务划分
  2. 通信分析
  3. 任务组合
  4. 处理器映射

重要图表位置:

  • CPU性能影响因素表:P12
  • 处理器性能方程:P9-10
  • 性能评测指标汇总:P16

高性能计算机的体系结构

一、超级计算机硬件组成

1. 五大核心子系统

  1. 计算阵列:
  • 处理器节点的集合
  • 例子:天河一号(7168个节点)、天河二号(17920个节点)
  • 每个节点通常包含CPU和加速器(如GPU、Intel Xeon Phi)
  1. 存储阵列:
  • 采用层次式混合共享存储架构
  • 特点:大容量、高带宽、低延迟
  • 实例数据:
    • 天河一号:262TB内存,2PB磁盘
    • 天河二号:1.408PB内存,12.4PB外存
  1. 服务阵列:
  • 基于商用服务器
  • 属于大容量胖节点
  • 物理组织:多个机架组成
    • 天河一号:140个机架
    • 天河二号:125个机柜,500个机架
  1. 互连通信子系统:
  • 是大规模并行系统的核心
  • 典型拓扑:胖树结构
  • 支持硬件实现的集体操作(如多播、广播)
  1. 监控诊断子系统:
  • 功能:实时监控、控制、诊断系统状态
  • 监控对象:健康状态、功耗、温度等

二、计算机体系结构分类

1. Flynn分类法

重点概念:
  1. 指令流(I):执行的指令序列
  2. 数据流(D):被处理的数据序列
  3. 多倍性(M):同时处理的指令/数据数量
四种基本类型:
  1. SISD(单指令流单数据流):
  • 传统串行计算机
  • 代表:早期PC机、8086处理器
  1. SIMD(单指令流多数据流):
  • 特点:对多个数据并行执行相同操作
  • 两个主要分支:
    • 阵列计算机(如ILLIAC IV)
    • 向量计算机(如Cray-1)
  1. MISD(多指令流单数据流):
  • 存在争议
  • 可能的例子:流水线结构
  1. MIMD(多指令流多数据流):
  • 最广泛使用的并行架构
  • 两种主要实现:
    • 共享内存系统
    • 分布式内存系统
实例分析
Cray-1向量计算机结构:
  • 向量寄存器组(V0-V7):每个可存64个元素
  • 标量寄存器(S0-S7)
  • 后援寄存器(T0-T63)

2. MIMD细分类型

A. 共享内存系统
  1. 集中共享内存(CSM/SMP/UMA):
  • 特点:所有处理器访问延迟相同
  • 优点:编程简单
  • 缺点:扩展性有限
  1. 分布式共享内存(DSM/NUMA):
  • 特点:本地访问快,远程访问慢
  • 两种类型:
    • NC-NUMA:无缓存
    • CC-NUMA:带缓存一致性
B. 分布式内存系统
  1. MPP(大规模并行处理器):
  • 特点:专用高速互连网络
  • 应用:科学计算
  • 节点特征:共享磁盘系统
  1. COW(工作站集群):
  • 特点:商用网络连接
  • 应用:云计算数据中心
  • 每节点独立完整

三、非冯诺依曼体系结构

1. 主要类型:

  • 归约机
  • 数据流计算机
  • 量子计算机
  • 光子计算机

2. 数据流计算机特点:

  • 数据就绪驱动执行
  • 打破串行执行限制
  • 现代应用:云计算、大数据分析系统
重要图表位置标注:
  • Flynn分类法示意图:P29
  • 共享内存系统架构图:P64-65
  • 分布式内存系统架构图:P74
  • 冯诺依曼架构图:P83

高性能处理器的并行计算技术-指令级并行

一、指令级并行基础

1. 并行性类型

  1. 数据级并行(DLP)
  • 同时对多个数据项进行操作
  1. 任务级并行(TLP)
  • 多个独立任务并行执行

2. 硬件利用并行性的四种方式:

A. 指令级并行(ILP):
  • 通过流水线和投机执行等方式利用DLP
  • 主要特征:深度流水线、多功能部件、多发射
B. 向量架构和GPU:
  • 单指令操作多个数据集合
C. 线程级并行:
  • 利用多线程执行
D. 请求级并行:
  • 处理独立的程序请求

二、指令级并行的挑战

1. 三种基本冒险:

A. 结构冒险:
  • 原因:多条指令竞争同一硬件资源
  • 示例:内存端口争用
  • 解决方案:资源复制(如分离的数据Cache和指令Cache)
B. 数据冒险:
  1. RAW(Read After Write):

    I1: add r1,r2,r3
    I2: sub r4,r1,r3 // 等待r1
  2. WAR(Write After Read):

    I1: sub r4,r1,r3
    I2: add r1,r2,r3 // 必须等I1读完r1
  3. WAW(Write After Write):

    I1: sub r1,r4,r3
    I2: add r1,r2,r3 // 写入次序不能颠倒
C. 控制冒险:
  • 由分支指令引起
  • 影响严重:每3-6条指令就有一个分支
  • 解决方案:分支预测

2. 解决数据冒险的基本方法:

A. 转发(Forward):
  • 将计算结果直接转发给需要的功能部件
  • 优点:减少等待时间
  • 局限:不能解决所有RAW冒险

三、循环展开优化

重点概念:

  1. 循环展开目的:
  • 减少循环控制开销
  • 增加指令级并行机会
  1. 基本步骤:
  • 确认循环迭代间独立性
  • 使用不同寄存器避免名字相关
  • 去除多余分支指令
  • 调整循环终止条件
  • 分析存储地址相关性
  • 进行指令调度
实例分析:
原始循环:
Loop: fld f0,0(x1)
fadd.d f4,f0,f2
fsd f4,0(x1)
addi x1,x1,-8
bne x1,x2,Loop

展开优化后:

Loop: fld f0,0(x1)
fld f6,8(x1)
fld f10,16(x1)
fld f14,24(x1)
fadd.d f4,f0,f2
fadd.d f8,f6,f2
fadd.d f12,f0,f2
fadd.d f16,f14,f2
fsd f4,0(x1)
fsd f8,8(x1)
addi x1,x1,32
fsd f12,16(x1)
bne x1,x2,Loop
fsd f16,24(x1)

优化效果:

  • 未优化:每循环10个时钟周期
  • 优化后:每原始循环3.5个时钟周期
  • 加速比:2.86倍

四、分支预测

1. 基本概念与重要性

重点:
  • 分支指令频率:每3-6条指令就有一个分支
  • 影响程序性能:10%-30%的性能损失
  • 对ILP的影响:指令级并行度越高,分支预测的重要性越大

2. 分支预测技术分类

A. 静态预测:
  1. 基于编译时信息
  2. 典型方法:
  • 总是预测分支不跳转
  • 总是预测分支跳转
  • 延迟分支(Delayed Branch)
B. 动态预测:
  1. 简单的1位预测器:
  • 记录最近一次分支结果
  1. 2位预测器:
  • 使用饱和计数器
  • 需要连续两次预测错误才改变预测方向
  1. 相关预测器(两级预测器):
  • (m,n)预测器:
    • m位历史记录
    • n位预测器
  • 实例:(2,2)预测器
    • 全局历史:2位
    • 每个分支2位预测器
  1. 竞赛预测器(Tournament Predictor):
  • 结合局部预测和全局预测
  • 动态选择更准确的预测器

3. 分支目标缓存(BTB)

重要组成:
  1. 基本结构:
  • 分支指令PC
  • 预测标志
  • 目标地址
  1. 工作流程:

    if (PC in BTB) {
    next_PC = predicted_target;
    } else {
    next_PC = PC + 4;
    }
  2. 失效代价:

    BTB失效类型   预测   实际   惩罚周期
    命中 跳转 跳转 0
    命中 跳转 不跳转 2
    未命中 - 跳转 2
    未命中 - 不跳转 0

五、推测执行

1. 重排序缓冲区(ROB)

重点概念:
  1. ROB的基本功能:
  • 按序发射
  • 乱序执行
  • 按序提交
  1. ROB条目构成:
  • 指令类型
  • 目标寄存器
  • 就绪标志
重要机制:
  1. 指令发射:
  • 分配ROB和保留站
  • 读取可用操作数
  1. 指令执行:
  • 操作数就绪即可执行
  • 结果暂存ROB
  1. 写回结果:
  • 通过CDB广播结果
  • 更新等待该结果的条目
  1. 提交过程:
  • 按程序顺序提交
  • 确保精确中断
  • 处理预测错误

2. 实例分析

示例代码:
L.D F6,34(R2)
L.D F2,45(R3)
MUL.D F0,F2,F4
SUB.D F8,F6,F2
DIV.D F10,F0,F6
ADD.D F6,F8,F2
执行过程:
  1. Load指令:
  • 立即发射
  • 等待内存访问
  • 按序提交
  1. 计算指令:
  • 等待操作数就绪
  • 乱序执行
  • 按序提交
  1. 分支预测错误处理:
  • 清除ROB中错误路径指令
  • 恢复正确的程序状态

【重要图表位置】

  • 两级预测器结构图:P25
  • BTB结构图:P37
  • ROB组织结构图:P47

六、超标量(Superscalar)处理器

1. 基本原理

  1. 核心特征:
  • 每个时钟周期发射多条指令
  • 动态检测指令间依赖
  • 硬件负责调度
  1. 关键组件:
  • 多个功能部件
  • 复杂的发射逻辑
  • 动态依赖检测

2. 主要挑战

A. 结构复杂度:
  • 检测W条待发射指令与L组执行指令间的依赖
  • 复杂度:O(W * (W*L))
B. 性能瓶颈:
  1. 指令发射带宽限制
  2. 功能部件数量限制
  3. 转发(Forward)复杂度增加

3. 实例分析

双发射MIPS处理器示例:

Loop: L.D F0,0(R1)
ADD.D F4,F0,F2
S.D F4,0(R1)
DADDIU R1,R1,#-8
BNE R1,R2,Loop

执行效率:

  • IPC(Instructions Per Clock):1.67
  • 每3个时钟完成一次循环迭代

二、超长指令字(VLIW)

1. 基本特征:

  1. 编译时调度:
  • 编译器负责发现并行性
  • 将多条独立指令打包
  1. 指令包格式:
  • 长度:112-168位
  • 典型组成:
    • 2个整数运算
    • 2个浮点运算
    • 2个访存操作
    • 1个分支指令

2. 优缺点分析

优点:
  1. 硬件简单
  2. 执行效率高
  3. 功耗低
缺点:
  1. 代码膨胀
  2. 可移植性差
  3. Lock-step限制
解决方案:
  1. 代码压缩
  2. 动态调度
  3. 目标代码转换

七、同时多线程(SMT)

1. 基本概念:

  • 多个线程共享处理器资源
  • 每个线程有独立的上下文
  • 支持快速线程切换

2. 实现方式:

A. 细粒度多线程:
  • 每个时钟切换线程
  • 优点:资源利用率高
  • 缺点:单线程延迟增加
B. 粗粒度多线程:
  • 长延迟事件触发切换
  • 优点:单线程性能好
  • 缺点:资源利用率较低
C. 同时多线程(SMT):
  • 多个线程同时执行
  • 结合超标量技术
  • 需要更多硬件资源

八、ILP限制因素

1. 理想处理器假设:

  1. 无限虚拟寄存器
  2. 完美分支预测
  3. 完美值预测
  4. 无限缓存

2. 实际限制:

A. 指令窗口大小:
  • 实际窗口大小:数百条指令
  • 影响IPC显著
B. 分支预测:
  • 完美预测vs实际预测
  • 预测错误代价高
C. 寄存器数量:
  • 256个寄存器基本足够
  • 更多寄存器收益递减
重要图表位置:
  • 窗口大小影响:P60-61
  • 分支预测影响:P64-65
  • 寄存器数量影响:P67-68

文章作者: Lavoisier
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Lavoisier !
评论
  目录