Влияет ли это распределение на скорость? - PullRequest
0 голосов
/ 09 октября 2019

Эта функция, не являющаяся членом drawPoly(), рисует n-сторонний многоугольник в трехмерном пространстве из списка вершин.

Эта функция обычно вызывается тысячи раз при нормальном выполнении, и скорость критична.

Игнорируя эффекты функций, вызываемых в drawPoly(), оказывает ли распределение массива вершин из 25 элементов какое-либо негативное влияние на скорость?

void drawPoly(const meshx::Face& face, gen::Vector position,
    ALLEGRO_COLOR color, bool filled)
{
    ALLEGRO_VERTEX vertList[25];
    std::size_t k = 0;

    // ...For every vertex in the polygon...
    for(; k < face.getNumVerts(); ++k) {
        vertList[k].x = position.x + face.alVerts[k].x;
        vertList[k].y = position.y + face.alVerts[k].y;
        vertList[k].z = position.z + face.alVerts[k].z;
        vertList[k].u = 0;
        vertList[k].v = 0;
        vertList[k].color = color;
    }
    // Draw with ALLEGRO_VERTEXs and no textures.
    if(filled) {
        al_draw_prim(vertList, nullptr, nullptr,
            0, k, ALLEGRO_PRIM_TRIANGLE_LIST);
    } else {
        al_draw_prim(vertList, nullptr, nullptr,
            0, k, ALLEGRO_PRIM_LINE_LOOP);
    }
}

1 Ответ

1 голос
/ 10 октября 2019

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

Учитывая, что выделение в стеке тривиально конструируемых объектов обычно приводит к простому изменению указателя стека, само выделение, вероятно, будетне имеет большого значения. То, что может иметь жесткий видимый эффект, это прикосновение к дополнительным строкам кэша. Чем меньше строк кэша пишет код, тем лучше с точки зрения производительности. Поэтому вы можете поэкспериментировать с разбиением vertList[25] на массивы размером с строку кэша и многократным вызовом al_draw_prim. Тест показал бы, если есть разница.

...