1

複数のプロセッサ アーキテクチャで実行し、プロセッサのパフォーマンスを分析して比較する目的で、シーケンシャルとマルチスレッドの 2 つのモードで実行するプログラムを作成しました。

それを行うのに役立つツールはありますか?? 実行時間を見つけ、スレッドとそのプリエンプションを追跡し、どのプロセッサがどのスレッドを実行したか (マルチコア システムの場合)、コンテキスト切り替えのオーバーヘッドなどを調べます。

gprof を使用したコード プロファイリングに関する基本的な知識は既に持っていますが、それだけでは不十分だと思います。同じアイデアでもっと強力なものを探しています!! 何か助けて??

4

1 に答える 1

1

実行時間、キャッシュの動作などに関する詳細情報を取得するには、さまざまなアプローチがあります。最初に安定したコンピューティング環境を作成してください。プロセッサの周波数をロックして、信頼できる測定値を取得します。たとえば、BIOS で Intel SpeedStep を無効にします。バックグラウンドプロセスなどを避けます。

低レベルのパフォーマンス カウンター:

  • 高解像度のカウンターを使用してコードを計測し、パフォーマンスを測定できます。パフォーマンス測定用の PAPI インターフェイスを見てみましょう。

高度なプロファイラー:

  • パフォーマンス、オープン ソース。Perf はサンプルベースの測定を行い、複数のスレッドを完全にサポートして、さまざまなプロファイリング情報を表示します。たとえば、Perf フレームグラフは、コード内のホットスポットの概要を非常によく示しています。
  • インテル VTune、コマーシャル。ハードウェア カウンター、スレッドごとのパフォーマンスなどからの詳細なキャッシュ統計が表示されます。データを解釈するには、ハードウェアに関するかなりの洞察が必要です。

上記のすべてで消費電力も測定できることに注意してください。

または、OS でスレッド切り替えのトレースを作成することにより、プログラムの動作を経時的に調べることができます。Eclipse の LTTng 統合をご覧ください。

並列処理を阻害する可能性のあるデータの依存関係、スレッドのオーバーヘッド、キャッシュの競合など、コードの実際の並列動作に関する詳細情報を確認したい場合は、Vector Fabrics の Pareon を参照してください (免責事項: 私は創設者の 1 人です)。ベクター生地の)。これはプロファイラーではなく、並列化のためのコード分析です。

于 2013-05-07T10:44:05.797 に答える