哪种结构设计具有更好的空间局部性?

时间:2010-11-27 19:37:48

标签: c caching data-oriented-design

struct{
    Vector3* centers;
    float*  radii;
    float*  colors;
    unsigned int size;
}Spheres;

struct Sphere{
    Vector3 center;
    float  radius;
    float  color;
};

struct{
    struct Sphere* spheres;
    unsigned int size;
}Spheres;

用法示例

void spheres_process(){
    int i;
    for(i = 0; i < Spheres.size; ++i){
         // do something with this sphere
    }
}

我认为第二种情况具有更好的空间局部性,因为所有数据都是交错的,应该同时加载到缓存中。在这两种情况下,我将同时处理所有领域。有什么输入吗?

2 个答案:

答案 0 :(得分:0)

我们缺乏重要的细节,首先是目标架构。

两种方式都可以实现相同的空间局部性。

答案 1 :(得分:0)

我建议您尝试使用cachegrind或其他缓存分析器下的数据集吗?这可能比对空间位置等进行理论化更有效。根据代码的访问模式,您可能会得到一些令人惊讶的结果。