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
}
}
我认为第二种情况具有更好的空间局部性,因为所有数据都是交错的,应该同时加载到缓存中。在这两种情况下,我将同时处理所有领域。有什么输入吗?
答案 0 :(得分:0)
我们缺乏重要的细节,首先是目标架构。
两种方式都可以实现相同的空间局部性。
答案 1 :(得分:0)
我建议您尝试使用cachegrind或其他缓存分析器下的数据集吗?这可能比对空间位置等进行理论化更有效。根据代码的访问模式,您可能会得到一些令人惊讶的结果。