关于学习C++编码以实现高效/高性能数学例程,有哪些(推荐的)资源/书籍
What are some (recommended) resources/book on learning C++ coding for efficient/performant math routines?
我想开始学习和理解什么和何时在用于实时模拟(尤其是游戏)的代码中进行优化。有各种各样的代码片段,大多数是将标准的trig或sqrt函数与其优化版本进行比较。有些需要汇编,有些依赖于特定于体系结构的策略,有些则使用纯数学技巧(如查找表或近似函数)。每一个版本都声称速度更快,精度成本很低。
据我所知,没有经过编译的材料(例如一本书)来解释可以做什么,包括基础知识(没有人知道汇编、SSE、SIMD、MMX、FPU等),很多书都是关于如何实现一些数值方法的(这类书很好,但它们并没有强调快速tid的重要性,因为这些书中的绝大多数甚至没有从开发人员的角度包括特定于体系结构的代码或浮点讨论)。
那么,有人能分享一份最适合这些场景的书籍或其他资源的简短列表吗?
附言:我的印象是,"C++中的数字配方……"或"科学家和工程师的C++……",或"科学计算的C++…"没有包含很多(如果有的话)关于这个问题的信息。
"模拟器"通常是一个复杂的程序,对预设的初始数据进行结构化分析,其性能更多地取决于算法和问题参数化的选择,而不是sqrt
的速度。数值方法或科学计算书籍的读者更感兴趣的是更快地收敛,而不是更快地平方根。牺牲精度通常是一场危险的赌博。
游戏通常需要将一组代表动态游戏状态的数据从一帧投影到下一帧。没有收敛的概念,"闭合形式"的方程被应用于根据需要推进状态。
使用游戏编程书籍,而不是科学计算书籍作为指南。两者都会引用"数字配方",但游戏通常会使用较少的配方。
在出现性能问题之前不要进行优化。小函数总是可以更快、更不精确。之后,您发现存在性能问题。探查器可以很容易地识别性能问题,但没有什么能自动发现准确性问题!一旦发现热点,使用库不应阻止您应用微优化。
我一直在使用C++特征代数库,发现它对几何非常友好和快速。我在学科学,但它也非常适合游戏。所有东西都是一个平面数组,当内置运算符不令人满意时,你可以用C或C++(或汇编,但真正的程序员只是让编译器输出他们想要的汇编)来操作它。
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- c++类声明时,相同的例程,不同的成员变量类型
- C++为线程工作动态地分割例程
- 子例程,不使用 pow,并带有参数和返回
- 直接在RcppArmadillo中调用LAPACK例程
- 如何将C++子例程链接到 x86 程序集程序?
- PX 转换例程编译问题
- 成功完成TLS握手后,服务器关闭时出现错误的SSL例程:SSL3_GET_RECORD:错误的版本号
- 只允许授权代码调用库中的例程
- JNI 不满意链接错误: 动态链接库 (DLL) 初始化例程失败
- 调用子例程时类型不匹配
- 将分配给C++数组传递给 Fortran 子例程
- Android Studio 3.1.2 - 无法运行C++子例程"No implementation found for Java.lang.String..."
- Posix 线程类和启动例程 (pthread)
- OpenBLAS 只为一个例程设置线程数
- 检查并行化 BLAS 例程的结果
- 我们应该测量例程的平均执行时间还是最小执行时间?
- 试图在C 中调用Fortran子例程
- C++ 我的函数在我的 Image 类中工作,但不在主例程中工作
- 关于学习C++编码以实现高效/高性能数学例程,有哪些(推荐的)资源/书籍