为什么游戏不使用表达模板进行数学运算?

Lok*_*oko 2 c++ optimization templates game-engine expression-templates

我可以想象表达模板对于像向量/矩阵/四元数等普遍存在的事物的编译时间做了很多事情,但如果它是如此大的速度提升为什么游戏不使用呢?很明显,SIMD指令可以利用数据级并行性来产生很好的效果.表达模板和懒惰的评估似乎有意义,至少在消除临时性时.

因此,虽然像Eigen这样的图书馆会宣传这些功能,但我并不认为这在中间件(例如Havok)或事物速度极其重要的游戏中都会发生.任何人都可以对此有所了解吗?它与非确定性或分支预测有关吗?

jal*_*alf 5

我可以想到很多原因:

  • 它会伤害编译时间.更长的编译时间意味着测试您对代码所做的任何更改都需要更长的时间.它会伤害生产力.
  • 这很复杂.最有可能的是,团队中的许多开发人员不熟悉表达式模板,并且很难阅读和调试它们.
  • 游戏通常必须在多个平台上工作,各种编译器可能具有各种缺点,例如可能使高级模板技巧成为问题.
  • 通常没有必要.您可以编写没有表达式模板的高效代码.它只是变得更加冗长,你必须为编译器做更多的手持操作.
  • 游戏开发者对10年前尚未在游戏中使用的任何内容持怀疑态度.不久前,几位主要开发人员坚持C:不是因为C++不够好,而是因为它是"新的".游戏开发者很保守.

当然,显而易见的问题是:他们在哪里使用表达模板?有足够的复杂数学来真正让它变得有价值吗?游戏往往依赖于相当少量的线性代数运算,在任何情况下通常都会进行大量的手动调整.

  • 10年可能会有点多,他们会好多了; 今年的大多数主要版本都是使用MSVC 2005构建的.:P (3认同)
  • 不过,我不只是在谈论编译器版本,还包括语言和语言功能的选择。可以使用现代 C++ 编译器来编写 C 或一些与类差不多的 C。 (2认同)