ストリーミングSIMD拡張命令

ストリーミングSIMD拡張命令(SSE)とその進化



ストリーミングSIMD拡張命令(SSE)は、インテルが開発したCPUSIMD拡張命令セットであり、その後の拡張版である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の性能向上に不可欠な役割を果たしてきました。これらの技術は、コンピュータグラフィックス、科学計算、機械学習など、幅広い分野で活用されています。今後も、これらの技術はさらなる進化を遂げ、より高性能な計算環境を実現していくでしょう。


もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。