2005年07月16日

MMX (3) - register -

最初に書くべきですが、ここで MMX としている内容には SSE, SSE2 の内容も含められています(調べて気がつきました)。
ですが 2005 年になって書くような感じですので既に Pentium4 全盛、celeron にすら SSE2 が入ってます。web をまわっていると MMX, SSE, SSE2 に関して説明しているサイトがあるのですが、レジスタの大きさなども統一された形で書かれたものがなかったのでまとめているような感じです。

MMX レジスタ

63 0
64bit mm7
64bit mm6
64bit mm5
64bit mm4
64bit mm3
64bit mm2
64bit mm1
64bit mm0

SSE レジスタ

127 0
128bit xmm7
128bit xmm6
128bit xmm5
128bit xmm4
128bit xmm3
128bit xmm2
128bit xmm1
128bit xmm0

特に断ってありませんでしたが、長い方が 128bit の xmm レジスタ(または128bitメモリ)、短いほうが 64bit の mm レジスタ(または64bitメモリ)を表しています。


投稿者 napier : 19:55 | トラックバック


MMX (2) - Shuffle -

Shuffle に関して。これはデータの配置替えのような処理です。

Shuffle Packed Words

pshufw mm0,mm1,imm8
* * * * mm0
W3 W2 W1 W0 mm1
↓Wj = shuffle( Wi ) [例えば、imm8=0x1b (0,1,2,3) の場合]
W0 W1 W2 W3 mm0

Shuffle Packed Doublewords

pshufd xmm0,xmm1,imm8
* * * * xmm0
D3 D2 D1 D0 xmm1
↓Dj = shuffle( Di ) [例えば、imm8=0x1b (0,1,2,3) の場合]
D0 D1 D2 D3 xmm0

Shuffle Packed High Words

pshufhw xmm0,xmm1,imm8
* * * * w3 w2 w1 w0 xmm0
W7 W6 W5 W4 * * * * xmm1
↓Wj = shuffle( Wi ) [例えば、imm8=0x1b (0,1,2,3) の場合]
W4 W5 W6 W7 w3 w2 w1 w0 xmm0

Shuffle Packed Low Words

pshuflw xmm0,xmm1,imm8
w7 w6 w5 w4 * * * * xmm0
* * * * W3 W2 W1 W0 xmm1
↓Wj = shuffle( Wi ) [例えば、imm8=0x1b (0,1,2,3) の場合]
w7 w6 w5 w4 W0 W1 W2 W3 xmm0


投稿者 napier : 13:56 | トラックバック


2005年07月14日

MMX

Unpack/Pack に関して。でもこれ、対照的でないので合わせて書いていいものかどうか。。。

Unpack Low Data

punpcklbw mm0,mm1
* * * * b3 b2 b1 b0 mm0
* * * * B3 B2 B1 B0 mm1
B3 b3 B2 b2 B1 b1 B0 b0 mm0

punpcklbw xmm0,xmm1
* * * * * * * * b7 b6 b5 b4 b3 b2 b1 b0 xmm0
* * * * * * * * B7 B6 B5 B4 B3 B2 B1 B0 xmm1
B7 b7 B6 b6 B5 b5 B4 b4 B3 b3 B2 b2 B1 b1 B0 b0 xmm0


punpcklwd mm0,mm1
* * w1 w0 mm0
* * W1 W0 mm1
W1 w1 W0 w0 mm0

punpcklwd xmm0,xmm1
* * * * w3 w2 w1 w0 xmm0
* * * * W3 W2 W1 W0 xmm1
W3 w3 W2 w2 W1 w1 W0 w0 xmm0


punpckldq mm0,mm1
* d0 mm0
* D0 mm1
D0 d0 mm0

punpckldq xmm0,xmm1
* * d1 d0 xmm0
* * D1 D0 xmm1
D1 d1 D0 d0 xmm0


punpcklqdq xmm0,xmm1
* q0 xmm0
* Q0 xmm1
Q0 q0 xmm0

Unpack High Data

punpckhbw mm0,mm1
b7 b6 b5 b4 * * * * mm0
B7 B6 B5 B4 * * * * mm1
B7 b7 B6 b6 B5 b5 B4 b4 mm0

punpckhbw xmm0,xmm1
b15 b14 b13 b12 b11 b10 b9 b8 * * * * * * * * xmm0
B15 B14 B13 B12 B11 B10 B9 B8 * * * * * * * * xmm1
B15 b15 B14 b14 B13 b13 B12 b12 B11 b11 B10 b10 B9 b9 B8 b8 xmm0


punpckhwd mm0,mm1
w3 w2 * * mm0
W3 W2 * * mm1
W3 w3 W2 w2 mm0

punpckhwd xmm0,xmm1
w7 w6 w5 w4 * * * * xmm0
W7 W6 W5 W4 * * * * xmm1
W7 w7 W6 w6 W5 w5 W4 w4 xmm0


punpckhdq mm0,mm1
d1 * mm0
D1 * mm1
D1 d1 mm0

punpckhdq xmm0,xmm1
d3 d2 * * xmm0
D3 D2 * * xmm1
D3 d3 D2 d2 xmm0


punpckhqdq xmm0,xmm1
q1 * xmm0
Q1 * xmm1
Q1 q1 xmm0


Pack with Signed Saturation

packsswb mm0,mm1
w3 w2 w1 w0 mm0
W3 W2 W1 W0 mm1
↓bj = SaturateSignedWordToSignedByte( wi )
B7' B6' B5' B4' b3' b2' b1' b0' mm0

packsswb xmm0,xmm1
w7 w6 w5 w4 w3 w2 w1 w0 xmm0
W7 W6 W5 W4 W3 W2 W1 W0 xmm1
↓bj = SaturateSignedWordToSignedByte( wi )
B7' B6' B5' B4' B3' B2' B1' B0' b7' b6' b5' b4' b3' b2' b1' b0' xmm0

packssdw mm0,mm1
d1 d0 mm0
D1 D0 mm1
↓wj = SaturateSignedDoublewordToSignedWord( di )
W1' W0' w1' w0' mm0

packssdw xmm0,xmm1
d3 d2 d1 d0 xmm0
D3 D2 D1 D0 xmm1
↓wj = SaturateSignedDoublewordToSignedWord( di )
W3' W2' W1' W0' w3' w2' w1' w0' xmm0

Pack with Unsigned Saturation

packuswb mm0,mm1
packuswb xmm0,xmm1
これらは符合無しになるだけで飽和付き符合有りパック演算と同じですが、命令には packuswb しかありません。
Pack with Signed Saturation Pack with Unsigned Saturation
byte packsswb packuswb
word packssdw packusdw(存在せず?)


投稿者 napier : 11:47 | トラックバック


2005年07月11日

Intel

MMX, SSE, SSE2 などを調べていたらどんどんディープな方向に進んでいき、たどり着いたところは Intel の日本語技術資料でした。

日本語技術資料ダウンロード
http://www.intel.co.jp/jp/developer/download/

膨大な数のドキュメントがあり、とりあえずため息が出ます。当面必要そうなのをピックアップすると、

  • IA-32 インテル® アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル、上巻: 基本アーキテクチャ [日本語: PDF 形式 5,411KB] [ia32_arh_dev_man_vol1_online_i.pdf]
  • IA-32 インテル® アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル、中巻 A: 命令セット・リファレンス A-M [日本語: PDF 形式 5,251KB] [ia32_arh_dev_man_vol2a_i.pdf]
  • IA-32 インテル® アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル、中巻 B: 命令セット・リファレンス N-Z [日本語: PDF 形式 4,215KB] [ia32_arh_dev_man_vol2b_i.pdf]
  • IA-32 インテル® アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル、下巻: システム・プログラミング・ガイド [日本語: PDF 形式 9,669KB] [ia32_arh_dev_man_vol3_i.pdf]
  • AP-589 ストリーミング SIMD 拡張命令のソフトウェア規則 [日本語: PDF 形式 61KB] [swconv_j.pdf]
  • AP-900 プロセッサおよびオペレーティング・システムのストリーミング SIMD 拡張命令のサポートの判定 [日本語: PDF 形式 35KB] [cpuosld_j.doc.pdf]
  • AP-943 インテル® アーキテクチャ (IA) 浮動小数点ユニット (FPU)、ストリーミング SIMD 拡張命令 (SSE)、ストリーミング SIMD 拡張命令2 (SSE2) を使用した浮動小数点算術演算 [日本語: PDF 形式 386KB] [w_fp_precision_j.pdf]
  • C++ SIMD 命令 クラス・ライブラリ: リファレンス・マニュアル [日本語: PDF 形式 612KB] [fvecfcs_j.pdf]

でしょうか。この C++ SIMD 命令クラス・スライブラリは Processor Pack 5.0 をインストールすれば使えるライブラリのようです。

以下、膨大な資料・・・。

IA-32 アーキテクチャ

  • インテル® エクステンデッド・メモリ 64 テクノロジ・ソフトウェア・デベロッパーズ・ガイド、第1巻 [日本語: PDF 形式 3,637KB]
  • インテル® エクステンデッド・メモリ 64 テクノロジ・ソフトウェア・デベロッパーズ・ガイド、第2巻 [日本語: PDF 形式 2,980KB]
  • IA-32 インテル® アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル、上巻: 基本アーキテクチャ [日本語: PDF 形式 5,411KB]
  • IA-32 インテル® アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル、中巻 A: 命令セット・リファレンス A-M [日本語: PDF 形式 5,251KB]
  • IA-32 インテル® アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル、中巻 B: 命令セット・リファレンス N-Z [日本語: PDF 形式 4,215KB]
  • IA-32 インテル® アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル、下巻: システム・プログラミング・ガイド [日本語: PDF 形式 9,669KB]
  • インテル® Xeon™ プロセッサ 製品概要 [日本語: PDF 形式 349KB]
  • 購入ガイド: 533MHz システムバス搭載 インテル® Xeon™ プロセッサ [日本語: PDF 形式 423KB]
  • インテル® Pentium® 4 プロセッサおよびインテル® Xeon™ プロセッサ最適化リファレンス・マニュアル [日本語: PDF 形式 3,852KB]
  • ハイパー・スレッディング・テクノロジのアーキテクチャとマイクロアーキテクチャ [日本語: PDF 形式 98KB]
  • ハイパー・スレッディング・テクノロジのプリシリコン検証 [日本語: PDF 形式 53KB]
  • スペキュレーティブ・プリコンピュテーション: マルチスレッディング・リソースの活用によるレイテンシの削減 [日本語: PDF 形式 118KB]
  • ハイパー・スレッディング・テクノロジ対応インテル® Pentium® 4 プロセッサ [日本語: PDF 形式 371KB]
  • IA-32 命令のレイテンシとスループット [日本語: PDF 形式 159KB]
  • Application Communications Enhancements for Mobility ホワイト・ペーパー [日本語: PDF 形式 1,325KB]
  • Application Power Management for Mobility ホワイト・ペーパー [日本語: PDF 形式 670KB]
  • インテル® アーキテクチャ最適化リファレンス・マニュアル [日本語: PDF 形式 2,934KB]
  • Pentium® III プロセッサのパフォーマンスを最大限に活かす 3D ソフトウェア・スタック・アーキテクチャ [日本語: PDF 形式 85KB]
  • Pentium® III プロセッサの実装条件 [日本語: PDF 形式 126KB]
  • Pentium® III プロセッサのシリアル番号機能とその活用 [日本語: PDF 形式 44KB]
  • インターネット・ストリーミング SIMD 拡張命令 [日本語: PDF 形式 74KB]
  • インターネット・ストリーミング SIMD 拡張命令を考慮したアプリケーション・チューニング [日本語: PDF 形式 175KB]
  • インテル・アーキテクチャ最適化マニュアル [日本語: PDF 形式 820KB]
  • AP-485 インテル® プロセッサの識別と CPUID 命令 [日本語: PDF 形式 688KB]
  • AP-589 ストリーミング SIMD 拡張命令のソフトウェア規則 [日本語: PDF 形式 61KB]
  • AP-900 プロセッサおよびオペレーティング・システムのストリーミング SIMD 拡張命令のサポートの判定 [日本語: PDF 形式 35KB]
  • AP-935 ストリーミング SIMD 拡張命令2 (SSE2) を使用した SAXPY/DAXPY [日本語: PDF 形式 100KB]
  • AP-936 ストリーミング SIMD 拡張命令2 (SSE2) を使用した遺伝的 2進アルゴリズムの一点交叉演算 [日本語: PDF 形式 114KB]
  • AP-937 ストリーミング SIMD 拡張命令2 (SSE2) を使用した、倍精度浮動小数点ベクトルの最大/最小要素とそのインデックスの検出 [日本語: PDF 形式 147KB]
  • AP-939 ストリーミング SIMD 拡張命令2 (SSE2) を使用した 3D トランスフォーメーション [日本語: PDF 形式 162KB]
  • AP-940 ストリーミング SIMD 拡張命令2 (SSE2) を使用したブロック・マッチング、動体予測アルゴリズム [日本語: PDF 形式 120KB]
  • AP-941 ストリーミング SIMD 拡張命令2 (SSE2) を使用した大数の乗算の実行 [日本語: PDF 形式 126KB]
  • AP-942 ストリーミング SIMD 拡張命令2 (SSE2) を使用したビデオ・デコード/エンコードのためのモーション補正 [日本語: PDF 形式 386KB]
  • AP-943 インテル® アーキテクチャ (IA) 浮動小数点ユニット (FPU)、ストリーミング SIMD 拡張命令 (SSE)、ストリーミング SIMD 拡張命令2 (SSE2) を使用した浮動小数点算術演算 [日本語: PDF 形式 386KB]
  • AP-944 Pentium® III プロセッサと Pentium 4 プロセッサにおける NURBS (non-uniform rational B-spline) 曲面での高速化のパフォーマンス比較 [日本語: PDF 形式 311KB]
  • AP-945 ストリーミング SIMD 拡張命令2 (SSE2) を使用した逆離散コサイン変換 [日本語: PDF 形式 274KB]
  • AP-946 ストリーミング SIMD 拡張命令2 (SSE2) を使用した Viterbi デコーディングでの隠れマルコフ・モデルの評価 [日本語: PDF 形式 329KB]
  • AP-949 インテル® Pentium® 4 プロセッサおよびインテル® Xeon™ プロセッサにおけるスピン・ループの使用 [日本語: PDF 形式 103KB]

ソフトウェア開発製品

  • インテル® アーキテクチャ対応 インテル® インテグレーテッド・パフォーマンス・プリミティブ (IPP): リファレンス・マニュアル、第1巻: 信号処理 [日本語: PDF 形式 6,296KB]
  • インテル® アーキテクチャ対応 インテル® インテグレーテッド・パフォーマンス・プリミティブ (IPP) : リファレンス・マニュアル、第2巻: 画像および動画処理 [日本語: PDF 形式 7,865KB]
  • インテル® アーキテクチャ対応 インテル® インテグレーテッド・パフォーマンス・プリミティブ (IPP) : リファレンス・マニュアル、第3巻: 小行列 [日本語: PDF 形式 13,762KB]
  • インテル® ソフトウェア開発製品 製品カタログ [日本語: PDF 形式 3,141KB]
  • マルチスレッド・アプリケーションの開発 [日本語: PDF 形式 2,429KB]
  • インテル® Pentium® 4 プロセッサ向けストリーミング SIMD 拡張命令 2 (SSE2) の紹介 [日本語: ZIP 形式 7,114KB]
  • インテル® 数値演算ライブラリ (MKL) リファレンス・マニュアル [日本語: PDF 形式 6,034KB]
  • インテル® C/C++ コンパイラ V4.0 (ストリーミング SIMD 拡張命令対応): ユーザーズ・ガイド [日本語: PDF 形式 1,417KB]
  • C++ SIMD 命令 クラス・ライブラリ: リファレンス・マニュアル [日本語: PDF 形式 612KB]
  • Itanium® プロセッサ: ソフトウェア規則およびランタイム・アーキテクチャ・ガイド [日本語: PDF 形式 995KB]
  • インテル® Itanium® アーキテクチャ・アセンブラ・ユーザ・ガイド [日本語: PDF 形式 667KB]
  • VTune™ パフォーマンス拡張環境の利用による、Pentium® III プロセッサのインターネット・ストリーミング SIMD 拡張命令を活用するためのプログラミング手法 [日本語: PDF 形式 898KB]


投稿者 napier : 23:49 | トラックバック


2005年06月27日

Radeon SDK June 2005

ATI から Radeon SDK June 2005 がリリースされたようです。
http://www.ati.com/developer/radeonSDK.html
(via spin)

以下のエフェクト、サンプルがあるようです(リリースノートより)

  • Parallax Occlusion Mapping
  • Back Light
  • Parallax Occlusion Mapped Water
  • Normal Map Compression
  • 3Dc
  • EarlyOut
  • HDR
  • HorizonMapping
  • ImageAnalysis
  • Logo
  • Materials
  • Motion blur
  • Parallax mapping
  • Plane shadow mapping
  • Post-processing
  • Soft shadows
  • Stereo/Stereo2
  • Volumetric lighting
  • Instancing


投稿者 napier : 23:39 | トラックバック


2005年06月23日

ForceWare 77.72

GeForce の新しいドライバがリリースされました。
http://www.nvidia.com/object/winxp_2k_77.72.html

Developer News Letter からの情報です。news letter はこちらです。


投稿者 napier : 10:10 | トラックバック


2005年06月10日

Catalyst 5.6

rage3d によりますと ATI の Catalyst ドライバが更新されたようです。
http://www.rage3d.com/index.php?cat=75#newsid33818347
ただ、ATI のサイトが重すぎて確認できません。アクセスが集中してそうです。

確認できました。
https://support.ati.com/ics/support/default.asp?deptID=894


投稿者 napier : 01:26 | トラックバック


Microsoft® DirectX® 9.0 SDK Update (June 2005)

2005 年 6 月 7 日付けで DirectX 9.0 SDK が更新されています(日本サイト)。
http://www.microsoft.com/japan/msdn/directx/downloads.asp


投稿者 napier : 01:13 | トラックバック


Previous Page Next Page, All Pages