0

我想开始学习和理解在用于实时模拟(尤其是游戏)的代码中优化什么以及何时优化。那里有各种代码片段,大多数将标准 trig 或 sqrt 函数与其优化版本进行比较。有些需要组装,有些则依赖于架构特定的策略,有些则使用纯数学技巧(例如查找表或近似函数)。每个版本都声称速度更快,但精度成本较低。

据我所知,没有汇编材料(例如一本书)解释可以做什么,包括基础知识(没有人知道汇编、SSE、SIMD、MMX、FPU 等)。然而,有大量的书籍旨在如何实现一些数值方法(这些书籍很好,但它们并没有强调快速花絮的重要性,因为这些书籍中的绝大多数甚至不包含特定于架构的代码或从开发人员的角度进行浮点讨论)。

那么,任何人都可以分享最适合这些场景的书籍或其他资源的简短列表吗?

PS:我的印象是“C++ 中的数字食谱..”或“科学家和工程师的 C++..”或“科学计算的 C++..”没有包含很多(如果有的话)关于这个问题的信息。

4

1 回答 1

2

“模拟器”通常是一个复杂的程序,对预设的初始数据进行结构化分析,其性能更多地取决于算法的选择和问题参数化,而不是速度sqrt。数值方法或科学计算书籍的读者对收敛速度比平方根更快更感兴趣。牺牲精度通常代表着一场危险的赌博。

游戏通常需要将一组表示动态游戏状态的数据从一帧投影到下一帧。没有收敛的概念,根据需要应用“封闭形式”方程来推进状态。

使用游戏编程书籍,而不是科学计算书籍作为指南。两者都将引用“数字食谱”,但游戏通常会使用较少。

在已经存在性能问题之前不要进行优化。在您发现存在性能问题,总是可以使小函数变得更快、更不精确。分析器可以轻松识别性能问题,但不会自动发现准确性问题!一旦识别出热点,使用库不应阻止您应用微优化。

我一直在使用 C++ Eigen 代数库,发现它对几何非常友好和快速。我在做科学,但它也非常适合游戏。一切都是一个平面数组,当内置运算符不满意时,您可以使用 C 或 C++(或程序集,但真正的程序员只是让编译器输出他们想要的程序集)来操作它。

于 2012-11-23T10:31:14.877 回答