1

キャッシュミスが問題であるかどうか、およびそれらがコードで発生している問題であるかどうかを識別するために、コミュニティはどのツールを使用していますか?

最初の質問は次のとおりです。

キャッシュミスの結果としてメインメモリからのデータを待機するために費やされている時間を特定するにはどうすればよいですか?OProfileのようなサンプリングプロファイラーは、このデータを待機している関数に時間を割り当てますか?たとえば、ディスク読み取りからのデータを待機している関数に時間を割り当てないため、メモリからのデータを待機している場合も同じことが当てはまるかどうか疑問に思う必要があります。

2番目の質問は、キャッシュミスが実際にボトルネックであると特定した場合、コードのどの部分がキャッシュされていないメモリを要求しているかを特定するにはどうすればよいですか?イベントとしてLLC_MISSESでOProfileを使用する必要がありますか?私が知らない他のツールはありますか?将来、特定のツールチェーンに縛られたくないので、プロプライエタリソリューションを使用するやむを得ない理由がない限り、プロプライエタリソリューションから離れることを好みます。

助けてくれてありがとう!

4

1 に答える 1

0

「OProfile のようなサンプリング プロファイラーは、このデータを待機している関数に時間を割り当てますか?たとえば、ディスク読み取りからのデータを待機している関数に時間を割り当てないため、メモリからのデータを待機する場合にも同じことが当てはまるかどうか疑問に思う必要があります。 "

A: はい、シングル スレッド CPU では、OProfiler や VTune などのプロファイラーは、キャッシュ ミスを待機している関数に時間を割り当てます。

キャッシュ ミスを起こしているハードウェア スレッドがまだ実行されているため、これは機能します。既存のすべての x86 は SoEMT (Swith On Event Multithreading) を実行しません。ディスク上で待機しているプロセスが切り替えられているため、OS / ディスク待機では機能しません。」

実際には、Intel ハイパースレッディングのようなマルチスレッド CPU でも機能します。ただし、ハイパースレッディングが無効になっていると、結果がきれいになることがあります。同様に、Bulldozer での AMD クラスタ スレッドについても同様です。動作するはずですが、念のため...

于 2012-04-28T05:56:26.390 に答える