CPU结构和性能优化
流水线 | Pipelining |
分支预测 | Branch Prediction |
超标量 | Superscalar |
乱序执行 | Out-of-Order(OoO) Execution |
存储器层次 | Memory Hierarchy |
矢量操作 | Vector Operations |
多核处理 | Multi-Core |
优化目标:每条指令的时钟周期数CPI X 时钟周期,两个指标不独立,只能取这种
桌面应用Desktop Programs:
- 轻量级进程,少量线程Lightly threaded
- 大量分支和交互操作 Lots of branches
- 大量的存储器访问Lots of memory accesses
- 真正用于数值运算的指令很少
简单的CPU
取指-->译码-->执行-->访存-->写回
Fetch-->Decode-->Execute-->Memory-->Writeback
流水线Pipeline
1、利用指令级并行instuction-level parallelism(iLP)
极大的减小时钟周期Significantly reduced clock period
带来的问题
增加了一些延时和芯片面积slight latency & area increase (pipleline latches)
依赖关系的指令
分支怎么处理
溧水县长度Alleged Pipeline Lengths
2、旁路Bypassing
不用等某条流水线都执行完成,直接将要计算的数据获取到之后进行计算。直接开了一条旁路
3、停滞Stalls
若指令间有依赖关系,必须等待执行完成
4、分支Branches
分支预测Branch Prediction
1、猜测下一条指令是什么Guess what instruction comes next
2、基于过去的分支记录Based off branch history
3、预测器>90%Modern predictors >90% accuracy
提升性能及能量效率Raise performance and energy efficiency
面积增加Area increase
可能增加延时Potential fetch stage latency increase
分支断定Another option:Predication
1、用条件语句替换分支Replace branches with conditional instructions
不使用分支预测器Avoids branch perdictor
减少了面积,减少了错误预测avoids area penaity , misprediction penalty
introduces unnecessary nop if predictable branch
在GPU中使用分支断定 GPUs also use predication
提升IPC
常规IPC(instructions /cycle)受限于I instruction/clock
超标量Superscalar-增加流水线宽度,器件多了
超标量Superscalar
峰值IPC为N(N路超标量)Peak IPC now at N(for N-way superscalar)
分支和调度会增加开销
需要很多的技巧逼近峰值
增加了面积Area increase
N倍资源使用
旁路网络
需要更多的寄存器和存储器带宽
指令调度Scheduling
寄存器重命名Register Renaming
替换寄存器
乱序执行Out-of-Order(OoO)Execution
1、重排指令,获得最大的吞吐率
Fetch-->Decode-->Rename-->Dispatch-->Issue-->Register-Read-->Execute-->Memory-->Writeback-->Commit
2、重排缓冲区Reorder Buffer (ROB)记录所有执行中的指令状态
3、发射队列/调度器 Issue Queue /Scheduler选择下一条指令
IPC接近理想状态
面积增加了
功耗增加了
顺序执行Modern Desktop/Mobile In-order CPUs
乱序执行Modern Desktop/Mobile OoO CPUs
存储器架构/层次 Memory Hierarchy
存储器越大越慢
缓存Caching
将数据放置在尽可能接近的位置
利用:
时间临近性:刚刚使用过的数据很可能会在使用
空间临近性:倾向于使用周围临近的数据
缓存层次Cache Hierarchy
硬件管理
L1 Instruction /Data caches
L2 unified cache
L3 unified cache
软件管理
Main memory
Disk
存储器另外的设计考虑
分区Banking:避免多端口
一致性Coherency
控制器Memory Controller:多个通道,增加带宽
CPU内部并行性
指令级并行Instruction-Level(ILP) extraction
超标量 Superscalar
乱序执行 Out-of-order
数据级并行Data-Level Parallelism(DLP):适量计算Vectors
线程级并行Thread-Level Parallelism(TLP)
同步多线程 Simultaneous Multithreading (SML)
多核Multicore
向量运算Vectors Motivation相同处理的事情同时去做
数据级并行Data-level Parallelism
单指令多数据Single Instruction Multiple Data(SIMD)
执行单元(ALU)很宽
寄存器也很宽
X86 的向量运算
SSE2
4宽度浮点或者整数指令
Intel Pentium 4 onwards
AMD Athlon 64 onwards
AVX
8宽度浮点或整数指令
Intel Sandy Bridge
AMD Buildozer
线程级并行 Thread-Level Parallelism
线程组成
指令流Instuction streams
私有的寄存器,程序计数器,栈Priavte PC ,registers, stack
共享的全局变量,堆Shared globals,heap
程序员可以创建和销毁
程序员和OS都可以调度
多核Multicore
将流水线完整复制
完整的核、除了最后一级缓存外,不共享其他资源
继续保持摩尔定律
带来了多核线程和利用率问题
死锁、一致性和同一性Locks,Coherence, and Consistency(加锁,缓存一致性协议Conherence谁的数据是正确的 ,存储器同一性模型Consistency什么样的数据是正确的)
CPU系统现实困境:能量墙Power Wall,功耗的提升-->面积不能无限的增加,主频反而下降。
新时代的计算技术:并行计算
常规传统单核处理器遇到物理约束
时钟频率(perf/clock)无法保持线型增长
新摩尔定律
处理器越来越胖,核越来越多
单核性能不会大幅提升
另一堵墙:存储器
处理器的存储器带宽无法满足处理能力的提升。
结论
1、CPU为串行程序优化
Pipelines, branch prediction , superscalar ,OoO
Reduce execution time with high clock speeds and high utilization
2、缓慢的内存带宽(存储器带宽)将会是大问题
3、并行处理器是方向
Sandy Bridge-E 6-12活动线程