SSE 4.1

読み:エスエスイー・よんてんいち
外語:SSE4.1: Streaming SIMD Extensions 4.1 英語
品詞:固有名詞

SSE4のうち、Penrynから搭載された47個の命令のこと。

目次

様々なメディア処理、画像処理、3D処理のパフォーマンス向上を目的とした新命令群である。

前述のような用途向けに特化された命令が多いが、XMMレジスターの任意のビットの挿入・抽出命令や、丸めモードを即値で指定できる丸め命令などの汎用的な命令もある。

  • パックド・ダブルワードの乗算命令×2
  • 積和命令×2
  • ストリーミングヒント命令×1
  • ブレンド命令×6
  • パックド整数の最小値/最大値命令×8
  • 丸め命令×4
  • ビットの挿入・抽出命令×7
  • パックド・整数フォーマット変換×12
  • SAD(Sum absolute difference、差分絶対和)命令×1
  • 最小値抽出命令×1
  • マスク比較命令×1
  • パックド・クアッドワードの比較命令×1
  • ダブルワードの飽和処理パック命令×1

各命令についの詳細は後述する。

機能の有無判別

機能の有無は、EAXレジスターに1を代入してCPUID命令を実行し、ECXレジスターに得られたフラグのビット19が1かどうかで確認できる。

追加命令

パックド・ダブルワードの乗算命令

4つの32ビット×32ビット演算を実行する命令である。

  • pmuldq ‐ 符号付き64ビットを計算結果とする
  • pmulld ‐ 計算結果の下位32ビットを計算結果とする

積和命令

新たな積和演算命令が二つ追加された。

  • dpps ‐ 最大4つの単精度浮動小数点
  • dppd ‐ 2つの倍精度浮動小数点

dpps命令は、2個、3個、4個から任意に選択できる。

ストリーミングヒント命令

CPUのライトコンバイン(WriteCombine)メモリーへのアクセスは遅い。そこで、解決のための新命令が追加された。

  • movntdqa ‐ ストリーミングリード命令

この命令の挙動は、通常のロード命令と同様で、メモリーから16バイトを読み込みレジスターにコピーする命令である。

通常のロード命令と異なるのは、ライトコンバインメモリーからキャッシュラインと同量のデータを一時バッファーにコピーし、そこから16バイトをレジスターにコピーする点にある。このため、後続の命令がロードする対象が一時バッファーに含まれていた場合、一時バッファーの中からデータをコピーするため高速である。

ブレンド命令

ソースオペランドから、同じフィールドのディスティネーションオペランドに値をコピーするブレンディングのための命令が追加されている。

従来、2から4命令必要だったものを1命令で実行できるようにし、処理の効率改善をする。

  • blendps ‐ バックド単精度ブレンド
  • blendpd ‐ バックド倍精度ブレンド
  • blendvps ‐ バックド単精度バリアブルブレンド
  • blendvpd ‐ バックド倍精度バリアブルブレンド
  • pblendvb ‐ バックドbyteバリアブルブレンド
  • pblendw ‐ バックドwordブレンド

パックド整数の最小値/最大値命令

8種類の、パックド整数の最小値/最大値を求める命令が追加された。

  • pminsb ‐ パックドsigned byteの最小値
  • pmaxsb ‐ パックドsigned byteの最大値
  • pminuw ‐ パックドunsigned wordの最小値
  • pmaxuw ‐ パックドunsigned wordの最大値
  • pminud ‐ パックドunsigned dwordの最小値
  • pmaxud ‐ パックドunsigned dwordの最大値
  • pminsd ‐ パックドsigned dwordの最小値
  • pmaxsd ‐ パックドsigned dwordの最大値

既に、画像処理用に8ビット符号なし、音声処理用に16ビット符号ありの命令があったが、今回はこれに新演算が追加されたことになる。

但し制限として、演算のオペランドはXMMレジスターのみである。整数演算の一種ではあるが、MMXレジスターは使用できない。

丸め命令

浮動小数点を丸めて整数にする、4つの丸め命令が追加されている。

  • roundps ‐ パックド単精度浮動小数点の丸め
  • roundss ‐ スカラー単精度浮動小数点の丸め
  • roundpd ‐ パックド倍精度浮動小数点の丸め
  • roundsd ‐ スカラー倍精度浮動小数点の丸め

丸めモードは、現在のモードか、または即値で任意に指定することが可能。丸めモードはIEEE-754の四種類のモード(最近値、−∞方向、+∞方向、切り捨て)に対応する。

これを用いると、床関数floor()や天井関数ceil()が、理論上は一命令で実装することが出来る。

ビットの挿入・抽出命令

GPRおよびXMMレジスター間での単純なデータ挿入/抽出命令が7つ(但しアセンブリ命令のニーモニックとしては9種類)追加されている。

  • extractps ‐ XMMレジスター内の単精度浮動小数点の任意の要素をメモリーまたはGPRに格納する
  • insertps ‐ メモリーまたはXMMレジスターの単精度浮動小数点をXMMレジスターに挿入する。また+0.0をディスティネーションフィールドに格納することも可能
  • pinsrb ‐ R32/64またはメモリーのバイトをXMMレジスターに挿入
  • pinsrd ‐ R32/64またはメモリーのダブルワードをXMMレジスターに挿入
  • pinsrq ‐ R32/64またはメモリーのクアッドワードをXMMレジスターに挿入
  • pextrb ‐ XMMレジスターのバイトを抽出し、R32/64またはメモリーに格納
  • pextrw ‐ XMMレジスターのワードを抽出し、R32/64またはメモリーに格納
  • pextrd ‐ XMMレジスターのダブルワードを抽出し、R32/64またはメモリーに格納
  • pextrq ‐ XMMレジスターのクアッドワードを抽出し、R32/64またはメモリーに格納

ワード以上であっても、メモリーアクセス時のアラインメントは必要ない。

また、pinsrXのワード単位で動作する命令pinsrwは、既にSSE命令セットに存在する。

パックド・整数フォーマット変換

小さなパックド整数を、大きなパックド整数に変換する命令が12個追加されている。

  • pmovsxbw ‐ パックドバイト→ワード拡張(符号あり)
  • pmovzxbw ‐ パックドバイト→ワード拡張(ゼロパディング)
  • pmovsxbd ‐ パックドバイト→ダブルワード拡張(符号あり)
  • pmovzxbd ‐ パックドバイト→ダブルワード拡張(ゼロパディング)
  • pmovsxbq ‐ パックドバイト→クアッドワード拡張(符号あり)
  • pmovzxbq ‐ パックドバイト→クアッドワード拡張(ゼロパディング)
  • pmovxswd ‐ パックドワード→ダブルワード拡張(符号あり)
  • pmovzxwd ‐ パックドワード→ダブルワード拡張(ゼロパディング)
  • pmovsxwq ‐ パックドワード→クアッドワード拡張(符号あり)
  • pmovzxwq ‐ パックドワード→クアッドワード拡張(ゼロパディング)
  • pmovsxdq ‐ パックドダブルワード→クアッドワード拡張(符号あり)
  • pmovzxdq ‐ パックドダブルワード→クアッドワード拡張(ゼロパディング)

符号ありの場合は符号拡張をし、元の整数のMSBで拡張される部分を埋める。ゼロパディングの場合は、拡張部分はゼロで埋める。

オペランドはXMMレジスターもしくはメモリー、ディスティネーションはXMMレジスターである。ワード以上であってもアラインメントは必須ではないが、アラインメントチェックが有効の場合は、メモリー境界を合わせる必要がある。

SAD(Sum absolute difference、差分絶対和)命令

8つの符号なしバイト整数のSADを実行し、一つの符号なしワード整数を得る命令が一つ追加されている。

  • mpsadbw ‐ 差分絶対和

SSE2から搭載されたpsadbwと比較すると、この新命令mpsadbwは内部にソースシフター(Source Shifter)が装備されており、命令一つで8種類のSADが計算できる。このためオペランドにimm8が追加されている。

例えば画像処理で、xmm1に前画像、xmm2に現画像を8ヶ所分指定して実行すれば、8つのSADをまとめてxmm1に返してくれる。従って、例えば8×8サイズのSAD演算を従来とSSE4で比較すると、コード量は1/3程度にまでコンパクトに済むようになる。

最小値抽出命令

8つの符号なしパックドワードから、最小値とその位置を求める命令が追加された。

  • phminposuw ‐ 最小値+位置の抽出 (16ビットワード)

上で紹介したmpsadbw命令は、その結果のワードを8個、XMMレジスターにパックして返す。この命令は、これをまとめて比較し、最小の値とその場所を返す命令である。

この検索を迅速に行なうことは、モーション予測の処理の高速化に繋がり、つまりビデオエンコーディング処理の高速化に寄与する。

結果は、ディスティネーションのビット0〜15に最小値、その最小ワードのインデックスがビット16〜18に格納される。ディスティネーションの残りのビットは(将来的な拡張の可能性はあるが現時点では)ゼロで埋められる。

マスク比較命令

XMMレジスターに対するtest命令が一つ追加された。

  • ptest ‐ same as test, but for sse registers.

ソースとデスティネーションの各XMMレジスター同士をAND演算し、結果をフラグ(CFおよびZF)に格納する命令である。XMMレジスターの内容は変化しない。

従来であれば、一旦CPUのレジスターに複写してからtest命令をせざるを得なかった。パックされた整数であれば、例えばpmovmskbなどの命令の後でtest命令を使う、などが一般的である。ptestを使うと、その手間が不要になる。

パックド・クアッドワードの比較命令

パックされた値の比較命令が一つ追加された。

  • pcmpeqq ‐ パックド・クアッドワードの同一比較

この命令は、従来からあるpcmpeqb/pcmpeqw/pcmpeqdなどと同様の処理だが、比較単位がクアッドワードとなる。

ダブルワードの飽和処理パック命令

飽和演算処理の付いた、ダブルワードからワードへの変換命令が一つ追加された。

  • packusdw ‐ 符号ありパックド・ダブルワード→符号なしパックド・ワード変換(飽和付き)

元の符号ありダブルワードが、符号なしワードの範囲外(0xFFFFより大きい、または0より小さい)場合、0xFFFFまたは0x0000がディスティネーションに格納されます(飽和処理)。

用語の所属
マルチメディア命令
SSE4
SSE
関連する用語
SSE 4.2

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club