SSE
読み:エスエスイー
外語:SSE: Streaming SIMD Extensions

 ストリーミングSIMD拡張命令。IntelマイクロプロセッサーであるPentium IIIから搭載された命令群のこと。
目次

概要
 新たに128ビット長のXMMレジスター8本を新設し、これを用いてSIMD命令を処理する。
 一つのレジスターに32ビットの単精度浮動小数点数を4つまで格納可能で、同一の演算命令を一括処理できる。かくして浮動小数点演算の大幅な高速化を実現した。
 マルチタスクOSまたはマルチスレッドOSの場合は、タスク/スレッド切り換え時にレジスターの待避と復元処理をせねばならないが、レジスターが増えているという都合から、未対応の古いOSでは使用することができない。
 SSE以降も続々と機能が拡張され、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2などと続いている。

特徴

沿革

SSE
 Pentium IIIから搭載された、最初のSSEである。追加命令数は70で、開発中にはKNIやMMX2とも呼ばれていた。
 AMD主導の拡張命令である3DNow! Professionalは、このSSEに対応している。

SSE2
 Pentium 4(WillametteコアとNorthwoodコア)から搭載された。追加命令数は144で、倍精度浮動小数点演算や整数演算などに対応した。
 AMDでは、AMD64で標準命令として取り込まれている。

SSE3
 Pentium 4の第三世代プロセッサーコアPrescottから搭載された。
 追加命令数は13に過ぎないが、複素数演算やメモリーアクセスなどの高速化が図られており、ビデオエンコーディングなどの処理能力が向上している。

SSSE3
 SSE3に対する拡張で、追加命令数は16である。
 特に、水平加算などが追加されたため、内積計算などが高速化された。

SSE 4.1
 Core 2の新コアPenrynから搭載された。追加命令数は47である。
 様々なメディア処理、画像処理、3D処理のパフォーマンス向上を目的とした命令が追加されている。

SSE 4.2
 Core i7(Nehalemコア)から搭載された。追加命令数は7である。
 XML解析用の文字列検索命令や、CRC32演算命令といった、サーバー向けの命令が追加されている。

SSE4a
 AMD独自の命令で、AMD K8Lから追加された。名前こそSSE4となっているが、IntelのSSE4とは全く無関係である。

SSE5
 AMDが追加を予定していたもの。後述するIntel AVXが後から発表されたため、SSE5はキャンセルされた。

Intel AVX
 MMX/SSEの後継となるSIMD拡張命令セットで、Sandy Bridgeから搭載された。
 VEXプリフィックスを用いた、全く新しい命令フォーマットを使用することを特徴とする。これに伴い、従来のXMMレジスターが128ビット長だったものを、倍の256ビット長のYMMレジスターに拡張することができた。理論上、1スロットあたりの演算性能は倍となる。

Intel AVX2
 Haswellから搭載された、拡張命令セット。

機能の有無判別
 AVXまでは、機能の有無は、EAXレジスターに1を代入してCPUID命令を実行し、ECXレジスターまたはEDXレジスターに得られたフラグの該当ビットが1かどうかで確認できる。
 AVX2以降は、EAXレジスターに7、ECXレジスターに0を代入してCPUID命令を実行し、EBXレジスターに得られたフラグの該当ビットが1かどうかで確認できる。
 AMD独自の機能の有無は、EAXレジスターに0x80000001を代入してCPUID命令を実行し、ECXレジスターに得られたフラグの該当ビットが1かどうかで確認できる。

新命令
 SSEでは計70命令が追加された。ニーモニックのルールは次の通りである。
 また、movupsを除く殆どの命令で、メモリーとの128ビットの読み書きには16バイトのアラインメントが必要。さもないと一般保護例外
 SSEで追加された新命令は、次の通りである。
 以下の命令がMMX用に追加された。MMX2とも呼ばれる(MMXと同様に、SSE2からはXMMレジスターに対しても可能)。

再検索