函数 | N=64 | N=60 |
---|---|---|
sumA | 25% | 25% |
sumB | 100% | 25% |
sumC | 50% | 25% |
C = 4096, B = 16, E = 1, S = 256
每组可以缓存 4 个元素。
0 4 8 12
0 +----+----+----+
| 0 | 1 | 2 |
+----+----+----+
上图的含义是,
a[0][0:4] 会被缓存到 组0
a[0][4:8] 会被缓存到 组1
a[0][8:12] 会被缓存到 组2
0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64
0 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
1 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
2 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
3 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
4 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 |
5 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 |
6 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 96 | 97 | 98 | 99 | 100| 101| 102| 103| 104| 105| 106| 107| 108| 109| 110| 111|
7 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 112| 113| 114| 115| 116| 117| 118| 119| 120| 121| 122| 123| 124| 125| 126| 127|
8 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 128| 129| 130| 131| 132| 133| 134| 135| 136| 137| 138| 139| 140| 141| 142| 143|
9 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 144| 145| 146| 147| 148| 149| 150| 151| 152| 153| 154| 155| 156| 157| 158| 159|
10 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 160| 161| 162| 163| 164| 165| 166| 167| 168| 169| 170| 171| 172| 173| 174| 175|
11 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 176| 177| 178| 179| 180| 181| 182| 183| 184| 185| 186| 187| 188| 189| 190| 191|
12 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 192| 193| 194| 195| 196| 197| 198| 199| 200| 201| 202| 203| 204| 205| 206| 207|
13 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 208| 209| 210| 211| 212| 213| 214| 215| 216| 217| 218| 219| 220| 221| 222| 223|
14 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 224| 225| 226| 227| 228| 229| 230| 231| 232| 233| 234| 235| 236| 237| 238| 239|
15 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 240| 241| 242| 243| 244| 245| 246| 247| 248| 249| 250| 251| 252| 253| 254| 255|
16 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
17 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
18 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
19 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
20 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 |
21 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 |
22 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 96 | 97 | 98 | 99 | 100| 101| 102| 103| 104| 105| 106| 107| 108| 109| 110| 111|
23 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 112| 113| 114| 115| 116| 117| 118| 119| 120| 121| 122| 123| 124| 125| 126| 127|
24 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 128| 129| 130| 131| 132| 133| 134| 135| 136| 137| 138| 139| 140| 141| 142| 143|
25 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 144| 145| 146| 147| 148| 149| 150| 151| 152| 153| 154| 155| 156| 157| 158| 159|
26 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 160| 161| 162| 163| 164| 165| 166| 167| 168| 169| 170| 171| 172| 173| 174| 175|
27 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 176| 177| 178| 179| 180| 181| 182| 183| 184| 185| 186| 187| 188| 189| 190| 191|
28 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 192| 193| 194| 195| 196| 197| 198| 199| 200| 201| 202| 203| 204| 205| 206| 207|
29 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 208| 209| 210| 211| 212| 213| 214| 215| 216| 217| 218| 219| 220| 221| 222| 223|
30 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 224| 225| 226| 227| 228| 229| 230| 231| 232| 233| 234| 235| 236| 237| 238| 239|
31 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 240| 241| 242| 243| 244| 245| 246| 247| 248| 249| 250| 251| 252| 253| 254| 255|
32 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
33 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
34 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
35 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
36 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 |
37 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 |
38 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 96 | 97 | 98 | 99 | 100| 101| 102| 103| 104| 105| 106| 107| 108| 109| 110| 111|
39 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 112| 113| 114| 115| 116| 117| 118| 119| 120| 121| 122| 123| 124| 125| 126| 127|
40 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 128| 129| 130| 131| 132| 133| 134| 135| 136| 137| 138| 139| 140| 141| 142| 143|
41 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 144| 145| 146| 147| 148| 149| 150| 151| 152| 153| 154| 155| 156| 157| 158| 159|
42 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 160| 161| 162| 163| 164| 165| 166| 167| 168| 169| 170| 171| 172| 173| 174| 175|
43 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 176| 177| 178| 179| 180| 181| 182| 183| 184| 185| 186| 187| 188| 189| 190| 191|
44 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 192| 193| 194| 195| 196| 197| 198| 199| 200| 201| 202| 203| 204| 205| 206| 207|
45 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 208| 209| 210| 211| 212| 213| 214| 215| 216| 217| 218| 219| 220| 221| 222| 223|
46 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 224| 225| 226| 227| 228| 229| 230| 231| 232| 233| 234| 235| 236| 237| 238| 239|
47 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 240| 241| 242| 243| 244| 245| 246| 247| 248| 249| 250| 251| 252| 253| 254| 255|
48 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
49 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
50 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
51 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
52 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 |
53 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 |
54 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 96 | 97 | 98 | 99 | 100| 101| 102| 103| 104| 105| 106| 107| 108| 109| 110| 111|
55 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 112| 113| 114| 115| 116| 117| 118| 119| 120| 121| 122| 123| 124| 125| 126| 127|
56 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 128| 129| 130| 131| 132| 133| 134| 135| 136| 137| 138| 139| 140| 141| 142| 143|
57 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 144| 145| 146| 147| 148| 149| 150| 151| 152| 153| 154| 155| 156| 157| 158| 159|
58 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 160| 161| 162| 163| 164| 165| 166| 167| 168| 169| 170| 171| 172| 173| 174| 175|
59 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 176| 177| 178| 179| 180| 181| 182| 183| 184| 185| 186| 187| 188| 189| 190| 191|
60 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 192| 193| 194| 195| 196| 197| 198| 199| 200| 201| 202| 203| 204| 205| 206| 207|
61 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 208| 209| 210| 211| 212| 213| 214| 215| 216| 217| 218| 219| 220| 221| 222| 223|
62 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 224| 225| 226| 227| 228| 229| 230| 231| 232| 233| 234| 235| 236| 237| 238| 239|
63 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 240| 241| 242| 243| 244| 245| 246| 247| 248| 249| 250| 251| 252| 253| 254| 255|
64 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64
方框中的数字代表 a 中的元素会缓存到 组数
sumA 是按照 从左往右,从上往下 的顺序访问,只有 j%4 = 0 会不命中。所以,不命中率是 25%。
sumB 是按照 从上往下,从左往右 的顺序访问,
从上图中,可以看到,第一次查询 组0,是要访问 a[0][0]
,不命中。第二次查询 组0 ,是要访问 a[16][0]
,不命中。同理可得,每次都不能命中。
所以,不命中率是 100%。
sumC 是按照 从上往下,从左往右 的顺序访问,但是,每次访问的是 2*2 的方格子。其中
在每个 `a[j][i], a[j][i+1], a[j+1][i], a[j+1][i+1]`
以及 `a[j][i+2], a[j][i+3], a[j+1][i+2], a[j+1][i+3]` 中
i i+1 i+2 i+3
+-----+-----+-----+-----+
j | m | h | m | h |
+-----+-----+-----+-----+
j+1 | m | h | m | h |
+-----+-----+-----+-----+
其中 a[j][i+2] 为 不命中 的原因是,在访问完 a[j][i] 后,接着访问 a[j+16][i], a[j+32][i],...,a[j-16][i+2] 等元素,才会访问 a[j][i+2] ,这些元素都会缓存到同一组中,组中的元素早就被替换了。
所以,不命中率是 50%。
0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60
0 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
1 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
2 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 |
3 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 |
4 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 |
5 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 |
6 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100| 101| 102| 103| 104|
7 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 105| 106| 107| 108| 109| 110| 111| 112| 113| 114| 115| 116| 117| 118| 119|
8 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 120| 121| 122| 123| 124| 125| 126| 127| 128| 129| 130| 131| 132| 133| 134|
9 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 135| 136| 137| 138| 139| 140| 141| 142| 143| 144| 145| 146| 147| 148| 149|
10 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 150| 151| 152| 153| 154| 155| 156| 157| 158| 159| 160| 161| 162| 163| 164|
11 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 165| 166| 167| 168| 169| 170| 171| 172| 173| 174| 175| 176| 177| 178| 179|
12 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 180| 181| 182| 183| 184| 185| 186| 187| 188| 189| 190| 191| 192| 193| 194|
13 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 195| 196| 197| 198| 199| 200| 201| 202| 203| 204| 205| 206| 207| 208| 209|
14 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 210| 211| 212| 213| 214| 215| 216| 217| 218| 219| 220| 221| 222| 223| 224|
15 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 225| 226| 227| 228| 229| 230| 231| 232| 233| 234| 235| 236| 237| 238| 239|
16 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 240| 241| 242| 243| 244| 245| 246| 247| 248| 249| 250| 251| 252| 253| 254|
17 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 255| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
18 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 |
19 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 |
20 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 |
21 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 |
22 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 |
23 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100| 101| 102| 103|
24 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 104| 105| 106| 107| 108| 109| 110| 111| 112| 113| 114| 115| 116| 117| 118|
25 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 119| 120| 121| 122| 123| 124| 125| 126| 127| 128| 129| 130| 131| 132| 133|
26 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 134| 135| 136| 137| 138| 139| 140| 141| 142| 143| 144| 145| 146| 147| 148|
27 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 149| 150| 151| 152| 153| 154| 155| 156| 157| 158| 159| 160| 161| 162| 163|
28 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 164| 165| 166| 167| 168| 169| 170| 171| 172| 173| 174| 175| 176| 177| 178|
29 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 179| 180| 181| 182| 183| 184| 185| 186| 187| 188| 189| 190| 191| 192| 193|
30 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 194| 195| 196| 197| 198| 199| 200| 201| 202| 203| 204| 205| 206| 207| 208|
31 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 209| 210| 211| 212| 213| 214| 215| 216| 217| 218| 219| 220| 221| 222| 223|
32 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 224| 225| 226| 227| 228| 229| 230| 231| 232| 233| 234| 235| 236| 237| 238|
33 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 239| 240| 241| 242| 243| 244| 245| 246| 247| 248| 249| 250| 251| 252| 253|
34 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 254| 255| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
35 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
36 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 |
37 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 |
38 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 |
39 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 |
40 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100| 101| 102|
41 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 103| 104| 105| 106| 107| 108| 109| 110| 111| 112| 113| 114| 115| 116| 117|
42 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 118| 119| 120| 121| 122| 123| 124| 125| 126| 127| 128| 129| 130| 131| 132|
43 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 133| 134| 135| 136| 137| 138| 139| 140| 141| 142| 143| 144| 145| 146| 147|
44 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 148| 149| 150| 151| 152| 153| 154| 155| 156| 157| 158| 159| 160| 161| 162|
45 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 163| 164| 165| 166| 167| 168| 169| 170| 171| 172| 173| 174| 175| 176| 177|
46 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 178| 179| 180| 181| 182| 183| 184| 185| 186| 187| 188| 189| 190| 191| 192|
47 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 193| 194| 195| 196| 197| 198| 199| 200| 201| 202| 203| 204| 205| 206| 207|
48 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 208| 209| 210| 211| 212| 213| 214| 215| 216| 217| 218| 219| 220| 221| 222|
49 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 223| 224| 225| 226| 227| 228| 229| 230| 231| 232| 233| 234| 235| 236| 237|
50 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 238| 239| 240| 241| 242| 243| 244| 245| 246| 247| 248| 249| 250| 251| 252|
51 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 253| 254| 255| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
52 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
53 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 |
54 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 |
55 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 |
56 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 |
57 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100| 101|
58 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 102| 103| 104| 105| 106| 107| 108| 109| 110| 111| 112| 113| 114| 115| 116|
59 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| 117| 118| 119| 120| 121| 122| 123| 124| 125| 126| 127| 128| 129| 130| 131|
60 +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60
方框中的数字代表 a 中的元素会缓存到的 组数。
sumA 是按照 从左往右,从上往下 的顺序访问,只有 j%4 = 0 会不命中。所以,不命中率是 25%。
sumB 是按照 从上往下,从左往右 的顺序访问,
从上图中,可以看到,第一次查询 组0,是要访问 a[0][0]
,不命中。第二次查询 组0 ,是要访问 a[0][1]
,命中。同理可得, a[0][2]
和 a[0][3]
都会命中。
所以,每一组更新后,都会命中 3 次。
所以,不命中率是 25%
sumC 是按照 从上往下,从左往右 的顺序访问,但是,每次访问的是 2*2 的方格子。其中
在每个 `a[j][i], a[j][i+1], a[j+1][i], a[j+1][i+1]`
以及 `a[j][i+2], a[j][i+3], a[j+1][i+2], a[j+1][i+3]` 中
i i+1 i+2 i+3
+-----+-----+-----+-----+
j | m | h | h | h |
+-----+-----+-----+-----+
j+1 | m | h | h | h |
+-----+-----+-----+-----+
所以,不命中率是 25%。
上面的缓存图,是用程序输出的。可以在线访问并运行。