MMX (Multi Media Extension oder Matrix Multimedia Extension) ist eine von Intel entworfene SIMD-Technik, die es erlaubt, große Integer-Datenmengen, wie sie z. B. bei der Verarbeitung von Video, Audio und Bildern anfallen, schneller zu verarbeiten. Ursprünglich stand das Kürzel MMX für Matrix Math Extensions, wurde allerdings von Intel aus marketingtechnischen Gründen in Multi Media Extension umbenannt.
Intel spendiert, um mit MMX arbeiten zu können, dem Prozessor 57 weitere Befehle und führt vier neue Datenformate ein. Ein Hauptvorteil von MMX ist die so genannte Saturation. Sie bedeutet, dass eine Zahl beim Überschreiten ihres größten oder kleinsten Wertes nicht überläuft, sondern den größten bzw. kleinsten Wert annimmt.
Ein Anwendungsbeispiel: bei einem "Fade-Out"-Effekt von Bildern könnte man beispielsweise immer 2 Pixel mit 32 Bit Farbtiefe gleichzeitig um einen gewissen Wert verdunkeln. Durch die Saturation muss man nicht kontrollieren, ob die Pixel bereits schwarz sind (Beispiele: 0 - 2 = 0 oder 5 − 88 = 0). Dadurch und durch die parallele Verarbeitung mehrerer Werte kann die Geschwindigkeit der Berechnungen erheblich gesteigert werden.
Noch wesentlich weiter entwickelt findet sich dieser Ansatz jedoch in den ASICs (von wo er ursprünglich kommt) sowie in den AltiVec-Einheiten von modernen PowerPC-CPUs – oder auf heutigen Grafikkarten.
Inhaltsverzeichnis |
Mit MMX ist es möglich, bis zu 64-Bit große Integer-Datenpakete auf einmal zu bearbeiten. Hierfür wurden zusätzliche 64-Bit-Register mm0 bis mm7 geschaffen, die allerdings auf die FP-Register gemappt wurden, so dass keine gleichzeitigen MMX- und FP-Operationen möglich sind (s. u.).
In Multitasking-Betriebssystemen müssen bei einem Taskwechsel sämtliche Registerinhalte in einem speziellen Speicherbereich gesichert werden. Da eine Änderung dieses Speicherbereiches von sämtlichen Betriebssystemen hätte unterstützt werden müssen, wurde ein "Trick" eingesetzt, der MMX auch ohne Betriebssystemunterstützung erlaubt: Es wurden nach außen die MMX-Register auf die acht Gleitkomma-Register der FPU abgebildet. Damit sind die eigentlichen FPU-Register nicht mehr verfügbar, sobald ein Programm MMX benutzt.
Die neueren Befehlssatz-Erweiterungen wie SSE benutzen jedoch komplett eigene Register und benötigen somit zwingend eine Unterstützung des Betriebssystems. Auch lässt sich die Überdeckung der Gleitkommaregister durch die MMX-Register bei neueren Prozessoren abschalten.
Die meisten MMX-Befehle werden in nur einem Prozessorzyklus verarbeitet. Die Multiplikationsbefehle brauchen 3 Zyklen bis das Ergebnis zur Verfügung steht, es kann aber nach jedem Zyklus eine neue Multiplikation in die Pipeline nachgeschoben werden (PMMX bis PIII).
Ausführlichere Informationen über die MMX-Befehle (und andere x86-Befehle) finden sich zum Beispiel in der Dokumentation des Assemblers NASM.
Da MMX die erste Erweiterung der x86-Architektur ist, besitzen eigentlich alle CPUs der letzten Jahre MMX. Eine vollständige Liste aller CPUs mit MMX würde also den Rahmen sprengen. An dieser Stelle sei damit auf die Liste von Mikroprozessoren verwiesen.
Nachfolgend eine Übersicht ab welcher CPU-Familie die jeweiligen Hersteller MMX integriert haben: