假设一台计算机具有64个字节的Cache块,采用请求字优先时,Cache需要7个时钟周期取8字节的请求字,剩余的块中每8个字节需要1个时钟周期进行读取。没有采用请求字优先时,取第一个8字节需要8个周期,剩余的块中每8个字节需要1个时钟周期进行读取。
(1)假设在一个块取完之前没有其他访存请求,计算两种情况下的平均失效开销。
(2)Opteron每次流出两条Load指令,每条指令需4个周期流出,假设后续指令将要读取当前装载数据剩余块中的8个字节,比较两种情况下的平均失效开销。
(1)在不采用请求字处理技术的情况下,平均失效开销为
8+7×1=15(时钟周期)
采用请求字处理技术后,平均失效开销为
7(时钟周期)
这里之所以只需要7个时钟周期,是因为CPU将请求字调入只需要7个周期,而将块中其他内容调入Cache并不算入失效开销中。
由此可以看出采用了请求字处理技术后Cache的平均失效开销明显下降。
(2)出于便于理解的角度,首先分析采用请求字优先的情况。
采用请求字优先时,CPU只需要取出请求字后即可继续进行其他工作。本题中,如果采用请求字技术,那么CPU在一条指令中只需要读出请求字之后就可以进行另一条指令的流出(但是不能进行另外一条指令的读访存操作)。
因此,本题中如果采用请求字优先技术,那么CPU每次接收到第一条Load指令的请求字,即可对第二条Load指令进行流出操作。第二条指令的流出操作时间段于第一条Load指令读取块中剩余内容的时间重叠,因此在指令很多的情况下相当于可以省略每条指令读指令的4个周期。
在请求字优先的条件下,执行完一条LOAD指令的时间为:
7+7×1=14(时钟周期)
在不采用请求字优先的情况下,执行一条LOAD指令的时间为:
8+7×1+4=19(时钟周期)
可以看出,通过采用请求字优先技术,使得平均失效开销为不采用前的14/19。