ストリーミングSIMD拡張命令(SSE)とその進化
ストリーミング
SIMD拡張命令(SSE)は、
インテルが開発した
CPUの
SIMD拡張命令セットであり、その後の拡張版であるAdvanced Vector Extensions (AVX) や Advanced Matrix Extensions (AMX) の基礎となる技術です。本稿では、これらの命令セットの概要、沿革、詳細について解説します。
SSEの概要
SSEは、x86アーキテクチャに8本の128ビットレジスタを導入し、浮動小数点演算の
SIMD処理を可能にした命令セットです。これは、AMDの3DNow!命令に対抗する形で
Pentium IIIに初めて実装されました。SSEでは、4つの
32ビット単精度浮動小数点データを1つのレジスタに格納し、同一の命令を同時に処理できます。SSEを使用するには、対応した
ソースコードを作成し、コンパイルする必要があります。
初期のSSE実装では、
64ビット幅の演算器を使用して128ビット演算命令を2
クロックで実行していたため、実質的な
スループットは
クロックあたり
64ビットでした。しかし、
Coreマイクロアーキテクチャ以降では、128ビット演算命令を1
クロックで処理できるようになり、SSEの実用性が大幅に向上しました。また、当初は
インターネット・ストリーミング
SIMD拡張命令(ISSE)と呼ばれていましたが、
インターネットとの直接的な関係がないため、現在は単にSSEと呼ばれています。SSEの機能を強化したものには、SSE2、SSE3、SSSE3、SSE4などがあります。
SSEの沿革
各SSE拡張命令の詳細
SSE
Pentium IIIに初めて実装されたSSEは、70個の命令を追加し、単精度浮動小数点演算の
SIMD処理を可能にしました。当初はKNIや
MMX2とも呼ばれていました。廉価版のCeleronでも、Coppermine-128kからSSEに対応しています。AMDの3DNow! ProfessionalはSSEと
互換性があります。
SSE2
SSE2は、SSEに144個の新たな命令を追加し、
64ビット倍精度浮動小数点演算のサポート、
MMXを128ビット幅に拡張する整数演算命令、キャッシュ制御機能の強化がなされました。
Pentium 4で初めて実装され、AMD64アーキテクチャでは浮動小数点演算の標準命令として採用されました。
SSE3
SSE3は、SSE2に13個の命令を追加し、メモリアクセスや
複素数計算の高速化、仮想
CPUのスレッド動作制御などの機能が搭載されました。特に動画圧縮処理の効率が向上しています。SSE3は、当初PNIと呼ばれていました。
SSSE3
SSSE3は、SSE3に32個の新たな命令を追加したものです。
Coreマイクロアーキテクチャベースの
Intel Core 2やIntel
Xeonで初めて実装されました。当初はMNIと呼ばれており、SSE4と呼ばれると予想されていました。
SSE4
SSE4は、SSE4.1とSSE4.2に分けられます。SSE4.1は47個の命令を追加し、SSE4.2は7個の命令を追加しました。SSE4.2では、文字列処理やCRC-32、ビットカウント命令などが追加されています。
SSE4a
AMDのPhenomに搭載されたSSE4aは、キャッシュ関連や挿入・展開の4命令を追加しています。
インテルのSSE4とは
互換性がありません。
FMA (Fused Multiply-Add)
FMAは、融合積和演算を実現するための拡張命令です。AMDと
インテルが異なる仕様で採用しましたが、後に
インテルの仕様変更によりFMA3に統一されました。FMAは、(A×B)±Cの形の演算を1命令で実行でき、乗算結果の丸め誤差を小さくする利点があります。FMA4とFMA3の二種類がありましたが、AMDのZenマイクロアーキテクチャでFMA4が削除され、FMA3が標準となりました。
Intel AVX (Advanced Vector Extensions)
AVXは、
MMX/SSEの後継となる
SIMD拡張命令セットで、演算幅が256ビットに拡張されました。これにより、1命令でより多くのデータを処理できるようになり、性能が大幅に向上しました。AVXは、新しいVEXエンコーディングを採用し、非破壊型命令もサポートしています。AMDは、SSE5をキャンセルし、AMD FXでAVXをサポートしました。
Intel AVX2
AVX2は、AVXの拡張版で、256ビットレジスタに対する整数ベクトル演算やgather命令などが追加されました。
インテルは
Haswellマイクロアーキテクチャから、AMDはExcavatorアーキテクチャからAVX2を実装しています。AVX2 VNNIは、整数積和演算の効率化を目的とした拡張命令セットです。
Intel AVX-512
AVX-512は、512ビット長のZMMレジスタを導入し、レジスタ数も増やした拡張命令セットです。様々な命令群があり、製品によって実装レベルが異なります。AVX-512 VNNIは、
畳み込みニューラルネットワークの整数演算を効率化します。しかし、パソコン向けの
CPUでは、第12世代
Intel Core以降は非対応となっています。
Intel AVX10
AVX10は、AVX-512の後継として発表された命令セットで、AVX2とAVX-512を統合したものです。AVX10.1とAVX10.2があり、AVX10.2では、128、256、512ビットレジスタのいずれでも動作するようになります。
Intel AMX (Advanced Matrix Extensions)
AMXは、
行列計算のために設計された拡張命令セットで、従来のベクトル計算を拡張したものです。AMXは、AMX-TILE、AMX-INT8、AMX-BF16の命令群から構成され、
行列積の高速化に貢献します。AMXは現在も開発が継続されており、さらなる拡張が予定されています。
まとめ
SSEから始まり、AVX、AMXへと進化した
SIMD拡張命令セットは、
CPUの性能向上に不可欠な役割を果たしてきました。これらの技術は、コンピュータグラフィックス、科学計算、機械学習など、幅広い分野で活用されています。今後も、これらの技術はさらなる進化を遂げ、より高性能な計算環境を実現していくでしょう。