《计算机体系结构:量化研究方法》笔记

读书《计算机体系结构:量化研究方法》。这份笔记的特点:只记下我觉得可能会在比赛/面试/项目中理解的理论和技巧。别的用到的时候再update一下。
这篇文章是完全的实用功利主义的文章,因此不可避免的会缺少一些原书中非常值得玩味的部分和知识,比如第一章中,我不关心成本/功耗/面积等参数,而在实际的处理器设计中,这三者有时比性能更重要。

处理器的性能分析

第一章中主要总结了处理器性能的各个指标以及其公式。
总的目的的降低程序的CPU时间(秒),最重要的公式是公式(8):

  • 时钟周期时间: 硬件技术与组成
  • CPI: 组成与指令集体系结构
  • 指令数: 指令集体系结构和编译器技术

处理器设计主要集中在降低CPI上,不过事实上这三个因素之间相互影响。因此提高处理器性能主要是这三个因素相互之间tradeoff。

n=执行时间Y执行时间X=性能X性能Y(1)n = \frac{\text{执行时间}_Y}{\text{执行时间}_X} = \frac{\text{性能}_X}{\text{性能}_Y}\tag{1}

加速比=未改进时的执行时间改进后的执行时间(2)\text{加速比} = \frac{\text{未改进时的执行时间}}{\text{改进后的执行时间}}\tag{2}

时钟频率=1s时钟周期时间(3)\text{时钟频率} = \frac{1s}{\text{时钟周期时间}} \tag{3}

CPU时间=程序的CPU时钟周期数时钟周期时间(4)CPU\text{时间} = \text{程序的}CPU\text{时钟周期数} * \text{时钟周期时间} \tag{4}

CPU时间=程序的CPU时钟周期数时钟频率(5)CPU\text{时间}= \frac{\text{程序的}CPU\text{时钟周期数}}{\text{时钟频率}} \tag{5}

CPI=程序的CPU时钟周期数指令数(6)CPI = \frac{\text{程序的}CPU\text{时钟周期数}}{\text{指令数}}\tag{6}

IPC=指令数程序的CPU时钟周期数(7)IPC = \frac{\text{指令数}}{\text{程序的}CPU\text{时钟周期数}}\tag{7}

CPU时间=指令数CPI时钟周期时间(8)CPU\text{时间} = \text{指令数} * CPI * \text{时钟周期时间} \tag{8}

CPU时间=指令数程序时钟周期数指令数时钟周期数=程序(9)CPU\text{时间} = \frac{\text{指令数}}{\text{程序}} * \frac{\text{时钟周期数}}{\text{指令数}} * \frac{\text{秒}}{\text{时钟周期数}} = \frac{\text{秒}}{\text{程序}}\tag{9}

CPU时间=(CPU时钟周期数+存储器停顿周期数)时钟周期时间(10)CPU\text{时间} = (CPU\text{时钟周期数} + \text{存储器停顿周期数}) * \text{时钟周期时间}\tag{10}

缓存

缓存性能

2索引=缓存大小块大小组相连度(1)2^{\text{索引}} = \frac{\text{缓存大小}}{\text{块大小}*\text{组相连度}}\tag{1}

存储器停顿周期=缺失数缺失代价=IC缺失数指令缺失代价=IC存储器访问次数指令缺失率缺失代价(2)\begin{aligned} \text{存储器停顿周期} &= \text{缺失数} * \text{缺失代价} \\ &= IC * \frac{\text{缺失数}}{\text{指令}} * \text{缺失代价} \\ &= IC * \frac{\text{存储器访问次数}}{\text{指令}} * \text{缺失率} * \text{缺失代价} \\ \end{aligned} \tag{2}

存储器停顿周期=IC读指令占比读缺失率写缺失代价=IC写指令占比写缺失率写缺失代价(3)\begin{aligned} \text{存储器停顿周期} &= IC * \text{读指令占比} * \text{读缺失率} * \text{写缺失代价} \\ &= IC * \text{写指令占比} * \text{写缺失} \text{率} * \text{写缺失代价} \end{aligned} \tag{3}

缺失数指令=缺失率存储器访问次数指令数=缺失率存储器访问次数指令(4)\begin{aligned} \frac{\text{缺失数}}{\text{指令}} &= \frac{\text{缺失率}*\text{存储器访问次数}}{\text{指令数}} \\ &= \text{缺失率} * \frac{\text{存储器访问次数}}{\text{指令}} \end{aligned}\tag{4}

存储器平均访问时间=命中时间+缺失率缺失代价(5)\text{存储器平均访问时间} = \text{命中时间} + \text{缺失率} * \text{缺失代价}\tag{5}

存储器结构问题

Opteron数据缓存:

  • 64KB
  • 块大小为64字节 : 1024块
  • 两路组相连 : 512块/路
  • LRU替代策略
  • 写回策略
  • 写缺失时写分配