关于学习C++编码以实现高效/高性能数学例程,有哪些(推荐的)资源/书籍

What are some (recommended) resources/book on learning C++ coding for efficient/performant math routines?

本文关键字:例程 书籍 资源 高性能 C++ 学习 于学习 编码 高效 实现      更新时间:2023-10-16

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

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

那么,有人能分享一份最适合这些场景的书籍或其他资源的简短列表吗?

附言:我的印象是,"C++中的数字配方……"或"科学家和工程师的C++……",或"科学计算的C++…"没有包含很多(如果有的话)关于这个问题的信息。

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

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

使用游戏编程书籍,而不是科学计算书籍作为指南。两者都会引用"数字配方",但游戏通常会使用较少的配方。

在出现性能问题之前不要进行优化。小函数总是可以更快、更不精确之后,您发现存在性能问题。探查器可以很容易地识别性能问题,但没有什么能自动发现准确性问题!一旦发现热点,使用库不应阻止您应用微优化。

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