As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center作为指导。
                            
                        
                    
                
                                7年前关闭。
            
                    
我想开始学习和理解在实时仿真(尤其是游戏)中需要进行优化的代码的时间和内容。那里有各种各样的代码片段,大多数将标准的trig或sqrt函数与其优化版本进行了比较。有些需要汇编,有些则依赖于体系结构特定的策略,而有些则利用纯数学技巧(例如查找表或逼近函数)。每种版本声称速度更快,而花费的成本却很小。

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

因此,有人可以分享一小段最适合这些情况的书籍或其他资源吗?

附注:我给人的印象是“ C ++的数字配方”或“科学家和工程师的C ++”或“科学计算的C ++”没有包含很多(如有)有关此问题的信息。

最佳答案

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

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

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

在性能出现问题之前,请不要进行优化。发现性能问题后,小功能总是可以更快,更不精确。探查器可以轻松识别性能问题,但是不会自动发现准确性问题!一旦确定了热点,使用库就不会阻止您应用微优化。

我一直在使用C ++ Eigen代数库,发现它对于几何图形非常友好且快速。我在做科学,但是它也非常适合游戏。当内置运算符不令人满意时,所有内容都是一个平面数组,您可以使用C或C ++(或程序集,但Real Programmers只是使编译器输出所需的程序集)进行操作。

关于c++ - 有哪些(推荐的)资源/书籍可以学习有关C++编码的高效/高性能数学例程? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13526784/

10-11 16:54