はじめに
MMXテクノロジー(以下、MMXと略記)は1997年1月9日にIntelが正式発表※1した「Pentium Processor with MMX Technology(日本での通称MMX Pentium、英語圏ではPentium MMX)」にIA-32史上初めて搭載された、SIMD(Single Instruction Multiple Data : 1命令複数データ処理)命令です。
MMX自体は、もう少し早く1996年3月か4月くらいには発表されていたはずです。※2 そのため、MMX Pentiumの発売前に対応ソフトウェアが発表される※3などしていました。
特徴は、
- SIMDであり1命令で複数のデータを同時に処理できること
- データのあふれに対してキャップをかけられること
- 対象となるデータは整数演算に限られること
- 使用するレジスターはFPUと兼用であること
などです。
誤解の内容
よくある誤解は、MMXは整数演算用ということで、現在浮動小数点で計算している類の計算が一切できないというものです。実際には精度が許す範囲で固定小数点による演算を行ったり、計算前後に補正をかけたりするなどの手法を用いることで、多くのパターンの演算を行うことができます。
この誤解は結構広まっているようで、本稿を書いている2013年8月15日現在、Googleで「MMX」を検索するとトップに出てくるWikipedia日本語版のMMX項※4に、長らく修正されることなく以下の記載がされています。
また、MMXによって高速化できるのは整数演算処理に限られ、浮動小数点演算処理を多用する3Dグラフィックス関連の処理能力の向上は期待できない。
このように、完全に言いきりで「3Dグラフィックス関連」の処理能力向上はできないと記載しています。確かに厳密に文脈を解するなら、「浮動小数点演算処理」の高速化は困難です。しかし一方で「3Dグラフィックス関連の処理能力の向上」には効果があります。というのも、MMXはその設計の段階で3Dグラフィックスに大きくフォーカスされており、MMXの発表と同時に公開された資料には3Dに関するものが数多くあります。
その当時の資料(1996年3月付けの資料)がないかと検索で探したところ、いくつか見つかったので以下にリンクを示します:
- Using MMX™ Instructions for Procedural Texture Mapping(PDF)
- Using MMX™ Instructions to Implement Bilinear Interpolation of Video RGB Values(PDF)
- Using MMX™ Instructions for 3D Bilinear Texture Mapping(PDF)
- Advanced Procedural Texturing Using MMX™ Technology(PDF)
- MMX™ Technology for 3D Rendering(PDF)
- Using MMX™ Instructions to Perform 3D Geometry Transformations(PDF)
このように座標(ジオメトリやトランスフォーム)からテクスチャ、レンダリングまで資料が網羅されています。このことが証明するように、3DグラフィックスにMMXの効果がないというのは完全な誤解です。
また、座標計算を高精度で行う必要があって、MMXを適用しにくい場合にはその部分(主にTrasnform and Lighting)だけをFPUで計算し、テクスチャとレンダリング処理のみにMMXを採用するという方法もあります。※5
その他にもいろいろな資料が公開されているので、興味があるようでしたらGoogleの検索で通常のキーワードに「site:software.intel.com
」を付けていろいろと検索してみるとよいかと思います。
実際のソフトウェアにおけるMMXの3Dグラフィックスでの応用例
- Microsoftは1996年8月にDirect3DをMMX対応にしたというプレスリリースを出しています。
- 1997年6月13日に発売されたセガの3Dゲーム「電脳戦機バーチャロン」にはMMX専用版がありました。
- 最近の例ではセガサターンエミュレーター「SSF」がMMXを使用して、3Dグラフィックスを描画していることを明記しています。
まとめ
このように、工夫次第で3Dグラフィックスなど、通常は浮動小数点を必要とする演算も固定小数点演算などで代替できるものが多くあります。MMXでも工夫次第でいろいろな計算ができるという例を示すことで、MMXでは整数演算関連「のみ」にしか応用できないという誤解を払しょくできればと思います。
- この発表前の1996年10月22日にIntelがMicroprocessor Forumで概要を発表をしたため、この日を発表日とすることもあります。
- 現在ではそのリソースを発見することはできませんでした。
- 例:PC Watchに1996年09月11日に掲載された「アドビ、Adobe Photoshop 4.0(英語版)発表」など
- 後日変更される可能性があるので念のため2013年8月15日現在での最新版への直接リンクも示しておきます。
- FPUとMMXの切り替えにかかるクロック数を気にする方がいらっしゃるかもしれませんが、固定パイプラインのレンダリングでは、先に座標関連(ローカル座標での処理、カメラ座標の計算、光源の計算、ワールド座標への転換と頂点のライティング計算と法線の計算、ビュー座標への転換と2D座標化)を処理し、その後テクスチャ、レンダリングへと移っていくため、1フレームあたりの切り替えの回数は「数えることができるほど(整理すれば1回のみ)」と少なく、あまり気にする必要はありません。