Каких оптимизаций можно достичь на традиционном однопоточном игровом движке, таком как ioquake3 с OpenMP? - PullRequest
2 голосов
/ 21 ноября 2010

Можете ли вы придумать способы добиться значительного улучшения на традиционном движке, таком как id tech 3? Пытаясь сделать это в Audio Subsystem, я заметил, что это вызывает замедление, а не ускорение. Я подозреваю, что большие циклы данных должны рассчитываться в циклах и редко взаимодействовать с ядром.

Ответы [ 2 ]

2 голосов
/ 21 ноября 2010

Я ничего не знаю о ioquake3 или id tech 3, но довольно много об OpenMP, поэтому я задам вам вопрос.

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

В последнее время, с OpenMP 3.0, он имеет хорошие возможности для задач директора / работника.разложение, которое расширяет область его применения.У меня нет большого опыта работы с этими новыми функциями, но они выглядят многообещающе.

Итак, вопрос для вас: насколько хорошо ваше вычислительное ядро ​​соответствует модели вычислений, которую поддерживает OpenMP?

0 голосов
/ 03 декабря 2010

OpenMP очень эффективен при работе с данными, которые не зависят от других элементов в цикле.Например:

std::vector<int> big_vector(1000, 0);
for (int i = 0; i < big_vector.size(); ++i)
{
    big_vector[i] = i;
}

будет хорошо оптимизирован с OpenMP, но

std::vector<int> big_vector(1000, 0);
for (int i = 1; i < big_vector.size(); ++i)
{
    big_vector[i] = i * (big_vector[i - 1] + i);
}

не будет.

Вы также можете поиграть с настройками OpenMP, чтобы увидеть,улучшить свои результаты.Для получения дополнительной информации, http://www.amazon.com/Multi-Threaded-Engine-Design-Jonathan-Harbour/dp/1435454170 имеет целую главу об OpenMP (а также boost, posix-threads и Windows Threads).

...