Какая структура имеет лучшую пространственную локализацию? - PullRequest
0 голосов
/ 27 ноября 2010
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 голосов
/ 28 ноября 2010

Могу ли я предложить попробовать оба варианта с вашим набором данных в разделе cachegrind или каким-либо другим профилировщиком кэша?Это может быть более эффективным, чем теоретизирование о пространственной локальности и т. Д. В зависимости от шаблонов доступа вашего кода вы можете получить некоторые неожиданные результаты.

0 голосов
/ 27 ноября 2010

Нам не хватает важных деталей, целевая архитектура для начала.

Оба пути могут достичь одной и той же пространственной локализации.

...