我正在尝试优化大型2D(井,1D处理为2D)字节数组的索引,以最大化来自相同高速缓存行的大小为64字节的连续查找次数.每次查找都与前一次相同,在水平和垂直之间交替.运动是正面的还是负面的可以被视为随机的(实际上它遵循Langton的蚂蚁规则RLR,但我不认为这些信息是严格相关的),这意味着路径混乱,倾向于保持在相同的一般区域中相当长的时间.
通过一次正常索引一行,水平移动可能在同一缓存行内,但从不垂直移动.我的解决方案是将数组索引为8x8块,这是一个示例,好像高速缓存行大小为9,带有6x6数组:
24 25 26 33 34 35
21 22 23 30 31 32
18 19 20 27 28 39
6 7 8 15 16 17
3 4 5 12 13 14
0 1 2 9 10 11
Run Code Online (Sandbox Code Playgroud)
它没有显示3x3块,但它应该允许缓存线更多地重复使用:
.
.
.
56 57 58 59 60 61 62 63
48 49 50 51 52 53 54 55
40 41 42 43 44 45 46 47
32 33 34 35 36 37 38 39
24 25 26 27 28 29 …Run Code Online (Sandbox Code Playgroud)