Производительность с использованием идентификаторов и массивов (векторов) - PullRequest
0 голосов
/ 17 января 2012

В школе меня учили использовать базу данных с целочисленными идентификаторами, и я хочу знать, является ли это также хорошим способом сделать это в C / C ++.Я делаю игру, используя Ogre3D, поэтому я хотел бы, чтобы мой игровой код использовал как можно меньше циклов.

Это не точный код (я использую векторы и речь идет о персонажах и способностяхи так далее), но мне любопытно знать, не вызовет ли узкое место строка, где я получаю доступ к весу, поскольку я делаю несколько подстрочных массивов.

struct item
{
    float weight;
    int mask;
    item(): mask(0) {}
}
items[2000];

struct shipment
{
    int item_ids[20];

}
shipments[10000];

struct order
{
    int shipment_ids[20];
}
orders[3000];

int main()
{
    // if I want to access an item's data of a certain order, I do:
    for (int i = 0; i < 3000; ++ i)
    {
        if (items[shipments[orders[4].shipment_ids[5]]].weight > 23.0)
            s |= (1<< 31);
    }
}

Я слышал, чторазмещение данных в массивах - это лучший способ повысить производительность при многократном циклическом повторении данных, я просто хочу узнать ваше мнение об этом коде ...

1 Ответ

0 голосов
/ 17 января 2012

Хороший оптимизатор должен быть в состоянии вычислить точное смещение адреса памяти каждого из этих элементов.Между итерациями цикла нет никакой зависимости, поэтому вы должны иметь возможность развернуть цикл (обработка SIMD).Отлично смотрится, ИМХО.Если вы можете избежать поплавков, это также поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...