この記事は技術的すぎるため、ほとんどの読者には理解しにくい可能性があります。技術的な詳細を削除せずに、(2019年7月) |
SSE4 (ストリーミング SIMD 拡張命令 4 ) は、Intel Core マイクロアーキテクチャおよびAMD K10 (K8L)で使用されるSIMD CPU命令セットです。2006 年 9 月 27 日に Fall 2006 Intel Developer Forumで発表され、ホワイトペーパーには漠然とした詳細が記載されていました。[ 1 ] 47 個の命令のより正確な詳細は、2007 年 Spring 2007 Intel Developer Forum北京でのプレゼンテーションで明らかになりました。 [ 2 ] SSE4 は、 2004 年初頭にリリースされたSSE3命令セットを拡張したものです。以前の Intel SIMD 命令 (例: SSE3) を使用するすべてのソフトウェアは、SSE4 命令をサポートする最新のマイクロプロセッサと互換性があります。既存のソフトウェアはすべて、SSE4 を組み込んだマイクロプロセッサ、および SSE4 を組み込んだ既存および新規のアプリケーションが存在する場合でも、変更を加えることなく引き続き正しく動作します。[ 3 ]
他の前世代の CPU SIMD 命令セットと同様に、SSE4 は最大 16 個のレジスタ (各レジスタは 128 ビット幅) をサポートし、4 つの 32 ビット整数、4 つの 32 ビット単精度浮動小数点数、または 2 つの 64 ビット倍精度浮動小数点数をロードできます。[ 1 ]ベクトル要素ごとの加算/乗算やベクトル スカラー加算/乗算などの SIMD 操作では、1 つの CPU 命令で複数バイトのデータを処理します。並列操作によりパフォーマンスが大幅に向上します。SSE4.2 では、最大 16 バイトの 2 つの文字列フラグメントを比較する命令を含む、新しい SIMD 文字列操作が導入されました。[ 1 ] SSE4.2 は SSE4 のサブセットであり、SSE4 の最初のリリースから数年後にリリースされました。
SSE4サブセット
Intel SSE4は54個の命令で構成されています。47個の命令からなるサブセット(一部のIntelドキュメントではSSE4.1と呼ばれています)は、 Penrynで利用可能です。さらに、残りの7個の命令からなる2番目のサブセットであるSSE4.2は、 NehalemベースのCore i7で初めて利用可能です。Intelは、開発者からのフィードバックが命令セットの開発において重要な役割を果たしたと考えています
Barcelonaベースのプロセッサから、 AMD は4 つの SSE4 命令と 4 つの新しい SSE 命令を含むSSE4a命令セットを導入しました。これらの命令は SSE4.1 をサポートする Intel プロセッサには搭載されておらず、AMD プロセッサはBulldozerベースの FX プロセッサでのみ Intel の SSE4.1 および SSE4.2 (完全な SSE4 命令セット) のサポートを開始しました。SSE4a ではミスアライン SSE 機能も導入され、アラインされていないロード命令はアラインされたアドレスのアラインされたバージョンと同じくらい高速になりました。また、メモリにアクセスする非ロード SSE 操作のアラインメント チェックを無効にすることも可能になりました。[ 4 ] Intel は後に Nehalem プロセッサで非アライン SSE に同様の速度向上を導入しましたが、非ロード SSE 命令によるミスアライン アクセスはAVXまで導入されませんでした。[ 5 ]
名前の混乱
Intel Core 2プロセッサー・ラインで導入された、現在SSSE3(Supplemental Streaming SIMD Extensions 3)として知られているものは、IntelがSSSE3という名称を思いつくまで、一部のメディアではSSE4と呼ばれていました。社内ではMerom New Instructionsと呼ばれていましたが、Intelは当初、特別な名前を付ける予定はなく、一部のジャーナリストから批判されました。[ 6 ] Intelは最終的に混乱を解消し、SSE4という名前を次の命令セット拡張のために予約しました。[ 7 ]
インテルはSSE4を指すのにHD Boostというマーケティング用語を使用しています。 [ 8 ]
新しい命令
これまでのSSEとは異なり、SSE4にはマルチメディアアプリケーションに特化しない操作を実行する命令が含まれています。定数フィールドによって動作が決定される多数の命令と、XMM0を暗黙の第3オペランドとして受け取る一連の命令が特徴です
これらの命令のいくつかは、Penryn のシングル サイクル シャッフル エンジンによって有効になります。(シャッフル操作はレジスタ内のバイトの順序を並べ替えます。)
SSE4.1
これらの命令は、IntelのCoreマイクロアーキテクチャの45nm縮小版であるPenrynマイクロアーキテクチャで導入されました。サポートはCPUID.01H:ECX.SSE41[ビット19]フラグで示されます
| 命令 | 説明 |
|---|---|
MPSADBW | 絶対差のオフセット合計を 4 つずつ 8 つ計算します (つまり、|x 0 −y 0 |+|x 1 −y 1 |+|x 2 −y 2 |+|x 3 −y 3 |、|x 0 −y 1 |+|x 1 −y 2 |+|x 2 −y 3 |+|x 3 −y 4 |、...、|x 0 −y 7 |+|x 1 −y 8 |+|x 2 −y 9 |+|x 3 −y 10 |)。この操作は一部のHDコーデックにとって重要であり、8×8 ブロックの差を 7 サイクル未満で計算できるようになります。[ 9 ] 3ビットの即値オペランドの1ビットは、宛先オペランドからy 0 .. y 10またはy 4 .. y 14のいずれを使用するかを示し、他の2ビットはソースからx 0 ..x 3、x 4 ..x 7、x 8 ..x 11またはx 12 ..x 15のいずれを使用するかを示します。 |
PHMINPOSUW | 宛先の最下位の符号なし 16 ビット ワードをソース内の最小の符号なし 16 ビット ワードに設定し、下から次のワードをソース内のそのワードのインデックスに設定します。 |
PMULDQ | パックされた 32 ビットの符号付き "long" 乗算。4 つのパックされた整数のうち 2 つ (1 番目と 3 番目) を乗算して、2 つのパックされた 64 ビットの結果を生成します。 |
PMULLD | パックされた 32 ビットの符号付き「低」乗算。4 つのパックされた整数セットを乗算して、4 つのパックされた 32 ビットの結果を生成します。 |
DPPS、DPPD | AOS(構造体配列)データのドット積。これは、入力のどのエントリを乗算して累算するかを選択するための4ビット(DPPDの場合は2ビット)の即値オペランドと、出力の適切なフィールドに0を入れるかドット積を入れるかを選択するための4ビット(DPPDの場合は2ビット)の即値オペランドを取ります |
BLENDPS、、、、、、BLENDPDBLENDVPSBLENDVPDPBLENDVBPBLENDW | 非 V 形式の場合、即値オペランドのビットに基づいて、また (V 形式の場合) レジスタ XMM0 のビットに基づいて、ある場所の要素を別の場所へ条件付きでコピーします。 |
PMINSB、、、、、、、、、PMAXSBPMINUWPMAXUWPMINUDPMAXUDPMINSDPMAXSD | 異なる整数オペランド型のパックされた最小値/最大値 |
ROUNDPS、、、、ROUNDSSROUNDPDROUNDSD | 浮動小数点レジスタの値を、即値オペランドで指定された4つの丸めモードのいずれかを使用して整数に丸めます。 |
INSERTPS、、/ 、、、、PINSRBPINSRDPINSRQEXTRACTPSPEXTRBPEXTRD/PEXTRQ | INSERTPS命令とPINSR命令は、x86レジスタまたはメモリから8ビット、16ビット、または32ビットを読み取り、即値オペランドで指定されたデスティネーションレジスタのフィールドに挿入します。EXTRACTPS命令とPEXTR命令は、ソースレジスタからフィールドを読み取り、x86レジスタまたはメモリに挿入します。例えば、PEXTRD eax, [xmm0], 1; EXTRACTPS [addr+4*eax], xmm1, 1 は、xmm1の最初のフィールドをxmm0の最初のフィールドで指定されたアドレスに格納します。 |
PMOVSXBW、、、、、、、、、、、、、、PMOVZXBWPMOVSXBDPMOVZXBDPMOVSXBQPMOVZXBQPMOVSXWDPMOVZXWDPMOVSXWQPMOVZXWQPMOVSXDQPMOVZXDQ | より広い型へのパックされた符号/ゼロ拡張 |
PTEST | これは、オペランド間の AND の結果にZ フラグをTEST設定するという点で、命令に似ています。つまり、DEST AND SRC が 0 に等しい場合、ZF が設定されます。さらに、(NOT DEST) AND SRC が 0 に等しい場合は、C フラグが設定されます。 これは、SRC によってマスクされたビットがまったく設定されていない場合に Z フラグを設定し、SRC によってマスクされたビットがすべて設定されている場合に C フラグを設定することと同じです。 |
PCMPEQQ | クワッドワード(64ビット)の等価性の比較 |
PACKUSDW | 符号付き DWORD を飽和状態で符号なし WORD に変換します。 |
MOVNTDQA | 書き込み結合メモリ領域から SSE レジスタへの効率的な読み取り。これは、メモリ バスに接続された周辺機器から結果を取得するのに役立ちます。 |
SSE4.2
SSE4.2では、STTNI(文字列およびテキストの新命令)[ 10 ]と、 16バイトの2つのオペランドに対して一度に文字検索と比較を実行するいくつかの新しい命令が追加されました。これらは(とりわけ)XML文書の解析を高速化するために設計されました。[ 11 ] また、特定のデータ転送プロトコルで使用される巡回冗長検査CRC32を計算する命令も追加されました。これらの命令は、 NehalemベースのIntel Core i7製品ラインで初めて実装され、SSE4命令セットを完成させました。一方、AMDはBulldozerマイクロアーキテクチャから最初にサポートを追加しました。サポートはCPUID.01H:ECX.SSE42[ビット20]フラグによって示されます
Windows 11 24H2ではCPUがSSE4.2をサポートしている必要があります。そうでない場合、Windowsカーネルは起動できません。[ 12 ]
| 命令 | 説明 |
|---|---|
CRC32 | 多項式0x11EDC6F41(または上位ビットを除いた0x1EDC6F41)を使用してCRC-32C値を累積します。 [ 13 ] [ 14 ] |
PCMPESTRI | 明示的な長さの文字列をパック比較し、インデックスを返す |
PCMPESTRM | 明示的な長さの文字列をパック比較し、マスクを返す |
PCMPISTRI | 暗黙的な長さの文字列をパック比較し、インデックスを返す |
PCMPISTRM | 暗黙的な長さの文字列をパック比較し、マスクを返す |
PCMPGTQ | パックされた符号付き64ビットデータを比較して、より大きいかどうかを調べる |
POPCNTそしてLZCNT
これらの命令はSIMD命令ではないため、SSEレジスタではなく整数レジスタを操作します。AMDはSSE4a命令セットで同時に導入しましたが、サポートを示す専用のCPUIDビットを持つ個別の拡張機能としてカウントされます。IntelはNehalemPOPCNTマイクロアーキテクチャ以降、Haswellマイクロアーキテクチャ以降で実装しています。AMDはBarcelonaマイクロアーキテクチャ以降、両方を実装しています。 LZCNT
AMD はこの命令ペアをAdvanced Bit Manipulation (ABM)と呼んでいます。
のエンコーディングは、 (ビットスキャン逆)命令LZCNTのエンコーディングと同じエンコーディングパスを辿りますBSR。そのため、LZCNTHaswell以前のIntel CPUなど、これをサポートしていない一部のCPUで呼び出された場合、無効命令BSR例外を発生させる代わりに、演算が誤って実行されるという問題が発生します。これは、との結果値が異なるために発生します。 LZCNTBSR
BSF末尾のゼロは、 (ビット スキャン フォワード) 命令または命令を使用してカウントできますTZCNT。
Windows 11 24H2ではCPUがをサポートしている必要がありPOPCNT、そうでなければWindowsカーネルは起動できません。[ 15 ]
| 命令 | 説明 |
|---|---|
POPCNT | ポピュレーションカウント(1に設定されているビットの数をカウント)。サポートの有無はCPUID.01H:ECX.POPCNT[ビット23]フラグで示されます。[ 16 ] |
LZCNT | 先頭のゼロカウント。サポートはCPUID.80000001H:ECX.ABM[ビット5]フラグで示される。[ 17 ] |
SSE4a
SSE4a命令グループは、AMDのBarcelonaマイクロアーキテクチャで導入されました。これらの命令はIntelプロセッサでは使用できません。サポートの有無はCPUID.80000001H:ECX.SSE4A[ビット6]フラグで示されます。[ 17 ]
| 命令 | 説明 |
|---|---|
EXTRQ/INSERTQ | マスクシフト命令の組み合わせ。[ 18 ] |
MOVNTSD/MOVNTSS | Scalarストリーミングストアの手順。[ 19 ] |
参照
参考文献
- ^ a b c IntelストリーミングSIMD拡張命令4(SSE4)命令セットイノベーション、 2009年5月30日アーカイブ、Wayback Machine、Intel
- ^ 45nm 次世代 Intel Core マイクロアーキテクチャ向け Intel SSE4 のチューニングArchived March 8, 2021, at the Wayback Machine , Intel.
- ^ 「Intel SSE4 プログラミング・リファレンス」(PDF)。2020年2月15日時点のオリジナルよりアーカイブ(PDF) 。 2014年12月26日閲覧。
- ^ "「バルセロナ」プロセッサ機能:SSEミスアラインアクセス。AMD。2016年8月9日時点のオリジナルよりアーカイブ。2015年3月3日閲覧。
- ^ “Inside Intel Nehalem Microarchitecture” . 2015年4月2日時点のオリジナルよりアーカイブ。2015年3月3日閲覧。
- ^「コンロー」での私の経験アーカイブ済み2013年10月15日、 Wayback Machine、DailyTech
- ^世界で最も人気のあるプロセッサアーキテクチャの拡張、Intel
- ^ 「Intel - データセンターソリューション、IoT、PCイノベーション」 Intel 2013年2月7日時点のオリジナルよりアーカイブ。2009年9月17日閲覧。
- ^ Intel Streaming SIMD Extensions 4 (Intel SSE4) を使用したモーション推定、Wayback Machineで 2018 年 6 月 16 日にアーカイブ、Intel。
- ^ 「Intel Streaming SIMD Extensions 4 (Intel SSE4) によるスキーマ検証」。2018年6月17日時点のオリジナルよりアーカイブ。2012年2月6日閲覧。
- ^ 「XML Parsing Accelerator with Intel Streaming SIMD Extensions 4 (Intel SSE4)」。2018年6月17日時点のオリジナルよりアーカイブ。2012年2月6日閲覧。
- ^ Klotz, Aaron (2024年4月24日). 「Microsoft、一部のPCでWindows 11 24H2をブロック — CPUがSSE4.2をサポートしていないとOSが起動しない」 . Tom's Hardware . 2024年4月29日閲覧。
- ^ Intel SSE4 プログラミング・リファレンスArchived February 15, 2020, at the Wayback Machine p. 61。CRC32C多項式に関する議論については、 RFC 3385 Archived June 19, 2008, at the Wayback Machineも参照。
- ^ Nehalem CRC32命令を用いた高速並列CRC計算— Dr. Dobbs、2011年4月12日
- ^ Sen, Sayan (2024年3月17日). 「MicrosoftがPopCntブロックの誤動作を修正、しかしWindows 11 24H2の要件は今後も維持される可能性」 . Neowin . 2024年3月17日閲覧。
- ^ Intel 64 および IA-32 アーキテクチャー・ソフトウェア開発者マニュアル、第 2B 巻: 命令セット・リファレンス、N - Z、 2011 年 3 月 8 日アーカイブ、 Wayback Machine。
- ^ a b「AMD CPUID仕様」(PDF)。2013年11月1日時点のオリジナルよりアーカイブ(PDF) 。 2013年10月30日閲覧。
- ^ラーフル・チャトゥルヴェディ (2007 年 9 月 17 日)。」「バルセロナ」プロセッサの機能:SSE4a命令セット。2013年10月25日時点のオリジナルよりアーカイブ。
- ^ Rahul Chaturvedi (2007年10月2日) .「バルセロナ」プロセッサ機能: SSE4a、パート2。 2013年10月25日時点のオリジナルよりアーカイブ。
外部リンク
- IntelによるSSE4プログラミング・リファレンス
- SSE 4.2文字列命令用のPCMPSTR計算機は、 2022年5月10日にGhostarchive.orgにアーカイブされています