私は、何千もの小さなテキストファイルをメモリに読み込み、データをstlコンテナに格納することから始まる、より大きなC++プログラムを持っています。これには約1分かかります。定期的に、コンパイルは、プログラムの最初の部分が約22〜23%のCPU負荷で実行される動作を示します。そのステップが終了すると、CPUは約100%に戻ります。O2フラグがオンになっていると発生する可能性が高くなりますが、一貫性はありません。-pフラグを使用すると、プロファイリングがほとんど不可能になるため、発生頻度はさらに低くなります。一度キャプチャしましたが、gprofの出力は役に立ちませんでした。CPU使用率が低い場合でも、すべてが同じ相対速度で実行されます。
これは複数のコアとは何の関係もないと私は確信しています。私はクアッドコアCPUを持っており、ほとんどのコードはマルチスレッドですが、シングルスレッドを実行してこの問題をテストしました。また、問題のあるステップを複数のスレッドで実行すると、各スレッドは最大20%のCPUでしか実行されません。
質問が曖昧であることを前もってお詫びしますが、それをさらにトラブルシューティングする方法についてのアイデアが不足しているので、ヒントが役立つかもしれません。
更新:明確にするために、コードの問題のある部分(コンパイルの約30〜40%)が100%CPUで実行されることがあるため、I /Oがボトルネック