优秀网站专题,江门seo全网营销,修改网站后台地址,免费h5场景制作软件Nvidia CUDA初级教程1 CPU体系架构综述 视频#xff1a;https://www.bilibili.com/video/BV1kx411m7Fk?p2 讲师#xff1a;周斌 本节内容#xff1a;了解现代CPU的架构和性能优化#xff1a;
流水线 Pipelining分支预测 Branch Prediction超标量 Superscalar乱序执行 Out…Nvidia CUDA初级教程1 CPU体系架构综述 视频https://www.bilibili.com/video/BV1kx411m7Fk?p2 讲师周斌 本节内容了解现代CPU的架构和性能优化
流水线 Pipelining分支预测 Branch Prediction超标量 Superscalar乱序执行 Out-of-Order (OoO) Excution存储器层次 Memeory Hierarchy矢量操作 Vertor Operations多核处理 Multi-Core
CPU
什么是CPU 执行指令、处理数据的器件 完成基本的逻辑和算术指令 现在增加了复杂功能 内存接口外部设备接口 包含大量的晶体管 非常大上亿…
什么是指令
算术add r4, r4 - r4访存load [r4] - r7控制jz end
对于一个编译好的程序最优化目标 cyclesinstruction×secondscycle\frac{cycles}{instruction}\times \frac{seconds}{cycle} instructioncycles×cycleseconds CPI每条指令的时钟数时钟周期
这两个指标彼此并不独立会存在 trade-off。
桌面应用
桌面应用有以下特点
轻量级进程少量线程大量分支和交互操作大量的存储器访问真正用于数值计算的指令很少
IO密集型程序
CPU性能优化
流水线
取指、译码、执行、访存、写回逻辑上是串行的但是在实际的CPU实现中有大量并行优化的部分。流水线利用指令级并行 (instruction-level parallelism, ILP)
Pros: 极大地减小时钟周期
Cons: 但是会增加一些延迟和芯片面积
流水线带来的其他的问题
具有依赖关系的指令怎样处理分支怎么处理流水线的长度14级/20级并不是越高越好
其他一些优化 旁路 Bypassing 停滞 Stalls 分支 Branches
分支预测
基于果蛆的分支记录猜测下一条指令
现代分支预测器的准确度大于90%
Pros: 提升性能及能量效率
Cons: 面积增加、可能会增加延迟
分支断定
用条件语句替换分支
Pros不适用分支预测器减小面积减少错误预测
超标量
常规 IPC (instructions/cycle) 受限于 1 instuction / clock
超标量增加流水线的宽度
峰值IPC为NN路超标量但实际中会有分支和调度产生的开销需要一些技巧来接近峰值
Pros: 提升IPC
Cons: 增加了面积、N倍资源占用、旁路网络 N^2、需要更多寄存器和存储器带宽
指令调度
考虑如下指令
xor r1, r2 - r3
add r3, r4 - r4
sub r5, r2 - r3
addi r3, 1 - r1xor与add互相依赖 (Read-After-Write, RAW)sub与addi互相依赖 (RAW)xor与sub不依赖 (WAW) 但是它们会用到同一个寄存器 r3
寄存器重命名
替换寄存器
xor p1, p2 - p6
add p6, p4 - p7
sub p5, p2 - p8
addi p8, 1 - p9现在xor与sub可以并行执行
乱序执行
重排指令获得最大的吞吐率
重排缓冲区 Reorder Buffer记录所有执行中的指令状态发射队列/调度器 Issue Queue/Scheduler 选择下一条执行的指令
Pros: IPC接近理想状态
Cons: 面积增加、功耗增加
存储器层次
存储器越大越慢
缓存 caching
将数据放在尽可能接近的位置利用 时间临近性刚刚使用过的数据很可能会被再使用空间临近性倾向于使用周围的临近的数据
缓存层次 硬件管理 L1、L2、L3缓存 软件管理 内存、磁盘
存储器的另外的考虑
分区 banking 避免多端口 一致性 coherency控制器 memory controller 多个通道增加带宽
CPU内部的并行性
指令级并行 ILP 超标量乱序执行 数据级并行 DLP 矢量计算 线程级并行 TLP 同步多线程 SMT多核
向量运算
for (int i0; iN; i) {A[i] B[i] C[i];
}数据级并行
单指令多数据 Single Instruction Multiple Data (SIMD) 执行单元ALU很宽寄存器也很宽
for (int i0; iN; i4) {// 并行 同时计算A[i] B[i] C[i];A[i1] B[i1] C[i1];A[i2] B[i2] C[i2];A[i3] B[i3] C[i3];
}x86的向量运算
SSE2AVX
线程级并行
线程
线程组成 指令流 instruction streams私有寄存器程序计数器栈共享全局变量 程序员可以创建和销毁程序员或者OS都可以调度
多核
将流水线完整复制Sandy Bridge-E: 6 cores 完整的核除了最后一级缓存外不共享其他资源继续保持摩尔定律 多核程序核利用率的问题
锁、一致性和同一性
锁 lock
问题多个线程读写同一块数据解决方法加锁
一致性 coherence
问题谁的数据是正确的解决方法缓存一致性协议
同一性 consistency
问题什么样的数据是正确的存储器同一性模型
新时代的计算技术
能量墙常规传统单核处理器遇到物理约束时钟频率 (perf/clock) 无法保持线性增长免费的午餐要消失了
新摩尔定律
处理器越来越胖核越来越多单核的性能不会大幅提升另外一堵墙存储器墙
处理器的存储器带宽无法满足处理能力的提升
结论 CPU为串行程序优化 流水线、分支预测、超标量、乱序执行、…通过高时钟频率和高利用率来降低执行时间 缓慢的内存带宽存储器带宽将会是大问题 并行处理是方向 Sandy Bridge-E 6-12 活动线程 如果有成千上万的活动线程并发执行呢
Ref
https://www.bilibili.com/video/BV1kx411m7Fk?p2