ホームに戻る
 SIMDの概要

 MMXの場合

MMXは Pentium を拡張した Pentium Pro では使えませんが、
Pentium でMMXを使用可能にした MMX Pentium 以降で使用可です。
Pentium II からは標準で使用することができると思ってよい。
AMD では K6 あたりから対応しているようです。

MMXはFPUレジスタを利用します。
よってMMX命令を使用中は同時に浮動小数演算ができないことになります。
MMXからFPUへの切り替えとFPUからMMXへの切り替えには、
数十クロックの切り替え時間のロスができます。
できれば各々を短い単位で切り替えるような処理は避けたいものです。

FPUレジスタは80ビット幅ですがMMXではそのうち64ビットを使います。
MMXに使えるレジスタは64ビットが8本あり、
それぞれレジスタ名はmm0からmm7と名付けられています。

FPUからMMXへの切り替えに命令は不要。
MMXからFPUへは書かなくても動くが基本的には切り替え命令を絶対に書くべき、
切り替え時に EMMS 命令を明示的に指定すると指定しないより早い。

アクセスするメモリアドレスは8バイト境界であれば早い。
メモリの操作幅は8バイトで固定したほうが早い。
命令は乗算が3クロックなのを除いてすべて1クロックである。
乗算の結果は次の2クロックの間は利用できない。
(使う場合は2クロック待つので、間に違う処理を入れたほうが効率が良い)
すべての命令がパイプライン化できる。

 MMX以降について

3D Now! は AMD の K6 あたりから使えるようになりました。
MMXと同じくFPUレジスタを使った整数の演算が行えます。
またレジスタ1本に2つの単精度浮動小数を入れて
浮動小数の計算が行えるという点がMMXと違います。
パイプラインレジスタを2本持ち、
パイプライン自体が1クロックで2つの命令を処理できるので、
1クロックで最大4つの命令が実行可能である。
AMD Athlon からの Enhanced 3D Now! はこれに命令をいくつか追加したもの。

MMX2は Pentium III 以降で利用可能になった。
MMXにいくつかの命令が追加されたもの。

SSEは Pentium III 以降で利用可能になった。
MMXとは違いXMMという128ビットのレジスタを8本使うことができる。
FPUレジスタで無い独立したレジスタなので切り替えが不要。
単浮動小数を一度に4つ計算するための命令が用意されている。

3D Now! Professional は AMD Athlon 4 以降で利用可能。
Enhanced 3D Now! にXMMレジスタでSSE命令を使えるようにしたもの。

SSE2は Pentium IV 以降で利用可能になった。
SSE命令を拡張しXMMで整数計算も行えるようにしたもの。
倍浮動小数を一度に2つ計算できるようにもなった。

SSE3は Pentium IV Prescott から利用可能になった。
SSE3はSSE2に浮動小数計算用の命令を追加したもの。


CPUID での確認方法について

EAXに0x00000001
MMX               EDXに0x00800000
SSE               EDXに0x02000000
SSE2              EDXに0x04000000
SSE3              ECXに0x00000001
EAXに0x80000001
MMX Extensions    EDXに0x00400000
3D Now!           EDXに0x80000000
Enhanced 3DNow!   EDXに0x40000000

inserted by FC2 system