c++ - std::pow 的性能 - 缓存未命中?

标签 c++ caching profiling cpu

我一直在尝试优化我的一个数值程序,但遇到了一些谜团。我正在循环执行数千个浮点运算的代码,其中 1 次调用 pow - 尽管如此,该调用占用了 5% 的时间......这不一定是一个关键问题,但它是很奇怪,所以我想了解发生了什么。

当我分析缓存未命中时,VS.NET 2010RC 的分析器报告说几乎所有缓存未命中都发生在 std::pow 中……那么……这是怎么回事?有更快的选择吗?我尝试了 powf,但只是稍微快了一点;它仍然是异常数量的缓存未命中的原因。

为什么像 pow 这样的基本函数会导致缓存未命中?

编辑:这不是托管代码。 /Oi 内部函数已启用,但编译器可以选择忽略它。将 pow(x,y) 替换为 exp(y*log(x)) 具有相似的性能 - 只是现在所有缓存未命中都在日志函数中。

最佳答案

是的..它很慢。至于为什么要详细,其他有信心的人可以尝试解释一下。

想加快速度吗?这里:http://martin.ankerl.com/2007/10/04/optimized-pow-approximation-for-java-and-c-c/

关于c++ - std::pow 的性能 - 缓存未命中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2484337/

相关文章:

java - 分离 Yourkit session

java - 分析 Java Spring 应用程序

c++ - C++ 中的 Typedef 错误

c++ - 如何将用 C++ 编写的 Qt4 小部件实现到一些 Python 代码中?

java - 集群环境下的应用程序可以写缓存吗?

php - 使用 IIS8 输出缓存 .PHP 文件 - 第一个字节的时间

java - 对象可以在 OOP 中定义新的兄弟类或子类吗?为什么或者为什么不?

c++ - 在 Qt 中动态创建 QSlider 与关联的 QLCDNumber

android - React-Native 在 Android 上禁用图像缓存

c - 在 XCode 中分析 C 程序