我有一个更大的 C++ 程序,它首先将数千个小文本文件读入内存并将数据存储在 stl 容器中。这大约需要一分钟。定期地,编译会表现出程序的初始部分将以大约 22-23% 的 CPU 负载运行的行为。一旦该步骤结束,它会回到 ~100% CPU。O2 标志打开但不一致时更有可能发生这种情况。使用 -p 标志的情况更少发生,这使得几乎不可能进行分析。我确实捕获了一次,但 gprof 输出没有帮助 - 一切都以相同的相对速度运行,只是在 cpu 使用率低的情况下。
我很确定这与多核无关。我确实有一个四核 cpu,并且大部分代码都是多线程的,但我在运行单线程时测试了这个问题。此外,当我在多个线程中运行有问题的步骤时,每个线程仅以约 20% 的 CPU 运行。
对于这个问题的含糊之处,我提前道歉,但我已经没有关于如何进一步解决它的想法,所以任何提示都可能会有所帮助。
更新:为了确保清楚,代码的有问题的部分有时(大约 30-40% 的编译)运行在 100% 的 CPU 上,所以很难相信 I/O 是瓶颈