有哪些(推荐)资源/书有关学习C ++编码的高效/高性能数学例程?

时间:2012-11-23 10:04:19

标签: c++ performance math simulation numerical

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

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

那么,有人可以分享一份最适合这些情景的书籍或其他资源清单吗?

PS:我的印象是“C ++中的数字配方......”或“C ++ for Scientists and Engineers ..”或“C ++ for Scientific Computing ...”中没有包含很多(如果有的话)信息问题。

1 个答案:

答案 0 :(得分:2)

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

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

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

在已经存在性能问题之前不要进行优化。 后发现性能问题,可以使得小功能更快,更精确。分析器可以轻松识别性能问题,但没有任何东西会自动找到准确性问题!使用库不应该阻止您在识别出热点后应用微优化。

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