何をいまさら、と思われるでしょうが、記事タイトルの通りです。

最近 Ut Video Codec Suite の脱アセンブラのために intrinsic への書き換えを進めているのですが、既存の MMX 命令を使ったルーチンを intrinsic に書き換えようとしたらこの問題にぶつかりました。GCC はサポートするようです。

x86 をターゲットにする場合でも、本質的に同じ命令列になるような SSE2 向けのコードと MMX 向けのコードとで最適化の頑張り具合が違う(MMX 向けだと中途半端)という現象が発生しており、その意味でも MMX は推奨されないように見えます。

Ut Video Codec Suite は元々 SSE2 をサポートする CPU 向けであるのに MMX 命令なルーチンがあるのは、書いた当時 (Conroe) は実測したら SSE2 命令で書くより速かったからです。しかし、いろいろ試行錯誤した結果、少なくとも Sandy Bridge だと legacy SSE ではほとんど変わらず、VEX prefixed SSE では有意に速くなるという結果が得られたので、 MMX にはこだわらなくても良さそうです。 Nehalem でどうなるかは気になるところですが。

Trackback

no comment untill now

Add your comment now