第1章 超标量处理器概览 1
1.1为什么需要超标量 1
1.2普通处理器的流水线 3
1.2.1流水线概述 3
1.2.2流水线的划分 5
1.2.3指令间的相关性 8
1.3超标量处理器的流水线 9
1.3.1顺序执行 10
1.3.2乱序执行 12
第2章 Cache 17
2.1 Cache的一般设计 17
2.1.1 Cache的组成方式 20
2.1.2 Cache的写入 25
2.1.3 Cache的替换策略 28
2.2提高Cache的性能 30
2.2.1写缓存 30
2.2.2流水线 31
2.2.3多级结构 32
2.2.4 Victim Cache 34
2.2.5预取 35
2.3多端口Cache 37
2.3.1 True Multi-port 37
2.3.2 Multiple Cache Copies 38
2.3.3 Multi-banking 38
2.3.4真实的例子:AMD Opteron的多端口Cache 39
2.4超标量处理器的取指令 42
第3章 虚拟存储器 48
3.1概述 48
3.2地址转换 50
3.2.1单级页表 52
3.2.2多级页表 55
3.2.3 Page Fault 62
3.2.4小结 64
3.3程序保护 66
3.4加入TLB和Cache 68
3.4.1 TLB的设计 68
3.4.2 Cache的设计 78
3.4.3将TLB和Cache放入流水线 87
第4章 分支预测 96
4.1概述 96
4.2分支指令的方向预测 100
4.2.1基于两位饱和计数器的分支预测 101
4.2.2基于局部历史的分支预测 106
4.2.3基于全局历史的分支预测 113
4.2.4竞争的分支预测 116
4.2.5分支预测的更新 118
4.3分支指令的目标地址预测 122
4.3.1直接跳转类型的分支预测 123
4.3.2间接跳转类型的分支预测 127
4.3.3小结 133
4.4分支预测失败时的恢复 134
4.5超标量处理器的分支预测 141
第5章 指令集体系 145
5.1复杂指令集和精简指令集 146
5.2精简指令集概述 147
5.2.1 MIPS指令集 147
5.2.2 ARM指令集 150
5.3 Load/Store指令 155
5.3.1 Load指令 155
5.3.2 Store指令 155
5.4计算指令 157
5.4.1加减法 158
5.4.2移位指令 160
5.4.3逻辑指令 160
5.4.4乘法指令 161
5.4.5乘累加指令 162
5.4.6特殊计算指令 163
5.5分支指令 163
5.6杂项指令 169
5.7异常 171
第6章 指令解码 176
6.1指令缓存 177
6.2一般情况 178
6.3特殊情况 180
6.3.1分支指令的处理 182
6.3.2乘累加/乘法指令的处理 182
6.3.3前/后变址指令的处理 185
6.3.4 LDM/STM指令的处理 185
6.3.5条件执行指令的处理 193
第7章 寄存器重命名 195
7.1概述 195
7.2寄存器重命名的方式 197
7.2.1使用ROB进行寄存器重命名 198
7.2.2将ARF扩展进行寄存器重命名 200
7.2.3使用统一的PRF进行寄存器重命名 201
7.3重命名映射表 203
7.3.1基于SRAM的重命名映射表 205
7.3.2基于CAM的重命名映射表 206
7.4超标量处理器的寄存器重命名 212
7.4.1解决RAW相关性 215
7.4.2解决WAW相关性 219
7.5寄存器重命名过程的恢复 223
7.5.1使用Checkpoint 223
7.5.2使用WALK 226
7.5.3使用Architecture State 226
7.6分发 228
第8章 发射 230
8.1概述 230
8.1.1集中式VS分布式 232
8.1.2数据捕捉VS非数据捕捉 232
8.1.3压缩VS非压缩 235
8.2发射过程的流水线 238
8.2.1非数据捕捉结构的流水线 238
8.2.2数据捕捉结构的流水线 243
8.3分配 244
8.4仲裁 246
8.4.1 1-of-M的仲裁电路 246
8.4.2 N-of-M的仲裁电路 251
8.5唤醒 254
8.5.1单周期指令的唤醒 254
8.5.2多周期指令的唤醒 256
8.5.3推测唤醒 261
第9章 执行 275
9.1概述 275
9.2 FU的类型 277
9.2.1 ALU 277
9.2.2 AGU 281
9.2.3 BRU 281
9.2.4其他FU 286
9.3旁路网络 286
9.3.1简单设计的旁路网络 288
9.3.2复杂设计的旁路网络 292
9.4操作数的选择 296
9.5 Cluster 299
9.5.1 Cluster IQ 300
9.5.2 Cluster Bypass 303
9.6存储器指令的加速 306
9.6.1 Memory Disambiguation 306
9.6.2非阻塞Cache 312
9.6.3关键字优先 318
9.6.4提前开始 319
第10章 提交 321
10.1概述 321
10.2重排序缓存 322
10.2.1一般结构 322
10.2.2端口需求 325
10.3管理处理器的状态 326
10.3.1使用ROB管理指令集定义的状态 328
10.3.2使用物理寄存器管理指令集定义的状态 331
10.4特殊情况的处理 331
10.4.1分支预测失败的处理 332
10.4.2异常的处理 336
10.4.3中断的处理 339
10.4.4 Store指令的处理 340
10.4.5指令离开流水线的限制 342
第11章 真实世界的例子:Alpha 21264处理器 344
11.1概述 344
11.2取指令和分支预测 346
11.2.1 line/way的预测 347
11.2.2分支预测 350
11.3寄存器重命名 352
11.4发射 354
11.5执行单元 357
11.5.1整数的执行单元 357
11.5.2浮点数的执行单元 359
11.6存储器的访问 361
11.6.1 Speculative Disambiguation 361
11.6.2 Load hit/miss Prediction 367
11.7退休 369
11.8结论 369
参考文献 371