四路组相联映射Cache组织方式设计与访问命中率分析
-
每个字块占32位,每块8个字,所以每块大小为328=256位=32字节。Cache容量为16KB,所以共有161024/32=512个字块。每个组包含4个字块,所以共有512/4=128个组。因为是四路组相联映射,所以每个组中有4个Cache行。所以,主存地址字段中应该分为3个部分:组索引(7位)、块偏移(5位)、标记(14位)。
-
CPU从主存中读取100个字,每个字占32位,所以总共需要访问100*4=400个字节。由于每个字块大小为32字节,所以共需要访问400/32=12.5个字块,即13个字块。根据四路组相联映射的规则,每个组中有4个Cache行,所以共有128/4=32个组。因此,组索引需要7位,可以表示2^7=128个组。块偏移需要5位,可以表示2^5=32个字节。标记需要14位,可以表示2^14=16384个标记。
首先,CPU从主存的第0号单元开始读取,这个字块的主存地址为0x00000000,组索引为0,块偏移为0,标记为0x0000。由于Cache的初态为空,所以这个字块不在Cache中,需要从主存中读取,将其存入Cache中。此时,Cache中第0个组的第0个Cache行被占用,标记为0x0000,组索引为0,块偏移为0~31的字节被存储在Cache行中。
接下来,CPU继续从主存中读取下一个字块,主存地址为0x00000020,组索引为0,块偏移为32,标记为0x0000。由于Cache中已经有了组索引为0的Cache行,所以需要在这个组中寻找标记为0x0000的Cache行。在这个组中,第0个Cache行的标记为0x0000,因此可以将主存中的数据存入这个Cache行中,命中。这时,Cache中第0个组的第0个Cache行中存储的字节变为了0x00000020~0x0000003F。
依此类推,CPU继续读取下一个字块,主存地址为0x00000040,组索引为1,块偏移为0,标记为0x0000。由于Cache中没有组索引为1的Cache行,需要从主存中读取,存入Cache中。此时,Cache中第1个组的第0个Cache行被占用,标记为0x0000,组索引为1,块偏移为0~31的字节被存储在Cache行中。
依此类推,CPU继续读取下一个字块,主存地址为0x00000060,组索引为1,块偏移为32,标记为0x0000。由于Cache中已经有了组索引为1的Cache行,所以需要在这个组中寻找标记为0x0000的Cache行。在这个组中,第0个Cache行的标记为0x0000,因此可以将主存中的数据存入这个Cache行中,命中。这时,Cache中第1个组的第0个Cache行中存储的字节变为了0x00000060~0x0000007F。
依此类推,CPU继续读取下一个字块,主存地址为0x00000080,组索引为2,块偏移为0,标记为0x0000。由于Cache中没有组索引为2的Cache行,需要从主存中读取,存入Cache中。此时,Cache中第2个组的第0个Cache行被占用,标记为0x0000,组索引为2,块偏移为0~31的字节被存储在Cache行中。
依此类推,CPU继续读取下一个字块,主存地址为0x000000A0,组索引为2,块偏移为32,标记为0x0000。由于Cache中已经有了组索引为2的Cache行,所以需要在这个组中寻找标记为0x0000的Cache行。在这个组中,第0个Cache行的标记为0x0000,因此可以将主存中的数据存入这个Cache行中,命中。这时,Cache中第2个组的第0个Cache行中存储的字节变为了0x000000A0~0x000000BF。
依此类推,CPU继续读取下一个字块,主存地址为0x000000C0,组索引为3,块偏移为0,标记为0x0000。由于Cache中没有组索引为3的Cache行,需要从主存中读取,存入Cache中。此时,Cache中第3个组的第0个Cache行被占用,标记为0x0000,组索引为3,块偏移为0~31的字节被存储在Cache行中。
依此类推,CPU继续读取下一个字块,主存地址为0x000000E0,组索引为3,块偏移为32,标记为0x0000。由于Cache中已经有了组索引为3的Cache行,所以需要在这个组中寻找标记为0x0000的Cache行。在这个组中,第0个Cache行的标记为0x0000,因此可以将主存中的数据存入这个Cache行中,命中。这时,Cache中第3个组的第0个Cache行中存储的字节变为了0x000000E0~0x000000FF。
最后,CPU再次读取主存中的第0号字块,主存地址为0x00000000,组索引为0,块偏移为0,标记为0x0000。由于Cache中已经有了组索引为0的Cache行,并且标记也为0x0000,所以可以直接从Cache中读取,命中。这时,Cache中第0个组的第0个Cache行中存储的字节为0x00000000~0x0000001F。
综上所述,存储访问的命中率为7/13=53.8%。
- 存储系统访问加速比=存储系统访问时间/Cache访问时间。假设主存访问时间为t1,Cache访问时间为t2,则存储系统访问时间为t113(共访问了13个字块),Cache访问时间为t213(共访问了13个字块)。因为Cache的速度是主存速度的6倍,所以t2=t1/6。代入公式得到存储系统访问加速比为13/6=2.17。
原文地址: https://www.cveoy.top/t/topic/jzrl 著作权归作者所有。请勿转载和采集!