2013-06-27 15 views
6

質問g ++/std :: mutexでロック競合をプロファイルする方法は?

がどのオープンソースツールありますか誰がコードを実行するにstd::mutex競合の度合いをプロファイリングするための任意の技術/コードがありますか?

std::mutexインスタンスの粒度(時間または数のいずれか)でロック競合の割合をカウントしたいと思います。レコーディングを必要としないドロップインツールがあれば、それはさらに良いでしょう。

std::threadとg ++で動作するテクニックを探しています:アプリケーションの終了時に、mutexの競合統計情報のログファイルをログファイルにダンプして品質を監視したいのですが実際の実行コンテキストの下でコードをスレッド化する私はthis threadを見てきました

。残念なことに、答えは、現金を必要とするか、Windows上で実行する必要があります。

答えて

4

AMD CodeXLまたはIntel VTuneのようなものをお勧めします。 CodeXLは無料です。インテル®VTuneは、それに該当する場合は無料の学術ライセンスを持っているか、30日間のトライアルを試すことができます。どちらもLinuxで動作します。

最も基本的なレベルで、これらのツールは、たとえば、内部メソッドstd::mutexを費やしている時間を測定することによって、ホットスポットを識別できます。さらに高度な分析テクニック/ツールが各ツールに含まれており、さらに役立つ場合があります。コードをまったく変更する必要はありませんが、デバッグシンボルでコンパイルしたか、バイナリを削除していないかをチェックする必要があります。 -O3のような極端な最適化レベルから離して、-O1-O2または-Ogに固執することもできます。

PS:すべての最適化の問い合わせがするように、私はあなたがの最適化を開始する前に、あなたのパフォーマンスの問題が実際にある場所を常に測定にあなたを思い出させる必要があります。どのようなロックの競合があっても起こっていなくても緩和しようとすると、あなたはロック競合の心配はありません。

+0

'gprof'は(ビットが偏っていても)ほぼ同じ情報を与えませんか? – rubenvb

関連する問題