問題タブ [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.

0 投票する
1 に答える
281 参照

sse - インテル C コンパイラー (icc) での誤った自動ベクトル化

プログラム内の巨大なループを SSE でベクトル化する必要があります。時間を節約するために、ICC に任せることにしました。そのために、アラインメントを考慮してデータを適切に準備し、コンパイラ ディレクティブ #pragma simd#pragma aligned、を使用し#pragma ivdepます。いくつかのオプションを指定してコンパイルすると-vec-report、コンパイラーはループがベクトル化されたことを通知します。コンパイラによって生成されたアセンブリをざっと見てみると、パックされた単精度オペランド (シリアル コード ハンドラの浮動小数点オペランドのすべての演算) で動作するベクトル命令がたくさんあるので、それが確認できるようです。

問題は、PAPI でハードウェア カウンターを取得すると、取得する FP 操作の数 (PAPI_FP_INSおよびPAPI_FP_OPS) が、自動ベクトル化されたコードと元のコードでかなり同じになることです。 . さらに、関係する単純化された問題を手でベクトル化すると、この場合、FP 操作の 3 分の 1 のようなものを得ることができます。

誰かがこれに似たようなことを経験しましたか?

0 投票する
1 に答える
135 参照

c - すべてのコアに perfsuite を使用する

関数周辺のパフォーマンス カウンターを測定するために、perfsuite (内部的に papi を使用) を使用しようとしています。この関数は、コアごとに 1 つのスレッドを生成します。問題は、関数呼び出しの前にカウンターを開始し、呼び出し後にカウンターを停止すると、それらのカウンターの値が正しくないことです。ただし、関数がスレッドを作成しない場合は、正しい値が取得されます。

psrun は、実行可能ファイルのすべてのコアのカウンターを取得できることを知っています。しかし、実行可能ファイルではなく、関数呼び出しに同じ機能が必要です。

Debian で C からの papi 4.4.0 で perfsuite 1.1.1 を使用しています。

0 投票する
2 に答える
615 参照

c - x86 での単純な PAPI プロファイリングで予期しない多数の TLB ミスが発生する

PAPI 高レベル API を使用して、配列をループする単純なプログラムで TLB ミスをチェックしていますが、予想よりも大きな数が表示されます。

他の単純なテスト ケースでは、結果は非常に合理的であるように見えます。そのため、結果は本物であり、余分なミスはハードウェアのプリフェッチなどによるものだと思います。

誰かが数値を説明したり、PAPI の使用におけるエラーを指摘したりできますか?

印刷された数値は 32 の範囲、または少なくともその倍数であると予想しましたが、一貫して 93 以上の結果が得られます (一貫して 96 を超えるとは限りません。つまり、反復ごとに単純に 3 ミスするわけではありません)。他に何もないコアに固定して実行しています(タイマー割り込みを除く)。

私は Nehalem を使用しており、巨大なページを使用していないため、DTLB には 64 のエントリ (L2 には 512) があります。

0 投票する
0 に答える
524 参照

papi - PAPI を使用した Ivy Bridge でのイベント

Ivy PAPIBridge でのイベントについていくつか質問があります。

  1. SDM 表 19-5 (第 3 世代インテル® Core™ i7、i5、i3 プロセッサーのプロセッサー・コアにおける非アーキテクチャー・パフォーマンス・イベント) に基づくと、Ivy Bridge にはCYCLE_ACTIVITY.CYCLES_LDM_PENDINGCYCLE_ACTIVITY.CYCLES_L1D_PENDINGおよびという名前のカウンターがありCYCLE_ACTIVITY.CYCLES_L2_PENDINGます。しかし、 を試してみるとpapi_native_avail、これら 3 つだけでなく、 、 、 など、STALLSそれぞれに対応するイベントも取得されました。また、とイベントで別の数字も持っています。だから問題は、それらの違いは何ですか。CYCLE_ACTIVITY.STALLS_LDM_PENDINGCYCLE_ACTIVITY.STALLS_L1D_PENDINGCYCLE_ACTIVITY.STALLS_L2_PENDINGCYCLESSTALLS

  2. Intel 64 and IA-32 Architectures Optimization Reference Manual Appendix B.3.2.3 で言及されているすべてのイベントはSTALLSイベントであり、実際にはイベントではなく SDM で言及されていないため、この質問は上記の質問に関連していCYCLESます。問題は、それらがどうあるべきかということCYCLESですSTALLS。また、B.3.2.3 で述べたメモリ バウンドのキャラクタライゼーションを行うには、どれを使用すればよいですか?

  3. 上記の付録 B.3.2.3 には、メモリ サブシステムのさまざまなレベルの境界を計算する方法に関するいくつかの式があります。私が混乱していたことの 1 つは、上記の STALLS イベントを使用して測定を行ったときに、STALLS_L2_PENDINGよりも大きな数値が得られSTALLS_L1D_PENDINGたことですが、そのセクションには次の式があります。

%L2 Bound = (CYCLE_ACTIVITY.STALLS_L1D_PENDING - CYCLE_ACTIVITY.STALLS_L2_PENDING) / CLOCKS

これは私の測定が間違っているということですか?%L2 Boundそうでない場合、ゼロを超えるため、どのように計算できますか。

ソースコードは次のリンクにあります: https://github.com/yqzhang/SMTM/blob/master/native/native.c

誰かがこれで私を助けてくれますか?

0 投票する
3 に答える
1993 参照

c - PAPI とネイティブ イベント

PAPI イベントにマップされる一連のネイティブ イベント (CPU カウンター レジスタ) を見つけることは可能ですか?

0 投票する
1 に答える
245 参照

fortran - Fortran PAPIF_stop は常に 0 を読み取ります

PAPI API を使用してパフォーマンス カウンター値を読み取る単純なプログラムを fortran で作成しています。すべての API (PAPIF_start、PAPIF_stop など) はすべて正しく機能します (つまり、PAPI_OK を返します)。ただし、PAPIF_stop が読み取る値は常に 0 です。BG/Q で別のプロファイリング ソフトウェアを試して、これらの値が 0 にならないようにしました。これは、Fortran コードを作成する初めての試みです。したがって、私には明らかではないFortranの問題である可能性が非常に高いです。どんな助けにも感謝します。ありがとう!--DE

次のような別の関数からこれらのサブルーチンを呼び出しています。

私が得る出力は次のとおりです。