【问题标题】:What are some (recommended) resources/book on learning C++ coding for efficient/performant math routines? [closed]关于学习 C++ 编码以实现高效/高性能数学例程的一些(推荐)资源/书籍是什么? [关闭]
【发布时间】:2012-11-23 10:04:19
【问题描述】:

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

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

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

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

【问题讨论】:

  • 优化的一般建议是:不要这样做!至少在你真正需要之前不会。在进行任何类型的优化之前进行测量、分析和测试。优化通常会使代码不可读且难以维护,因此应该是您在项目完成后做的最后一件事。
  • 是的,我完全承认这是一个建议,但在某些情况下,天真的实现似乎比优化后的代码慢 2 倍以上。这就是我想了解的,作为我问题的核心问题。
  • 当你发现你的代码太慢时使用分析器,我发现通过从事速度至关重要的工作,与“完成时间”并获得经验的人一起工作是主要的获得知识的方式。我从来没有真正找到任何好书 - 谷歌有东西,但编译和阅读它需要付出很多努力......我知道这听起来很弱,但这就是为什么它不是“答案”
  • 你的时间真的那么紧,加速 2 会有帮助吗?实时编程与其说是最快的,不如说是组织你的资源(包括时间)。 2 倍的加速在今天可能会有所帮助,但如果你有那么紧,那么输入数据大小的小幅增加将再次扼杀它。

标签: c++ performance math simulation numerical


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    相关资源
    最近更新 更多