Quelle conception struct a une meilleure localisation spatiale?
-
28-09-2019 - |
Question
struct{
Vector3* centers;
float* radii;
float* colors;
unsigned int size;
}Spheres;
contre
struct Sphere{
Vector3 center;
float radius;
float color;
};
struct{
struct Sphere* spheres;
unsigned int size;
}Spheres;
exemple d'utilisation
void spheres_process(){
int i;
for(i = 0; i < Spheres.size; ++i){
// do something with this sphere
}
}
Je pense que le second a une meilleure localisation spatiale puisque toutes les données sont intercalées et doit être chargé dans le cache en même temps. Dans les deux cas, je vais le traitement de toutes les sphères en même temps. Toute entrée?
La solution
Je vous suggère d'essayer les deux avec vos données sous cachegrind ou un autre profileur de cache? Cela pourrait être plus efficace que théoriser sur la localité spatiale, etc. En fonction des modèles d'accès de votre code, vous pouvez trouver des résultats surprenants.
Autres conseils
Nous ne disposons pas des détails importants, l'architecture cible pour commencer.
Les deux voies peuvent atteindre la même localité spatiale.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow