性能分析に有用な性能監視ツールOProfileを見つけたのでメモ。CPUのイベント(キャッシュミスなど)を計測することができるらしい。
OProfileのサイト
http://oprofile.sourceforge.net/
Linux Kernel Profiling HOWTO
http://www9.ocn.ne.jp/~puppet/docs/Linux-Kernel-Profiling-HOWTO/x86.html
↑具体的な使い方が載っている
コードを読むな、理解しろ(ユメのチカラ)
http://blog.miraclelinux.com/yume/2006/10/post_e3d6.html
↑ソースから、キャッシュミスの多発している行を特定するのにOProfileを活用。
http://blog.miraclelinux.com/yume/2007/08/post_89da.html
↑こっちはチューニングの話。関連する記事へリンクが張ってある。まずは定量的な時間測定をしてから原因を特定をする、という手順。
Linux Kernel 2.6.18とCache Pollution Aware Patch
http://blog.miraclelinux.com/yume/2006/09/linux_kernel_26_2c2c.html
↑こちらはLinuxのカーネルで、キャッシュミスの多発している部分を特定してパッチを作成した話。この場合は、OProfileを用いてcache pollution(キャッシュ汚染)多発部位を厳密に特定→キャッシュバイパス命令をそこに挿入、という方針。
キャッシュをバイパスをするとなぜ速くなるのか?
http://d.hatena.ne.jp/hyoshiok/20051101
↑こちらはキャッシュのバイパスに付いての考察。ReadのときとWriteのときの動作を考察している。コメント欄でmove non-temporal命令が紹介されている。
move non-temporalについてググってみた。intelのpdfファイルの中の
http://download.intel.com/jp/developer/jpdoc/IA32_Arh_Dev_Man_Vol2A_i.pdf
ftp://download.intel.co.jp/jp/developer/jpdoc/24547103_j.pdf
によると
MOVNTDQ (void_mm_stream_si128 ( __m128i *p, __m128i a))
MOVNTI (void_mm_stream_si32 (int *p, int a))
MOVNTPD (void_mm_stream_pd(double *p, __m128i a))
MOVNTPS (void_mm_stream_ps(float * p, __m128 a))
MOVNTQ (void_mm_stream_pi(__m64 * p, __m64 a))
がこれに該当する。
OProfileのサイト
http://oprofile.sourceforge.net/
Linux Kernel Profiling HOWTO
http://www9.ocn.ne.jp/~puppet/docs/Linux-Kernel-Profiling-HOWTO/x86.html
↑具体的な使い方が載っている
コードを読むな、理解しろ(ユメのチカラ)
http://blog.miraclelinux.com/yume/2006/10/post_e3d6.html
↑ソースから、キャッシュミスの多発している行を特定するのにOProfileを活用。
http://blog.miraclelinux.com/yume/2007/08/post_89da.html
↑こっちはチューニングの話。関連する記事へリンクが張ってある。まずは定量的な時間測定をしてから原因を特定をする、という手順。
なるほど。マルチスレッドで書くときなんかはこの辺も気にしないといけないのかな。ロック競合の場合、CPUやIOはまだまだ余裕があるのにスループットが出ないなどの現象がでたりする。
Linux Kernel 2.6.18とCache Pollution Aware Patch
http://blog.miraclelinux.com/yume/2006/09/linux_kernel_26_2c2c.html
↑こちらはLinuxのカーネルで、キャッシュミスの多発している部分を特定してパッチを作成した話。この場合は、OProfileを用いてcache pollution(キャッシュ汚染)多発部位を厳密に特定→キャッシュバイパス命令をそこに挿入、という方針。
キャッシュをバイパスをするとなぜ速くなるのか?
http://d.hatena.ne.jp/hyoshiok/20051101
↑こちらはキャッシュのバイパスに付いての考察。ReadのときとWriteのときの動作を考察している。コメント欄でmove non-temporal命令が紹介されている。
move non-temporalについてググってみた。intelのpdfファイルの中の
http://download.intel.com/jp/developer/jpdoc/IA32_Arh_Dev_Man_Vol2A_i.pdf
ftp://download.intel.co.jp/jp/developer/jpdoc/24547103_j.pdf
によると
MOVNTDQ (void_mm_stream_si128 ( __m128i *p, __m128i a))
MOVNTI (void_mm_stream_si32 (int *p, int a))
MOVNTPD (void_mm_stream_pd(double *p, __m128i a))
MOVNTPS (void_mm_stream_ps(float * p, __m128 a))
MOVNTQ (void_mm_stream_pi(__m64 * p, __m64 a))
がこれに該当する。
この記事のトラックバックURL
http://tekitobibouroku.blog42.fc2.com/tb.php/13-61696de7
この記事にトラックバックする(FC2ブログユーザー)
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック





