读书《计算机体系结构:量化研究方法》。这份笔记的特点:只记下我觉得可能会在比赛/面试/项目中理解的理论和技巧。别的用到的时候再update一下。 这篇文章是完全的实用功利主义的文章,因此不可避免的会缺少一些原书中非常值得玩味的部分和知识,比如第一章中,我不关心成本/功耗/面积等参数,而在实际的处理器设计中,这三者有时比性能更重要。
处理器的性能分析#
第一章中主要总结了处理器性能的各个指标以及其公式。 总的目的的降低程序的CPU时间(秒),最重要的公式是公式(8):
- 时钟周期时间: 硬件技术与组成
- CPI: 组成与指令集体系结构
- 指令数: 指令集体系结构和编译器技术
处理器设计主要集中在降低CPI上,不过事实上这三个因素之间相互影响。因此提高处理器性能主要是这三个因素相互之间tradeoff。
@startmindmap
<style>
node {
FontName 微软雅黑
FontSize 17
LineThickness 0
BackgroundColor #EEEEEE
FontColor black
}
:depth(0) {
BackgroundColor #3949AB
FontColor white
FontSize 23
}
boxless {
FontName 微软雅黑
FontColor black
}
arrow {
LineColor black
LineThickness 1
}
</style>
* 性能分析
** 执行时间
*** 性能(1)
*** 加速比(2)
** 处理器性能
*** 时钟周期时间
**** 时钟频率: 一秒钟执行的时钟周期数(3)
*** 程序的CPU的时钟周期数
**** CPU时间: 程序的执行时间(4)(5)(8)(9)(10)
*** 指令数(IC): 程序包含多少条指令
**** CPI: 每条指令的时钟周期数(6)
**** IPC: CPI的倒数(7)
@endmindmap
n=执行时间X执行时间Y=性能Y性能X(1)加速比=改进后的执行时间未改进时的执行时间(2)时钟频率=时钟周期时间1s(3)CPU时间=程序的CPU时钟周期数∗时钟周期时间(4)CPU时间=时钟频率程序的CPU时钟周期数(5)CPI=指令数程序的CPU时钟周期数(6)IPC=程序的CPU时钟周期数指令数(7)CPU时间=指令数∗CPI∗时钟周期时间(8)CPU时间=程序指令数∗指令数时钟周期数∗时钟周期数秒=程序秒(9)CPU时间=(CPU时钟周期数+存储器停顿周期数)∗时钟周期时间(10)@startmindmap
<style>
node {
FontName 微软雅黑
FontSize 17
LineThickness 0
BackgroundColor #EEEEEE
FontColor black
}
:depth(0) {
BackgroundColor #3949AB
FontColor white
FontSize 23
}
boxless {
FontName 微软雅黑
FontColor black
}
arrow {
LineColor black
LineThickness 1
}
</style>
* Cache
** 缓存结构(1)
*** 缓存大小
*** 缓存组相连数
*** 块大小
*** 索引
** 基本的缓存优化方法
*** 降低缺失率
**** 增大缓存块
**** 增大缓存
**** 提高相连度
*** 降低缺失代价
**** 多级缓存
**** 为读缺失指定高于写操作的优先级
*** 缩短命中时间
**** 索引缓存期间避免虚实地址转换
** 缓存性能标准
*** 存储器停顿周期(2)
*** 缺失率
**** 缺失代价:往往作为常数使用
**** 读写操作分开考虑下的公式(3)
**** 每条指令的缺失数(4)
*** 存储器平均访问时间(5)
** 四个存储层次结构问题
*** 块的放置
*** 块的识别
*** 块的替换
**** 随机
**** LRU
**** 伪LRU
**** FIFO
*** 写入策略
**** 写直达:容易实现,简化数据一致性.
**** 写回:适用于多处理器/嵌入式程序
**** 脏位
**** 写入停顿
***** 写缓冲区
**** 写缺失
***** 写分配:通常与写回搭配
***** 非写分配:通常与写直达搭配
** 缺失
*** 强制缺失/冷启动缺失/首次访问缺失
*** 容量缺失
*** 冲突缺失/碰撞缺失
*** 一致性缺失
@endmindmap
缓存性能#
2索引=块大小∗组相连度缓存大小(1)存储器停顿周期=缺失数∗缺失代价=IC∗指令缺失数∗缺失代价=IC∗指令存储器访问次数∗缺失率∗缺失代价(2)存储器停顿周期=IC∗读指令占比∗读缺失率∗写缺失代价=IC∗写指令占比∗写缺失率∗写缺失代价(3)指令缺失数=指令数缺失率∗存储器访问次数=缺失率∗指令存储器访问次数(4)存储器平均访问时间=命中时间+缺失率∗缺失代价(5)存储器结构问题#
Opteron数据缓存:
- 64KB
- 块大小为64字节 : 1024块
- 两路组相连 : 512块/路
- LRU替代策略
- 写回策略
- 写缺失时写分配