缓存实验cachelab3
1.M64N64、M61N67转置(s5E1b5):
矩阵64x64规模,8分块处理结果:和没有分块的差别不大,没有什么改进效果。
可以知道一共32组,每组一行,每行32个字节,可以存储8个整数。因此矩阵中一行每8个数占一个组,每4行填满整个cache。
注意到如右上图,当矩阵规模较小的时候,分块8x8和4x4都不会出现同一个块里面有映射到相同组的方格。
按8x8分块,因此每块包含竖直方向的两个格子,而且这两个格子对应数据映射到cache中同一个组。
现在分析一下同一个块中有映射到相同组的数带来性能的影响:
32x32矩阵8x8分块使得不处于对角线的矩阵上的块和转置后对应的块映射到不同的组。减少冲突次数,以减少不命中率。
12.5%。①当一个块中出现映射到同一组的数,分析一个块,对每一个位置进行编号,相同编号的格子映射到同一组。
②假设该块不在对角线上,因此它和它在转置矩阵中的分块不会冲突。
③在原矩阵中的块是按行访问的,因此它只有每行第一个元素是不命中或者驱逐。但是看转置后矩阵中的块,是按列访问的,每一列的后4个方格和前4个方格映射到同一组,所以驱逐不命中,访问下一列的时候因为和前一列的后4个方格在映射到相同的组冲突,也发生驱逐冲突,因此在转置后的矩阵中不命中的概率是100%,原矩阵中
优化:
将8x8的矩阵再次细分成为4x4的4块。
M61N67分块测试:
这个规模的矩阵的不同之处是,8位数据一组的情况下不满足分块后一行就是一组的情况,会有分块之间的交叠。
nxn | 3x3 | 4x4 | 5x5 | 6x6 | 7x7 | 8x8 | 9x9 |
Misses | 2675 | 2545 | 2933 | 2253 | 2263 | 2183 | 2090 |
nxn | 10x10 | 11x11 | 12x12 | 13x13 | 14x14 | 15x15 | 16x16 |
Misses | 2076 | 2089 | 2057 | 2048 | 1996 | 2021 | 1992 |
nxn | 17x17 | 18x18 | 19x19 | 20x20 | 1x1 |
| |
misses | 1950 | 1961 | 1979 | 2002 | 2181 |
|
可以看出划分的块过大或过小都不能有效提升性能,这里最优的划分是17x17的块。