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メモリ)を表しています。
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 |
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 しかありません。
|
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]
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
2005年06月23日
ForceWare 77.72
GeForce の新しいドライバがリリースされました。
http://www.nvidia.com/object/winxp_2k_77.72.html
Developer News Letter からの情報です。news letter はこちらです。
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
Microsoft® DirectX® 9.0 SDK Update (June 2005)
2005 年 6 月 7 日付けで DirectX 9.0 SDK が更新されています(日本サイト)。
http://www.microsoft.com/japan/msdn/directx/downloads.asp