0

相关问题: 这个

我正在使用一个空间网格,它可能会变大(10^6 个节点)甚至更大。我将定期执行置换操作(例如从一个节点到另一个节点的粒子)。我不是信息学专家,但我开始理解缓存行和空间局部性的概念,虽然还不是很好。所以,我在徘徊是否更喜欢使用二维数组(如果是的话,哪个?我现在更愿意避免提升,但也许我稍后会链接它)并索引位移,例如像这样:

数组[i][j] -> 数组[i-1][j+2]

或者,对于一维数组,如果 NX 是“等效”列数:

数组[i*NX+j] -> 数组[(i-1)*NX+j+2]

知道每次迭代将完成近一百万次,也有近一百万次迭代。

4

1 回答 1

1

启用现代编译器和优化后,这两者可能会生成完全相同的代码

Array[i-1][j+2]  // Where Array is 2-dimensional

Array[(i-1)*NX+j+2]  // Where Array is 1-dimensional

假设 NX 是二维数组中第二个下标的维数(列数)。

于 2013-05-15T00:16:08.847 回答