使用Cache改善系统性能的依据是程序的局部性原理。程序中大部分指令是(顺序存储、顺序执行)的。设某计算机主存的读/写时间为100ns,有一个指令和数据合一的Cache,已知该Cache的读/写时间为10ns,取指令的命中率为98%,取数的命中率为95%。在执行某类程序时,约有1/5指令需要额外存/取一个操作数。假设指令流水线在任何时候都不阻塞,则设置Cache后,每条指令的平均读取时间约为(14.7)ns。
Cache性能优化的核心依据是程序局部性原理,该原理包含时间局部性(近期访问过的指令、数据易被再次访问)与空间局部性(连续地址的指令、数据易被连续访问),因此程序中绝大多数指令呈现顺序存储、顺序执行的特征,这也是Cache能大幅降低内存访问延迟的基础。
Cache有效访问时间是衡量其性能的核心指标,单一访问类型的有效访问时间计算公式为:命中率×Cache访问时间+未命中率×主存访问时间。对于多访问场景,比如同时涉及取指令和部分指令取数的情况,需拆分不同访问行为的有效访问时间,再结合各行为的发生比例加权求和得到整体平均访问时间——例如取指令是每条指令的必经步骤,需先计算取指令的有效访问时间;若仅部分指令需要额外取数,则计算取数的有效访问时间后,按取数指令的占比分摊到每条指令,最终将两部分时间相加得到单条指令的平均读取时间。
此外,Cache的核心优化方向围绕提升命中率展开,比如增大Cache容量、采用更适配局部性的地址映射方式、优化替换算法等,均可强化对程序局部性的利用,进一步缩小有效访问时间与Cache访问时间的差距。
本题考察的是Cache与程序局部性原理及有效访问时间(EAT)的期望计算。
问题 1:程序的时间局部性与空间局部性决定了编译器与系统倾向于让指令与数据在存储上呈顺序存储,CPU在执行时也多为顺序执行,这正是Cache能高命中、提升性能的根源。
A选项顺序存储、顺序执行与空间局部性(连续地址更可能被访问)和控制流局部性(大部分指令顺序执行)相一致,因此正确。
B选项随机存储、顺序执行违背空间局部性;
C选项顺序存储、随机执行违背控制流的时间局部性;
D选项随机存储、随机执行同时违背两类局部性,均不符合Cache高命中的经验事实。
选择选项 A。
问题 2:关键是把每条指令的平均读取时间拆成“取指令时间 + 取数时间的期望贡献”。
根据题设命中/未命中的计时口径:命中用Cache时间10ns,未命中直接用主存时间100ns。
取指令的期望时间为0.98×10 + 0.02×100 = 9.8 + 2 = 11.8ns。
取数仅在约1/5指令上发生一次,且其期望访问时间为0.95×10 + 0.05×100 = 9.5 + 5 = 14.5ns,折合到每条指令为**(1/5)×14.5 = 2.9ns**。
两部分相加得到每条指令的平均读取时间为11.8 + 2.9 = 14.7ns,与选项B一致。
你写成 4/5 * 11.8 + 1/5*(11.8+14.5) = 14.7ns 也可以。
选择选项 B。
