【问题标题】:Row / column vs linear indexing speed (spatial locality)行/列与线性索引速度(空间局部性)
【发布时间】:2013-05-09 09:26:12
【问题描述】:

相关问题: This one

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

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

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

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

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

【问题讨论】:

    标签: optimization computer-science spatial computer-architecture temporal


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 是的,好的,但正是这个“可能”让我烦恼..谢谢!
    猜你喜欢
    • 2011-11-08
    • 2016-02-03
    • 2017-04-03
    • 2011-12-16
    • 2013-04-23
    • 2014-01-29
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多