c++ - 为什么游戏不使用数学表达式模板?

标签 c++ templates optimization game-engine expression-templates

我可以想象表达式模板会为 vector/矩阵/四元数等普遍存在的东西的编译时间做可怕的事情,但如果它的速度提升如此之大,为什么游戏不使用它呢?很明显,SIMD 指令可以充分利用数据级并行性,从而发挥巨大作用。表达式模板和惰性求值一起似乎很有意义,至少在消除临时变量方面是这样。

因此,虽然像 Eigen 这样的库宣传此类功能,但我认为在中间件(例如 Havok)或对速度要求极高的游戏中,这种做法并不常见。有人能解释一下吗?它与非确定性或分支预测有关吗?

最佳答案

我能想到很多原因:

  • 这会影响编译时间。编译时间越长意味着测试对代码所做的任何更改都需要更长的时间。这会损害生产力。
  • 这很复杂。团队中的许多开发人员很可能不熟悉表达式模板,并且很难阅读和调试它们。
  • 游戏通常必须在多个平台上运行,并且使用各种编译器,这些编译器可能存在各种各样的缺点,例如,这可能会导致高级模板欺骗出现问题。
  • 一般来说没有必要。您无需表达式模板即可编写高效的代码。它只会变得更加冗长,并且您必须为编译器做更多的操作。
  • 游戏开发者对 10 年前尚未在游戏中使用的任何内容都极为怀疑。不久前,几位主要开发人员坚持使用 C:不是因为 C++ 不够好,而是因为它"new"。游戏开发者非常保守。

当然,还有一个显而易见的问题:在哪里他们会使用表达式模板?是否有足够的复杂数学来真正使其值得?游戏往往依赖于相当少量的线性代数运算,在任何情况下通常都需要大量手动调整。

关于c++ - 为什么游戏不使用数学表达式模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9449877/

相关文章:

c++ - std::max,但用于模板参数

机会游戏的算法

mysql - 如何针对没有连接的查询优化 MySQL 服务器?

c++ - 无法在 C++ lambda 表达式中调用类成员函数

c++ - 从 C++ 应用程序启动 Linux 服务时避免套接字继承

c++ - 寻找插入 vector 的最佳位置

c++ - 指向成员变量和模板

html - 使用 html 在标题中使用自己的图标

matlab - 如何在matlab中比较两个图像中的所有补丁?

c++ - "Vorbis Extradata missing"尝试获取有关编解码器的流信息时