問題タブ [papi]
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.
c++ - PAPI をリンクするときにエラーが発生する
Arch Linux x86_64 で、PAPI 5.4.3.0 ライブラリを使用するプロジェクトをビルドしようとしています。
簡単にするために、これらの 2 つのファイルで理解できないことを再現しました。
A.cpp
B.cpp
それを(オブジェクトファイルに)コンパイルすると、次のようになります。
-pedanticフラグでエラーが発生するのに、警告が発生しないのはなぜですか?(2)
3回目の実行で何も発生しないのはなぜですか(インクルードを切り替えるだけです)?
c - 命令キャッシュ アクセス (PAPI)
現在、PAPI を使用していくつかのコードのベンチマークを行っています。
私が取得したプリセット値の 1 つは、PAPI_L1_ICA、つまり L1 命令キャッシュに対して実行される命令キャッシュ アクセスの量です。
私が見る限り、アルゴリズムと PAPI_L1_ICA の実行時間は多かれ少なかれ同等であるように見えるため、コードはこれに支配されていますが、分岐予測ミス、キャッシュミス、tlb ミス、CPU 命令などの他のメトリックは通常そうです。実行時間の動作を説明しません。
私の質問は、L1 命令キャッシュ アクセスをトリガーするアクションを定義するものは何ですか? 私の測定では、アクセスは 150.000 のオーダーですが、たとえば完了した命令 PAPI_TOT_INS の量は約 10.000 にすぎません。それらは幾分平等であるべきではありませんか?
python - COMPS トレース エラーの修正: スレッド X evtset X の PAPI_read が失敗しました (papi_hwc.c:*)
トレース システム (extrae) を有効にして COMPS を実行しようとしています。最初にインストールの問題がありましたが、この質問のおかげで解決しました:
libpapi.so.* を修正するには、(py)COMPS をトレースで実行しているときに共有オブジェクト ファイルを開けませんか?
ただし、現在、新しい PAPI の問題に直面しています。COMPS ランタイムは正しくロードされているようですが、Extrae は次のエラーを報告します。
私が得るエラーにもかかわらず:
しかし、ランタイムを開始した後、これを無限ループで取得します。
ハードウェア PAPI カウンターがない場合でもトレースを取得できるようにしたいと考えています。それらを無効にするか、エラーを修正するにはどうすればよいですか?
c++11 - C++11 std:thread で PAPI を使用するには?
std::thread
PAPI を使用して、プログラム内のすべての C++11 スレッドの全体的なカウンターを取得したいと考えています。
Threads に関する PAPI ドキュメントには、次のように記載されています。
PAPI ライブラリのスレッド サポートは、C で次の低レベル関数を呼び出すことによって初期化できます。
int PAPI_thread_init(unsigned long(*handle)(void));
ハンドルがあるところ
現在のスレッド ID を unsigned long として返すルーチンへのポインター。
たとえば、pthread の場合、ハンドルはpthread_self
です。しかし、 C++11 ではどうあるべきかわかりませんstd::thread
。また、PAPI とは異なるものを使用する方が理にかなっている場合も同様です。
c++ - Perf と Papi が L3 キャッシュ参照とミスに異なる値を与えるのはなぜですか?
私は、理論的にキャッシュフレンドリーであることが証明されているアルゴリズムを実装する必要があるプロジェクトに取り組んでいます。簡単に言えば、N
が入力で、B
がキャッシュ ミスのたびにキャッシュと RAM の間で転送される要素の数である場合、アルゴリズムはO(N/B)
RAM へのアクセスを必要とします。
これが実際の動作であることを示したいと思います。さまざまなキャッシュ関連のハードウェア カウンターを測定する方法をよりよく理解するために、さまざまなツールを使用することにしました。1 つはPerfで、もう1 つはPAPIライブラリです。残念ながら、これらのツールを使用すればするほど、それらが何をするのか正確に理解できなくなります。
Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz、8 GB の RAM、L1 キャッシュ 256 KB、L2 キャッシュ 1 MB、L3 キャッシュ 6 MB を使用しています。キャッシュ ラインのサイズは 64 バイトです。それはブロックのサイズに違いないと思いますB
。
次の例を見てみましょう。
各ノードには 8 バイトが必要です。つまり、1 つのキャッシュ ラインは 8 つのノードに適合できるため、1000000/8 = 125000
L3 キャッシュ ミスはおおよそ予想されます。
最適化を行わない場合 (no -O3
)、これは perf からの出力です。
これは、私たちが期待するものにかなり近いものです。ここで、PAPI ライブラリを使用するとします。
これは私が得る出力です:
2 つのツールに大きな違いがあるのはなぜですか?
performancecounter - メインメモリ上の特定のメモリアドレスに発生した読み取り/書き込みの数をカウントします
メモリアドレスを入力として受け取り、メインメモリ上のそれらのメモリアドレスに発生した読み取り/書き込みの数をカウントするツールを開発したいと考えています。
それを達成するのに役立つツール (PAPI、Perfmon2 など) はありますか?
ありがとうございました
papi - papi を使用して実行中のプロセスのパフォーマンス カウンターを監視する
PAPI を使用して、既に実行中のプロセスのハードウェア カウンターを監視するにはどうすればよいですか?
どんな助けでも大歓迎です。
ありがとうシュジャ
c - papi attach を使用してパフォーマンス カウンタの値がゼロを返す
PAPI を使用してハードウェア パフォーマンス カウンターを読み取ろうとしており、次のコードを記述しました。
次のコマンドを使用してコンパイルします。
そして、私はそれを次のように実行します:
ここで、7865 は実行中のプロセスのプロセス ID です。
問題は、カウンター値を表示する代わりにゼロ値を表示していることです。
なぜこのような動作をしているのか、誰か教えてもらえますか? 値が取得されないのはなぜですか?