アプリケーションを最適化するためにcachegrind出力を使用する方法

StackOverflow https://stackoverflow.com/questions/1723997

  •  19-09-2019
  •  | 
  •  

質問

私は、システムのスループットを向上させる必要があります。

最適化の通常のサイクルが行われていると我々はすでに1.5倍、より良いスループットを達成しています。

私は今、私は、システムのスループットを向上させるためにcachegrind出力を利用できるかどうか疑問に思い始めています。

誰かがこの上で開始する方法に私を指すことができますか?

私が理解することは、我々はそれがL1キャッシュに残り、次のデータセットがL2に収まる必要があるように、最も頻繁に使用されるデータが十分に小さく維持されなければならない。

を確認する必要がありますです

これは私が取っています右方向ですか?

役に立ちましたか?

解決

これは `自体にcachegrind出力は、コードの最適化について移動する方法があまりにも多くの情報を与えないのは事実。一つは、それを解釈する方法を知っている必要がありますし、何を、データがL1およびL2にフィッティングについて言っていることは確かに正しい方向です。

完全にメモリ・アクセス・パターンがパフォーマンスにどのように影響するかを理解するために、私は優れた紙の「何すべてのプログラマを読むことをお勧めしますウルリック・ドレパー、GNUのlibcのメンテナでの記憶」について知っておく必要があります。

他のヒント

あなたはcachegrind出力を解析する問題がある場合は、

、(それは選択のあなたのディストリビューションで利用可能であるべきである)KCacheGrindに見えます。私はそれを使用し、それは非常に参考ます。

Cachegrindのドキュメントによるとする 、cachegrindによってあなたに与えられた詳細は、コードの特定の部分のキャッシュ・ミスの数です。あなたは、コードを修正する方法を知っているように、キャッシュがあなたが標的にされているアーキテクチャにどのように機能するかについて知っておく必要があります。実際には、これはキャッシュされたデータがキャッシュに残っているように、データを小さくするか、いくつかのデータのアクセスパターンを変更することを意味します。しかし、あなたが情報に基づいて行動することができます前に、あなたのプログラムのデータとデータへのアクセスを理解する必要があります。それは手動で言うように、

  

要するに、Cachegrindは、あなたのコード内のボトルネックのいくつかはあるが、それはそれらを修正する方法を伝えることはできませんどこを伝えることができます。あなた自身のためにそれをうまくしなければなりません。しかし、少なくとも、あなたは情報を持っています!

1.5倍は素晴らしいスピードアップです。それはあなたが取り除くことができ、時間の33%を取った何かを発見したことを意味します。私は、あなたがデータメモリキャッシュのような低レベルの問題に取り掛かる前であっても、あなたがより行うことができます賭けます。 これは方法の例です。基本的にに、あなたが持っている可能性があり25%のように前に大きななかった追加のパフォーマンスの問題(とスピードアップの機会が)、と言います。まあ、1.5倍の高速化と、その25%は現在37.5%であるので、それがあったより「より価値」です。多くの場合、このような問題は、それがコストどのくらい知っていれば、あなたが決めること、仕事を要求しているいくつかの半ばスタック関数呼び出しの形で完全に不要です。 kcachegrindが本当にこれらを特定しないので、あなたはそれが問題であると認識しないことがあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top