Почему игры не используют шаблоны выражений для математики? - PullRequest
1 голос
/ 26 февраля 2012

Я могу себе представить, что шаблоны выражений делают ужасные вещи, чтобы компилировать время для таких распространенных вещей, как векторы / матрицы / кватернионы и т. Д., Но если это такой большой прирост скорости, почему игры не используют его?Совершенно очевидно, что инструкции SIMD могут использовать параллелизм на уровне данных с большим эффектом.Шаблоны выражений и ленивая оценка вместе, кажется, имеют смысл, по крайней мере, когда речь идет об устранении временных.

Так что, хотя такие библиотеки, как Eigen, рекламируют такие функции, я не вижу, что это делается в промежуточном ПО (например, Havok) илиигры, где вещи чрезвычайно критичны по скорости.Может кто-нибудь пролить некоторый свет на это?Связано ли это с недетерминизмом или предсказанием ветвлений?

Ответы [ 2 ]

5 голосов
/ 26 февраля 2012

Я могу придумать множество причин:

  • это больно во время компиляции.Более длительное время компиляции означает, что тестирование любых изменений, внесенных в код, занимает больше времени.Это вредит производительности.
  • это сложно.Скорее всего, многие разработчики в команде не знакомы с шаблонами выражений, и им будет сложно читать и отлаживать их.
  • Игры часто должны работать на нескольких платформах с различными компиляторами, которые могут иметь широкий диапазониз недостатков, которые могут, например, усложнить продвинутую хитрость шаблона.
  • Как правило, это не нужно.Вы можете написать эффективный код без шаблонов выражений.Он становится более многословным, и вам придется больше держаться за компилятор.
  • Разработчики игр крайне скептически относятся ко всему, что еще не использовалось в играх 10 лет назад.Не так давно несколько крупных разработчиков придерживались C: не потому, что C ++ был недостаточно хорош, а потому, что он был «новым».Разработчики игр чертовски консервативны.

И, конечно, очевидный вопрос: где будут ли они использовать шаблоны выражений?Достаточно ли сложной математики, чтобы действительно сделать ее стоящей?Игры, как правило, полагаются на довольно небольшое количество операций линейной алгебры, которые в любом случае обычно настраиваются вручную.

0 голосов
/ 27 февраля 2012

Обычно части игры, которые чувствительны к производительности и тяжелы по математике и все еще имеют тенденцию работать на процессоре, а не на графическом процессоре, применяют одни и те же базовые операции к большому количеству элементов. Некоторые примеры: смешивание анимации, физические расчеты, тесты на видимость и т. Д.

Лучший подход к оптимизации такого рода проблем на текущем оборудовании консоли, как правило, состоит в том, чтобы попытаться собрать как можно больше совместной работы и стремиться к максимальной локальности данных, чтобы избежать дорогостоящих промахов кэша. Фактическая математика может быть затем оптимизирована с использованием встроенных SIMD и, как правило, будет тщательно оптимизирована вручную. Оптимизацию, которую предоставляют вам шаблоны выражений, можно выполнить относительно легко на этапе оптимизации рук, но есть и другие важные оптимизации, которые также могут быть выполнены, что шаблоны выражений вам не дадут. Часто этот критический код будет содержать разделы с пользовательскими оптимизациями для каждой целевой платформы и не будет очень переносимым.

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

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