C++ で記述した高度に並列化されたプログラムがあり、それを高速化しようとしています。明らかな変更を行った後、コードのプロファイルを作成して、どこに時間が費やされているか、どこに集中して最適化する必要があるかを確認したいと思います。ただし、コードをプロファイリングする良い方法が見つからないように見えるという点で、ちょっとした問題に遭遇しました。
もともと OProfile を利用したかったのですが、カーネル ソースがこのマシンにインストールされておらず、カーネルが古すぎてプロファイリング サポートが組み込まれていないようです。その後、gprof の使用を検討しましたが、マルチスレッド コードをうまく処理できないことがわかりました。最終的に gperftools に落ち着きましたが、これはうまく機能しますが、スタック フレームをサンプリングするため、機能レベルしか得られないようです。私のコードの時間使用に関する情報。私の時間 (つまり、サンプリングされた時間) の 50% 以上が 1 つの関数に費やされていることがわかります。ただし、さらにドリルダウンして、その関数/命令のどの領域に多くの時間がかかっているかを確認したいと思います。ただし、gperftools でこの情報を提供する方法がわかりません。また、(root 権限なしで使用/インストールできる) 他のプロファイリング ツールを認識していません。どんな提案でも大歓迎です。