問題タブ [kcachegrind]
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++ - kcachegrind の理解に助けが必要
kcachegrind を理解しようとしていますが、そこにはあまり情報がないようです。たとえば、左側のウィンドウには、「Self」とは何ですか、「incl.」とは何ですか? ( 1 コアを参照)。
私はいくつかの弱いスケーリング テストを行いましたが、通信がないため、キャッシュ ミスと関係があると思います。しかし、私が見る限り、1 コアと 16 コアの両方で同じ数のデータ ミスがあります。 16 コアを参照してください。
1 コアと 16 コアの間に見られる唯一の違いは、16 コアでは memcpy の呼び出しが大幅に少ないことです (これについては説明できます)。しかし、1 つのコアでは実行時間が 0.62 秒であるのに対し、16 コアでは実行時間が 1 秒に近い理由はまだわかりません。各プロセッサは同じ量の作業を行っています。誰かが kcachegrind で何を探すべきか教えてくれたら、それは素晴らしいことです。kcachegrind と valgrind を使用するのはこれが初めてです。
編集:私のコードは、行列を圧縮された行形式で連結します。サブマトリックスのエントリをループし、memcpy を使用して値を結果マトリックスにコピーする必要があります。コードは次のとおりです: - 2 つ以上のリンクを投稿できないので、コメントに投稿します。
ループ自体で valgrind を開始しただけです。ループは、0.62 秒の実行時間と 1 秒の実行時間の違いを生んでいるものでもあります。最も時間がかかる部分は memcpy の呼び出しです (以下の github gist の 37 行目)。これをコメントアウトすると、コードは 0.2 秒未満で実行されますが、1 コアから 16 コアの間でまだ増加しています (約30%増)。
24 個のコア (2 つの Intel® Xeon® Processor E5-2690 v3) で構成される haswell ノードでコードを実行しています。
各コアには 5 GB のメモリが搭載されています。
c++ - C++ プロファイリングは、ベクトルのホットスポットを明らかにします。最適化する方法は?
での多くの操作を含む callgrind / qcachegrind を使用して、いくつかの信号処理コードをプロファイリングしていstd::vector<float>
ます。
Mac OS のビルトインnearbyint
機能からかなり深刻なホットスポットが発生しています。
これは、このベクトル関数によってほぼ完全に呼び出されているようです。
これは、多くのクラス メンバー関数から呼び出されます。私には、_push_back_slow_path
割り当てのボトルネックのように見えますが、その理由は完全にはわかりません。実行ループのどの時点でも、ベクトルのサイズを変更していません。起こっていることはすべて、参照によってコピーされたり、反復されたり、data()
op を使用して vDSP 操作の生のポインターを取得したりすることがあります。例えば 。. .
vector
ホットスポットに未加工のデータ ポインターを渡しているときに、vDSP 関数がこのホットスポットの原因になるのはなぜですか?- このホットスポットの原因として考えられるものは何ですか?
- 登場する理由は
basic_string
?プロファイルされたライブラリは文字列を使用しません。 std::array
可能な限り に切り替えることは賢明な次の動きでしょうか?
さらに詳しい情報をお気軽にお尋ねください。喜んで質問を編集します。
編集1
最初の答えに応えて、私は明示的にpush_back
どこにも電話していません。ホットスポットは、フロートでのインライン化されたログ操作など、一見おかしな場所で発生しています。これは奇妙なことをしているコンパイラの最適化でしょうか?
c++ - Kcachegrind サイクルの見積もり
彼らの github ページにアクセスして、kde docs サイトから PDF マニュアルをいくつか見た後でも、私はまだ混乱しています。テスト コードに次の 2 行があるとします。
は、ep
事前定義できる値です。コメントは私のもので、コードブロックで、逆アセンブラーでデバッガーを実行し、辛抱強く「次の命令」を押してカウントすることによって行われます。これらは、「命令フェッチ」を表示するように設定した場合に Kacachegrind が言うことと一致します。それは理にかなっていると思います(私はC ++の初心者です)。しかし、「サイクル推定」に切り替えると、非常に奇妙な測定値が得られます。現在の例では、115
and122
ですが、次のように一見似ている他の表現もあります。
show 222
and 2
(instr. fetch shows 2
for both)! ここで何が起こっていますか?誰か説明してくれませんか?
php - QCachegrind が PHP プロファイリングのデータを表示しません。設定の問題が考えられます
xdebug と、KCachegrind の Windows バージョンである qCachegrind をインストールしましたが、このインターフェイスでプロファイリング データを確認できませんでした。
正しく構成できない可能性があります。
Xdebug を既にインストールしており、webgrind で表示しています。
ここでは、xdebug の ini 設定を投稿しています。
以前に使用したことがある人は、インターネットで多くの助けを見つけることができませんでした。
php - KCacheGrind のクロージャとは?
closure
とはどういう意味KCacheGrind
ですか? 私は自分の関数の1つでそれを持っており、関数を指してspl_autoload_register()
いspl_autoload_call
ますKCacheGrind
. 関数のself
時間は 60+ であるため、もちろん最適化したいのですが、どこから始めればよいかわかりません。
closure
インは何KCacheGrind
ですか?
上記の関数を最適化してself
時間を短縮するには何が必要ですか?