MMX

MMXは、インテルが同社のPentiumプロセッサ向けに開発したSIMD型拡張命令セットである。56個の命令を含む。MMXは、MultiMedia eXtensionsの略であるとの説があったが、インテルは、略語ではない一つの語であるとしている。

概要 
MMXは、x87 FPUのレジスタを転用し、1つの命令で同時に複数の整数演算を扱うSIMD型命令拡張である。MMXレジスタはFPUレジスタを共有するため、浮動小数点演算命令とは排他的に使用しなければならない。オペレーティングシステム (OS) がプロセス（スレッド）のコンテキストを保存する際には、MMX命令を使用するプロセスはFPU命令を使用しているものと同様に見え、同様にレジスタを保存すれば良い。デジタルシグナルプロセッサ (DSP) の得意分野である音声、画像、動画などのマルチメディア関係の処理を、CPUで扱う際の性能向上が期待されたが、アプリケーションソフトウェア側がMMXを用いるようにプログラムされていなければ、MMXによる性能向上の恩恵は受けられない。

後に、専用のレジスタを使うSSE命令セットが拡張され、より複雑なデータ処理や浮動小数点の演算にも対応した。さらにSSE2では128ビット整数演算の命令も追加された。実質的にMMXは不要となったため、インテルではアプリケーション開発の最適化にあたってMMXの使用を避けることを推奨している。SSE命令の搭載以降、命令の種類や処理能力で劣るMMX命令は、主に過去の資産との互換性のみを目的に実装・提供されている。

インテルはまず、すでにリリースしていたPentiumの新バージョン (開発コードネーム P55C) にMMXを搭載、Pentium Processor with MMX Technologyと称して発売した。一般にはMMX Pentiumという呼称で浸透した。インテルは、これ以降に発売したIA-32アーキテクチャのプロセッサの多くに、MMXを搭載している。また、他のメーカーのIA-32互換プロセッサのいくつかにも搭載されている。例えば、AMDのK6などである。インテルは他社がMMXという名称を使用していることに対し、これを停止するよう求め訴訟に発展したが、最終的には各社間で和解した。

性能と限界 
MMXは元々、（当時の）一般的なアプリケーションにおいて常用されることの少ない浮動小数点演算のレジスタの有効利用の観点から発想された。x87命令とMMX命令とを混在させる場合、最初のMMX命令の実行時に必要な初期化が自動で行われるが、その後でまたx87命令を実行する場合、その前にEMMS命令を実行して状態をクリアする必要がある。EMMS命令はPentiumでは数十サイクルを要した。それぞれの実行における、レジスタの状態は維持や保存はされない。他方、新たに専用レジスタを増やさず既存のx87のレジスタを流用したため、コンテキストスイッチごとの新設レジスタのセーブなどのOSによるサポートを待つ必要はなかった。

また、MMXによって高速化できるのは整数演算処理に限られ、浮動小数点演算処理を多用する3Dグラフィックス関連の処理能力の向上は期待できない。インテルと競合するAMDは、先んじて浮動小数点演算も扱えるSIMD拡張命令セット3DNow!を発表し、同社のK6-2プロセッサに搭載。インテルはAMDより浮動小数点用のSIMD命令セットの提供に遅れをとった。インテルの浮動小数点SIMD演算による高速化はPentium III以降に搭載されるSSEを待つこととなる。

歴史 
 1997年 1月: インテルがMMX Pentiumを発表。
 1997年 4月: AMDがMMXに対応したK6プロセッサを発表。
 1997年 5月: インテルがPentium ProにMMXを付加し高速化したPentium IIプロセッサを発表。
 1997年 5月: IDTがMMXに対応したWinChip C6を発表。
 1997年 5月: Cyrixが6x86にMMXを追加した6x86MX (M II) を発表。

 対抗（競合）機能登場
 1998年 5月: AMDが浮動小数点演算処理を高速化する3DNow!搭載のK6-2プロセッサを発表。

 自社による後継機能発表
 1999年 2月: インテルが浮動小数点演算処理を高速化するストリーミングSIMD拡張命令 (SSE) 搭載のPentium IIIプロセッサを発表。

脚注

注釈

出典

関連項目 

Pentium F00F バグ
SIMD
ストリーミングSIMD拡張命令 (SSE)
3DNow!
AltiVec (Velocity Engine)

CPU
並列コンピューティング
SIMDコンピューティング
X86アーキテクチャ