3

我正在使用 callgrind/qcachegrind 分析一些信号处理代码,其中涉及许多操作std::vector<float>

我从 Mac OS 的内置nearbyint函数中得到了一个相当严重的热点。

在此处输入图像描述

这似乎几乎完全由这个向量函数调用。

在此处输入图像描述

这又是从我的许多类成员函数中调用的。对我来说,这_push_back_slow_path看起来像是一些分配瓶颈,但我不完全确定为什么。在运行循环中,我没有改变向量的大小。所有正在发生的事情,偶尔会通过引用复制它们,迭代,或者data()操作用于获取 vDSP 操作的原始指针。例如 。. .

在此处输入图像描述

  • vector当我将原始数据指针传递给 vDSP 函数时,为什么它是这个热点的罪魁祸首?
  • 这个热点的可能罪魁祸首是什么?
  • 为什么会basic_string出现?已分析的库不使用字符串。
  • std::array尽可能切换到是明智的下一步行动吗?

随时询问更多信息,我很乐意编辑问题。

编辑 1

作为对第一个答案的回应,我没有明确地push_back在任何地方打电话。热点出现在看似疯狂的地方,例如浮动上的内联日志操作。这可能是编译器优化做奇怪的事情吗?

在此处输入图像描述

4

0 回答 0