問題タブ [oprofile]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - oprofile バイナリー・ビルド・エラー - (liberty ライブラリーが見つかりません)
私のホスト (Ubuntu 15.04) に oprofile ソース コードをダウンロードした後、何らかの理由で、独自のバイナリをビルドする必要があります。
次のコマンドを入力してバイナリをビルドします
そして、エラーメッセージを受け取りました
このエラーの修正を検索すると、パッケージをインストールする必要があることがわかりました。
ただし、パッケージが正常にインストールされているにもかかわらず、同じエラーが引き続き表示されます。
確認できることはありますか?
ありがとう
parallel-processing - OProfile with OpenMP
I am using OProfile for OpenMP parallelized code by doing the following,
How do I know if the events are counted per CPU or as a whole? I am pretty sure its as a whole as they are close to the numbers if I compiled without OpenMP, but I want to be sure.
powerpc - Power8 での PM_DATA_ALL* イベントと PM_DATA* イベントの違いは何ですか?
を使用して Power8 プロセッサのメモリ パフォーマンスを評価しているときに、イベントとperf
の違いを理解するという問題が発生しました。ほとんどのカウンターは両方のバージョンに存在しますが、oprofile のドキュメントとの説明は同じです。たとえば、次のようになります。PM_DATA_ALL_*
PM_DATA_*
papi_native_avail
PM_DATA_FROM_LMEM
MMCR1[16] が 1 の場合、デマンド ロードのみ、またはデマンド ロードとプリフェッチにより、プロセッサのデータ キャッシュがローカル チップのメモリからリロードされました。
私はいくつかのデータを測定することによって違いを理解します. 十分な大きさのタスクを提供すると、*_ALL
バージョンがより高い値を持つという予想される違いを観察できます。を使用したメジャーでのカウンターの多重化の概念を理解していperf
ます。
では、実際にこれらのイベントのすべてとは何でしょうか?
performance - oprofile - ocount / operf を使用 - LLC ミスの問題 100%
ホスト: Ubuntu 15.04
oprofile バージョン: 1.1.0
CPU: インテル XEON D-1520
1.
結果は次のとおりです。
LLC_MISSES
とはLLC_REFS
同じで、キャッシュ欠落率が 100% であることを意味します。なぜこれが起こるのですか?私には間違っているように見えます。
そして、私operf
はテストを行うために使用します:
L1D
比較的公正です。ただし、キャッシュ ミス率は、100%LLC ( Last Level Cache )
と同じです。ocount
根本的な原因を見つけられませんでした。これを修正する理由または方法を知っている場合は、経験を共有してください.
ありがとう
linux-kernel - システムプロファイリング - 共有ライブラリの使用情報
一定時間内にどのライブラリファイルがどのプロセス (またはプロセスの数) によって使用されているかを知る方法はありますか?
V-Tune、perf、または OProfile を使用できますか?
c - 低速ループの最適化
コードは次のようになり、内側のループには膨大な時間がかかります。
oprofile は、実行時間のほとんどがここで費やされていることを示しています (2 番目の列は時間の % です)。
私の最初の質問は、コードが遅い適切な場所を示すために oprofile に頼ることができますか (-Og と -Ofast で試しましたが、基本的に同じです)。
2 番目の質問は、この非常に単純なループが sqrt、atan2、およびその前にある数百行の計算よりも遅いのはなぜですか? すべてのコードを表示しているわけではないことはわかっていますが、コードがたくさんあり、意味がわかりません。
ベクトル化(機能しない)またはアンロール(機能する)するためにさまざまなオプティマイザーのトリックを試しましたが、ほとんど得られませんでした。たとえば、次のようになります。
オプティマイザの出力を確認しました: "-Ofast -g -march=native -fopt-info-all=missed.info -funroll-loops" この場合、"loop unrolled 9 times" が表示されますが、ベクトル化しようとすると、(要するに)次のようになります。 ) _1328 + (long unsigned int) (n_bol_1173 * 500) * 2) * 4)"
これをスピードアップする方法はありますか?
補遺:コメントをありがとう、私はここで答えようとします:
- はい、私はコードが醜いことを知っています (それは私のものではありません)。
- Cコードがライブラリにあり、Cによって処理および変更されると大きな配列が呼び出し元(IDL、Python、またはC)に渡されるため、私はこの配列にこだわっています。
- char* を複雑な多次元の double* にキャストする代わりに、いくつかの構造体を使用する方がよいことはわかっていますが、上記を参照してください。このプログラムが最初に作成されたとき、構造体は C 仕様の一部ではなかった可能性があります (冗談です... 多分)
- ベクトライザーの場合、構造体の配列よりも配列の構造体の方が良いことはわかっていますが、ため息...上記を参照してください。
- (呼び出しプログラム内に) 実際の外部ループがあるため、このモノリシック配列の合計サイズは約 2Gb です。
- 現状では、最適化なしで実行するのに約 15 分かかり、いくつかのコードを書き直してから 1 分後 (atan2 の高速化、配列内の手動整列など)、-Ofast と -march=native を使用しました。
- ハードウェアの制約が変更されたため、データフローに追いつくために高速化を試みています。
- Clang を試してみたところ、ゲインはわずか (数秒) でしたが、-fopt-info などの最適化レポートを取得するオプションが表示されません。何が起こっているのかを知る唯一のオプションとしてアセンブリを見る必要がありますか?
- システムは 500Gb の RAM を備えた猛烈な 64 コアですが、上記のコードを並列化するための OpenMP プラグマを挿入することはできませんでした (私は試しました): ファイルを読み取り、メモリ内で完全に解凍します (2Gb) 、それを順番に分析し (「+=」など)、呼び出し元の IDL/Python にいくつかの結果を吐き出します。すべてが単一のコア上にあります (ただし、他のコアは実際の取得と後処理でかなりビジーです)。:(
- 役に立たない、素晴らしい提案をありがとう: ddQ += ... を削除すると、時間の割合が前の行に転送されるようです: 376280 39.4835:ddI+=...
- これにより、さらに良い結果が得られます。両方を削除すると(したがってループ全体が)保存されます...何もありません!!! ピーターが言ったように、私はプロファイラーを信用できないと思います。ループレス プログラムをプロファイリングすると、タイミングがより均等に分散されます (以前は 1 秒を超える 3 行だけでしたが、現在は約 10 行で、単純な変数の割り当てのようにすべて無意味です)。
内側のループは最初からニシンだったと思います。手動タイミングを使用して最適化を再開します。ありがとう。
linux-kernel - vmlinux にシンボルがありません
oprofile
というラベルを付けるのではなく、カーネル内で何が起こっているかについての詳細情報を表示する必要があります/no-vmlinux
。
oprofile
カーネル シンボルを提供できるようにするために、圧縮バージョンから入手extract_vmlinux
できるスクリプトを使用しました。/usr/src/linux-headers-3.9.7/scripts
vmlinux
vmlinuz
次にoperf
、オプションで呼び出しました--vmlinux path_to_vmlinux
。ただし、operf
次のエラー メッセージが表示されます。
vmlinux 終了アドレスを取得できません 指定された vmlinux ファイル (/tmp/vmlinux) が有効ではないようです。圧縮されていないイメージ ファイルを使用していることを確認してください (例: vmlinux ではなく vmlinuz)。
のコードでこのエラー メッセージをたどることでoperf
、呼び出し後に発生する可能性が最も高いことがわかりましたobjdump -t
(オプション -t は、objdump のマンページによると、「ファイルのシンボル テーブル エントリを出力します。」)。objdump -t vmlinux
"、次の出力が得られます。
手伝っていただけませんか?
linux - oProfile の使用中に 1 つの CPU コアを指定できますか?
oProfile を使用して 8 コア サーバーでパフォーマンス カウンター分析を行う必要があります。oProfile はコア 7 でのみイベントを記録できますか? ありがとうございました!