問題タブ [intel-vtune]

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 投票する
2 に答える
1735 参照

java - SSE コードの最適化

私は現在、パフォーマンスの改善が必要な Java アプリケーション用の C モジュールを開発しています (背景については、ネットワーク コーディング エンコーディングのパフォーマンスの改善を参照してください)。SSE-intrinsics を使用してコードを最適化しようとしましたが、Java バージョンよりもいくらか高速に実行されます (~20%)。ただし、まだ十分な速さではありません。

残念ながら、C コードの最適化に関する私の経験は多少限られています。したがって、現在の実装を改善する方法についていくつかのアイデアを得たいと思っています。

ホットスポットを構成する内側のループは次のようになります。

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

optimization - プロファイリングでは、ほとんどの時間が nvoglv64.dll に費やされます。何を推測すればよいですか?

インテル VTune Amplifier を使用して C++ アプリケーションをプロファイリングしています。ほとんどの時間は nvoglv64.dll で、より正確には DrvPresentBuffers および/または KeSynchoronizeExecution で費やされているようです。NVIDA GeoForce グラフィック カードがあることに注意してください。

私は、プロファイリングを行っているアプリケーションを初めて使用し、最適化のボトルネックとぶら下がっている成果を探しています。ほとんどの時間がこの NVIDIA dll に費やされているように見えるため、プロファイリング結果をどのようにデコードするかはわかりません。

アプリケーションの知識を構築するために、アプリケーション側からこれらの呼び出しがどこにあるかを知りたいです。誰かが開始するためのヒントを教えてくれますか:

  • アプリケーションがDrvPresentBuffersを正確に呼び出す場合、どのような呼び出しを確認する必要がありますか(アプリケーション側で)
  • グラフィック カードの dll にボトルネックがあるアプリケーションのプロファイリング、理解、最適化の方法に関する詳細情報はどこで入手できますか?
0 投票する
1 に答える
431 参照

performance - OpenMP、VTune、アイドル スレッド

VTune を使用してコードの同時実行性をチェックしています。出力のスクリーンショットを次に示しますスレッドが 1 つの初期期間があり、その後約 0.3 秒の集中的なマルチスレッド作業 (茶色のスパイク) と、約 3 秒のアイドル状態 (茶色の「CPU」はなく、緑色の「実行中」のみ) があることがわかります。

スレッドがグリーンアイドル状態になる原因は何ですか? 私のコードは、集中的な計算をすべて実行した後に返されるはずです。さらに 3 秒待つ必要はありません...

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

mingw - Vtune アナライザーと mingw

単純な C++ テスト アプリケーションをコンパイルするために、64 ビット プラットフォーム用の MinGW を使用しています。

-g3 フラグを使用すると、test.exe にはプロファイリングに必要なすべてのシンボル情報が含まれるようになります...これは正しいですか?

VTune Amplifyer XE でホットスポット解析を行うと、次のようなコールスタックが表示されます。

これらの項目のいずれかをクリックすると、アセンブリ コードが表示され、一番上の要素については、「ソースとアセンブリ コードを表示できませんでした」と表示されます。

VTune プロジェクト設定でソース コード/バイナリ ディレクトリを指定しても、これは変わりません。

より有意義な結果を得るには、プログラムをコンパイルするか、VTune を設定する方法を教えてください。

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

ios - 大規模な関数で Time Profiler Instrument をより効果的にする方法はありますか?

現在、Xcode の Time Profiler Instrument for iOS を使用しています。1つの関数は非常に大きいです。はい、それをはるかに小さなインラインのものに分割すると、はるかにインテリジェントになります。しかし、スタック レベルを偽装する方法や、計測器にそのような大きな関数を処理させて、実際に遅い部分を特定しやすくする方法はありますか?

AMD Code Analyst と Intel VTune では、関数のグラフを表示できるため、速度が低下しているさまざまな領域を特定できます。基本的に、iOS デバイス用の Xcode に相当するものがあるかどうか疑問に思っています。

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

c - メモリーにバインドされたデータに対するループ展開の影響

私は集中的にメモリにバインドされているコードを扱ってきました。キャッシュ ブロック、sw プリフェッチ、ループ展開などを手動で実装することにより、シングル コア内で最適化しようとしています。キャッシュ ブロックによってパフォーマンスが大幅に向上しますが。ただし、ループ展開を導入すると、パフォーマンスが大幅に低下します。

すべてのテスト ケースで、コンパイラ フラグ -O2 および -ipo を使用して Intel icc でコンパイルしています。

私のコードはこれに似ています(3D 25ポイントステンシル):

最も内側のループ (次元 i) でループ展開を行い、x、y、z 方向にそれぞれ展開係数 2、4、8 で展開すると、9 つのケースすべてでパフォーマンスが低下します。つまり、方向 x で 2 ずつ展開し、展開します。 y 方向に 2 ずつ展開、z 方向に 2 展開、x 方向に 4 展開 ... など。キャッシュのブロックよりも優れた v.good パフォーマンスの向上を実現します。

Intel Vtune を使用してコードのプロファイリングも試みました。リモート DRAM によってサービスされる 1.LLC ミスと 2.LLC ロード ミスが主な原因のボトルネックのように見えました。

最も内側の最速のループを展開するとパフォーマンスが低下するのに、最も外側の最も遅い次元を展開するとパフォーマンスが向上する理由を理解できません。ただし、後者の場合のこの改善は、icc でコンパイルするときに -O2 と -ipo を使用した場合です。

これらの統計の解釈方法がわかりません。誰かがこれに光を当てるのを助けることができますか.

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

c - バイナリ全体ではなく、バイナリ内の特定のコードスニペットでvtuneを使用することは可能ですか?

小さなライブラリの使用法を既存の大きなソフトウェアに追加し、オーバーヘッドとそれが小さなライブラリの属性であることを分析したいと思います(rdtsc()やgettimeofdayの呼び出しだけでなくファインダーの詳細で)。rdtsc()のようなものを使用すると、ライブラリ関数の呼び出しに伴うレイテンシーの感覚を得ることができますが、ブランチが適切に予測されていないか、キャッシングが正しく機能していないかなどを確認できない限り、レイテンシーの帰属を行うことはできません。より大きなバイナリのコンテキスト内でライブラリ内のルーチンに出入りする特定のハードウェアイベントを確認することを想像して、PAPIを調べましたが、PAPIが機能するには特定のカーネルモジュールが必要なようです(Linux2.6。 18 && Intel Xeon 5570)...特にIntelプロセッサ向けのVtuneがありますが、そのようです。

目標にVtuneを使用する方法はありますか、それともカーネルにパッチを適用せずにそのようなカウンターにアクセスできる方法はありますか?

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

windows - Intel の VTune を定期的に実行する

VTune の以前のバージョンには、VTune からハードウェア カウンター (特に DRAM の読み取り/書き込みに関連するもの) を定期的にポーリングするために使用できる dsep.exe というプログラムがありました。これにより、最後に 1 つの要約を作成するのではなく、各インスタンスに関するカウンター データを時間内に収集することができました。

残念ながら、このツールは 64 ビット オペレーティング システムでは推奨されていません。VTune (または Windows の別のプログラム) からハードウェア カウンター データを定期的に (たとえば、1 秒ごとに) 取得する方法を知っている人はいますか?

よろしくお願いします。

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

c++ - VTune レポートについて

これは既存のスレッド (http://stackoverflow.com/questions/12724887/caching-in-a-high-performance-financial-application) のフォローアップです。アプリケーションを妨げているのはキャッシュではないことがわかりました。簡単に言うと、実行時間の 70% を 1 つの関数 (22 秒のうち 15 秒) に費やすアプリケーションがあります。したがって、この関数の想定される使用ははるかに大きなデータ用であるため、この関数の実行時間を可能な限り短縮したいと思います (つまり、22 秒は計画された実行時間ではありません:)

問題は、VTune の出力が私を困惑させていることです。コードは、まったく予想外の場所で膨大な時間を費やしているようです。アイデアが尽きてしまったので、私のプロジェクトをプロファイラーの結果と合わせてここに投稿します。

問題のある evaluateExits() 関数を見ると、次のことが私を困惑させます。

1/ 関数は、パラメーターに関係なく 1 を返すインライン関数の呼び出しにたまたま 2.2 秒を費やしています (425 行目、this->contractManager->contractCount())。注: パラメータに関係なく関数が 1 を返すバージョンは、考えられるケースの 1 つであるため、「contractCount=1」を入れてそのままにしておくことはできません。仮想テーブル ポインタからのリダイレクトで 2.2 秒 (contractCount() は仮想メソッド) を消費できますか?

2/ 関数は、可能な限り CPU に優しいバージョンの wmin を使用しているにもかかわらず、min(uint1, uint2) (432 行目) に 3.3 秒を費やします。

3/ 関数は 512 行目に 1.6 秒を費やしますが、これは非常に些細な操作であり、呼び出される関数は仮想関数ではありません。

質問は、これらの 3 行のコードになぜそんなに時間がかかるのかということです。私は何を見落としていますか?また、コードを最適化して実行速度を上げるにはどうすればよいでしょうか? wmin() を、配列全体に適用される min の SSE バージョンに置き換える必要がありますか?

どんな入力でも大歓迎です。ダニエル

編集: アセンブリを調べたところ、1/ の場合、コードを「遅く」するのは vfptr であることがわかりました。仮想関数の呼び出しを Don Clugston の fastdelegate に置き換えましたが、パフォーマンスの変化はまったく発生しませんでした (理由はわかりません)。ナイチンゲールのコメントにより、添付ファイルには必要なすべてのファイルが含まれているはずです。ただし、バイナリは数百 MB のデータがある共有メモリに接続するため、正常に実行できません。

そのため、VTune の結果と組み合わせたプロジェクト全体をここここに添付します。

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

c++ - VSPerf VS2010 およびその他のプロファイリング ツールが pdb を検出しない

VSPerfCmd (VS2010 プロファイラー) および Intel VTune Amplifier XE 2013 を使用してプロファイリングしようとしています: .vsp ファイルの VsPerfCmd について、いくつかの結果が利用可能です。ただし、profier は pdb を取得していません。アプリケーションの一部のコードは使用できません。

これはすでにあなたに起こっていますか?完全なプロファイルを取得するために、いくつかのコンパイラ オプションをオンにする必要があるかどうか知っていますか?

プロファイラーはどのディレクトリで .pdb 情報を見つけますか?

ありがとう