我们假设我有一个可以从文件中读取的2D数组
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
我希望将它们存储为1D阵列arr [16] 我知道行式和列式存储 这会弄乱阵列的结构。说我想用2X2过滤器来解决这个问题。然后在conv(1,1)处,我将在1,2,5,6位置访问记忆 相反,我可以以一种模式优化数据的存储,使得元素1,2,5,6彼此相邻存储而不是远离它们吗? 这可以减少内存延迟问题。
答案 0 :(得分:0)
这取决于您的处理器,但假设您的典型英特尔高速缓存行大小为64字节,那么选择每个64字节大小的方形子区域就像一个聪明的举动。
如果你的每个元素都是一个字节,那么8x8 subtiles是有意义的。所以,例如。
#define index(x, y) (x&7) | ((y&7) << 3) | \
((x&~7) << 6) | ((y&~7) ... shifted and/or multiplied as per size of x)
所以在每个完整的瓷砖中:
因此,每个输出像素触摸的平均缓存线数为1.265625,而在幼稚情况下则为2.03125。
答案 1 :(得分:0)
我发现了我在找什么。我正在寻找一种被称为Morten排序的数组,它已经证明可以减少内存访问时间。另一种方法是使用希尔伯特曲线方法,该方法被证明比morten排序方法更有效。
我附上了解释此
的文章的链接