SSE 【Streaming SIMD Extensions】
概要
SSE(Streaming SIMD Extensions)とは、米インテル(Intel)社のマイクロプロセッサ(CPU/MPU)に内蔵された拡張命令セットの一つで、主に一つの命令を複数のデータに同時に適用するSIMD処理に関するもの。動画や3次元グラフィックス(3DCG)、暗号などを扱うプログラムでは複数のデータに同じ計算を行う処理が頻繁に現れるが、通常のプロセッサでは同じ計算を何度も繰り返し、データを一つずつ処理していくしかなかった。SSEではプロセッサ内に並列処理のための回路を追加し、一つの計算を同時に複数の値に対して行うSIMD(Single Instruction Multiple Data)型の処理を実行できる。
SSEは何度か機能が追加されており、SSE2、SSE3のように呼び分けられる。最初のSSEは1999年のPentium IIIに搭載され、新たに追加された8つの128ビット長のSIMD処理用レジスタ(XMMレジスタ)を用いる。一つのレジスタに32ビット長の単精度浮動小数点数を4つ格納し、一つの命令で一気に処理することができる。追加された命令は70個で、新たにこれらの命令を用いて開発されたプログラムを高速に処理することができる。
開発コードネーム “Sandy Bridge” 型のIntel CoreシリーズからはSSEの名称は廃止され、新たにIntel AVX(Advanced Vector Extensions)がSIMD拡張命令を取り扱うようになった。
SSE2
SSEの機能を強化したもので、2000年のPentium 4から採用された。新たに追加された命令は144個で、単精度浮動小数点数だけでなく64ビット長の倍精度浮動小数点数や整数を扱うこともできるようになった。
SSE3
SSE2をさらに拡張したもので、2004年の開発コードネーム “Prescott” 型のPentium 4から採用された。新たに追加された命令は13個。浮動小数点数演算や複素数計算の強化、メモリアクセスの高速化、一つのプロセッサコアで二つの命令の流れを同時に実行するハイパースレッディングへの対応などが行われた。
SSSE3 (Supplemental SSE3)
SSE3を補完的に拡張するもので、同社のCoreシリーズ初のSSE拡張。2006年のCore 2 Duoから採用された。追加された命令数は16。同じレジスタ内に収まってる数値間の加減算(水平加算/水平減算)などが追加された。
SSE4.1
SSE3を強化したもので、2007年の開発コードネーム “Penryn” 型のCore 2シリーズから採用された。単にSSE4と呼ばれる場合もある。新たに47命令が追加されている。新たな積和演算の命令や浮動小数点数を整数に変換する丸め処理に関する命令などが追加された。
SSE4.2
SSE4.1を強化したもので、SSE4.1と合わせて(つまり4.2対応のものを)SSE4と呼ぶ場合もある。2008年の開発コードネーム “Nehalem ” 型のIntel Core iシリーズから採用された。追加された命令は7つ。文字列処理や巡回冗長検査(CRC)などに関する命令が追加された。
SSE4a
Intel社の互換プロセッサを開発していた米AMD社が自社製品に独自に組み込んだもの。Intel社側のSSE4.1/4.2とは別の追加命令で、AMD社製品でしか利用できない。ビット操作などに関する4つの命令からなる。
MMX (Multimedia Extensions)
Intel社が最初にマイクロプロセッサ製品に搭載したSIMD処理についての拡張命令セット。動画や音声、画像などの処理を効率化するために採用された。
一つの命令で複数の演算回路を同時に動かすSIMD型の命令を提供する同社製プロセッサ初の拡張で、浮動小数点演算のための回路群(FPU:Floating-Point Unit)の一部を整数演算に転用することで複数の整数演算を同時に実行する。
1997年に同社の(初代)Pentiumプロセッサの拡張命令セットとして登場し、MMXが追加されたPentiumは「MMX Pentium」(正式な製品名はPentium Processor with MMX Technology)と呼ばれた。
後にFPUを転用せず専用の演算回路を利用するよう改めたSSE拡張命令セットが開発され、MMXに代わって採用された(互換性のためMMX命令自体はその後も残されている)。