- Multi Media Extension
-
Die Multi Media Extension (kurz MMX) ist eine Anfang 1997 von Intel auf den Markt gebrachte Rechnerarchitektur, die es erlaubt, größere Datenmengen parallelisiert und somit schneller zu verarbeiten. Die Parallelisierbarkeit wird dabei durch die SIMD-Architektur von MMX erreicht, bei der Befehle stets auf mehrere Daten gleichzeitig angewendet werden, was insbesondere bei der Verarbeitung von Audio- und Videodaten einen Leistungsvorteil mit sich bringt. Ursprünglich stand das Kürzel MMX für Matrix Math Extensions, wurde allerdings von Intel marketingbedingt in Multi Media Extension umbenannt.[1]
MMX verwendet keine physikalisch neuen Prozessorregister, sondern funktioniert die Register des mathematischen Koprozessors (FPU) um. Intel entwarf für MMX 57 neue Prozessor-Befehle und führte vier neue Datenformate ein. Ein Hauptvorteil von MMX gegenüber herkömmlichen Berechnungsmethoden ist die Unterstützung von Sättigungsarithmetik.
MMX wurde nach seiner Einführung von der Softwareindustrie nur zögerlich unterstützt und war schon nach drei Jahren durch Intels eigene Fortentwicklungen SSE und AMDs 3DNow! überholt. Benchmarks zu seiner Performance wiesen eine große Bandbreite auf.
Inhaltsverzeichnis
Anforderungen von Multimediaanwendungen
Die Anforderungen des Multimedia- und Kommunikationsbereiches stellen an ein Computersystem und damit den Prozessor teilweise andere und neue Anforderungen. Die zu verarbeitenden Daten sind meist hochgradig parallelisierbar.[2] So sind z. B. bei einem Videoschnitt die Operationen für die vielen einzelnen Bildpunkte identisch. Theoretisch optimal wäre hier die Ausführung mittels eines einzigen auf alle Punkte anzuwendenden Befehles. Die erforderliche Operationen sind häufig keine einfachen, einzelnen Anweisungen, sondern eher umfangreichere Befehlsketten. Das Einblenden eines Bildes vor einem Hintergrund ist beispielsweise ein komplexer Vorgang aus Maskenbildung mittels XOR, Vorbereitung des Hintergrundes mittels AND und NOT sowie der Überlagerung der Teilbilder durch OR. Diesen Anforderungen wird durch die Bereitstellung neuer komplexer Befehle entsprochen. So vereinigt z. B. der MMX-Befehl
PANDN
eine Invertierung und Und-Verknüpfung der Formx = y AND (NOT x)
.Realisierung
Intel schuf mit MMX ein neues Konzept zur Verwendung bereits existierender Register, neue Datenformate, einen erweiterten Befehlssatz und die Wahl zwischen verschiedenen arithmetischen Möglichkeiten (Saturation-Mode und Wrap-around-Mode). Kleinere interne, nicht den Befehlsumfang betreffende Unterschiede bestehen zwischen den (nicht offiziell so benannten) Versionen MMX 1.0 und 2.0 der verschiedenen Pentium-Prozessoren. Noch wesentlich weiter entwickelt findet sich der MMX-Ansatz in den ASICs (wo er ursprünglich herkommt) sowie in den AltiVec-Einheiten von modernen PowerPC-CPUs – oder auf Grafikkarten.
Neue Datenformate
Es wurden für MMX vier neue Datenformate: PackedByte, PackedWord, PackedDoubleWord, und QuadWord geschaffen, mit denen es möglich ist bis zu 64 Bit große Integer-Datenpakete auf einmal zu bearbeiten.[3] Diese Formate sind im Prinzip nur andere Bezeichnungen für präexistierende Formate. Die neue Nomenklatur zeigt an, dass mit MMX nicht einzelne Daten bzw. Zahlen, sondern Datenfelder bearbeitet werden. Im Prinzip ist ein QuadWord nur ein 64-Bit-Feld, das man auch DoubleLongInt hätte nennen können; ein ShortPackedWord ist eigentlich ein ShortPackedInteger.[4]
Registerverwendung
Für die Datenmanipulation wurden zusätzliche 64-Bit-Register MM0 bis MM7 geschaffen,[3] die allerdings mit den 80-Bit-Registern R0 bis R7 der FPU physikalisch identisch sind. Dabei werden von MMX nur je acht Byte der je zehn Byte breiten FPU-Register (also nur der Mantissenbereich von FPU-Werten) genutzt. Die beiden restlichen Bytes werden unter MMX auf den hexadezimalen Wert FFFF gesetzt. Auch die übrigen FPU-Register wie die 16 Bit breiten Control-, Status- und Tag-Register, das 11 Bit breite Op-Register sowie die beiden 48 Bit breiten Pointer-Register haben bei MMX-Anwendungen keine bzw. eine in seltenen Fällen eingeschränkte oder anders zu interpretierende Bedeutung der hier anfallenden Werte.[5]
Wechsel zwischen FPU und MMX
Vor einem Wechsel zu einer MMX-Anwendung sollte zuerst geprüft werden, ob SIMD-Erweiterungen und speziell MMX vom System unterstützt wird. Dies ist durch den seit dem Pentium vorhandenen Befehl CPUID unter Übergabe des Wertes 1 im Register EAX möglich.[6][7]
MOV eax, 1 ; Es soll das Feature-Flag abgefragt werden CPUID ; CPUID-Befehl ausführen TEST edx, 00800000h ; Ist Bit 23 im Register edx gesetzt? JNZ MMX_kompatibel ; Wenn ja, dann ist der Prozessor MMX-kompatibel
Möchte man nach einem positiven Test auf MMX-Fähigkeit dieses nutzen, sollten als Nächstes die FPU-Daten durch den Befehl
FXSAVE
in einen 512 Byte großen Speicherbereich gesichert werden. Über die beiden von MMX nicht verwendeten Bytes in jedem Register wird eine MMX-Anwendung abgesichert, d. h. einer FPU-Anwendung angezeigt. Ein expliziter Befehl zum Wechsel in eine MMX-Anwendung existiert allerdings nicht. Eventuell auftretenden FPU-Befehlen während ein MMX-Anwendung wird der Status NaN (Not a Number) übersandt. Störende FPU-Befehle bleiben so meist relativ folgenlos.Nach Beendigung der Anwendung sollten durch
FXSTOR
die zuvor durchFXSAVE
gesicherten FPU-Daten wiederhergestellt werden. Zur Signalisierung einer Freigabe von MMX an anstehende FPU-Anwendungen existiert auch der allerdings nicht zwingend vorgeschriebene und nicht immer notwendige MMX-BefehlEMMS
. Dieser kann auch innerhalb einer MMX-Anwendung – wenn z. B. eine MMX-Anwendung eine API aufruft, welche ihrerseits FPU-Befehle verwendet – nötig sein.[8]Einsatz in Betriebssystemen
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.[6] Neuere Befehlssatz-Erweiterungen wie SSE benutzen 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.
Saturation-Mode und Wrap-around-Mode
Der MMX-Befehlsvorrat enthält Befehle, die den Saturation-Mode anwenden und Befehle, die im Wrap-around Mode arbeiten. So führt z. B. der MMX-Befehl
PADDB
eine Addition zweier Packed-Bytes im Wrap-around-Mode aus, währendPADDSB
Selbiges im Saturation-Mode macht.Der Saturation-Mode bedeutet, dass eine Zahl beim Überschreiten ihres größten oder kleinsten Wertes nicht „überläuft“, sondern diesen größten bzw. kleinsten möglichen Wert annimmt.
Ein Anwendungsbeispiel: Bei einem Fade-Out-Effekt von Bildern könnte man beispielsweise immer zwei 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.
Im Wrap-around-Mode wird bei einem Überlauf bzw. Unterlauf der Übertrag nicht berücksichtigt. So ergibt bei einem Maximalwert von einem Byte (dezimal 256) die Addition 255 + 2 das Ergebnis 1. Binär ausgedrückt ergibt 11111111 + 00000010 = (1)00000001, von dem das höchstwertige Bit (hier in Klammern) unberücksichtigt bleibt, was zum Ergebnis 00000001 (also dezimal 1) führt.
Angabe der Operanden
Ein wesentlicher Unterschied zwischen FPU- und MMX-Anwendungen besteht darin, in welcher Form die Befehle ihre Operanden erhalten. Hinter FPU-Befehlen stehen keine expliziten Operanden. Diese holen sich die Befehle über einen Stackpointer (top of the stack) aus den Bits 11 bis 13 des Status-Registers.[9] MMX-Befehle arbeiten dagegen, ebenso wie CPU-Befehle, mit explizit nach dem Befehl angegebenen Operanden.[5]
Ein MMX-Befehl kann keinen, einen oder zwei Quell- und Zieloperanden aufweisen.[10] Dies können MMX-Register (MMX), Allzweckregister (Reg), Speicherstellen (Mem), oder Konstanten (Const) unterschiedlicher Größe (8, 16, 32 oder 64 Bit) sein. Welche Operanden für einen speziellen Befehl zulässig sind, ist unterschiedlich und in Referenzbüchern vermerkt. Eine Angabe wie
Befehl Mem32, MMX Befehl MMX, Reg32 Befehl Reg32, MMX
würde z. B. besagen, dass die Operation (Befehl) von einem MMX-Register zu einem 32-Bit-Allzweckregister, von einem 32-Bit-Allzweckregister zu einem MMX-Register und umgekehrt möglich ist.
Zeitverhalten
Die meisten MMX-Befehle werden in nur einem Prozessorzyklus verarbeitet. Die Multiplikationsbefehle brauchen drei Zyklen, bis das Ergebnis zur Verfügung steht, es kann aber nach jedem Zyklus eine neue Multiplikation in die Pipeline nachgeschoben werden (Pentium MMX bis Pentium III).
Befehlssatz
Insgesamt 24 neue Befehle können mit den verschiedenen Datentypen umgehen, was zu den von Intel angegebenen 57 Befehlen führt. Von diesen 24 Befehlen unterscheiden sich etliche nur durch unterschiedliche Berücksichtigung der Vorzeichen und der Überlaufart, so dass im Prinzip nur 15 Grundoperationen übrigbleiben.
Da MMX mit gepackten Daten arbeitet, beginnen die meisten Befehle – zwecks Unterscheidung von den mit F beginnenden FPU-Instruktionen – mit einem P. MMX-Befehle bestehen außer dem führenden P optional aus den Buchstaben B, W, D oder Q für das Datenformat, einem CPU-ähnlichen Befehlswort (wie z. B.
ADD
oderCMP
) und aus S für vorzeichenbehafteten bzw. US für vorzeichenlosen Saturation-Mode. So besagt z. B. der BefehlPADDSW
: P für Packed, ADD für Addition, S für vorzeichenbehafteten Saturation-Mode angewandt auf das Datum eines Words. Der MMX-Befehlssatz umfasst Anweisungen[11] zum:- arithmetischen Manipulieren von Daten
- logischen Manipulieren von Daten
- Datenaustausch
- Datenvergleich
- Datenkonversion
- MMX-Status
Detailfragen zum Befehlsvorrat sind dem Intel Architecture Software Developer's Manual, Volume 2 – Instruction Set zu entnehmen, siehe im Abschnitt Literatur.
Arithmetische Befehle
Zur Addition im Wrap-around-Mode existieren drei Befehle (
PADDP
,PADDW
,PADDD
) für die Datentypen PackedByte, PackedWord, und PackedDoubleWord. Im Saturation-Mode existieren Befehle für die vorzeichenbehaftete (PADDSB
,PADDSW
) sowie vorzeichenlose (PADDSUB
,PADDUSW
) Addition von PackedBytes und PackedWords. Ein Befehl für die Addition von DoubleWords ist nicht vorhanden. In beiden Modi wird kein Hinweis auf einen Über- oder Unterlauf des Wertebereichs, z. B. durch Setzen von Flags, gegeben.[12]Die Befehle zur Subtraktion sind analog zur Addition gestaltet.
Bei der Multiplikation besteht das Problem, dass die Ergebnisse die Größe der Register von 64-Bit übersteigen können. Dies wurde dadurch gelöst, dass der höherwertige und der niederwertige Anteil des Ergebnisses in zwei verschiedenen Registern gespeichert wird. Für die Multiplikation und die Verwendung des niederwertigen Anteil wird
PMULLW
(Multiply Packed Word and Store Low) und für den höherwertigen AnteilPMULHW
(Multiply Packed Word and Store High) verwandt.[13]Der Befehl
PMADDWD
multipliziert vier Paare von 16-Bit-Worten und addiert paarweise die Ergebnisse auf.Die Befehle zur Verschiebung funktionieren, mit Ausnahme des in MMX dabei nicht gesetzten Carry-Flags, analog zu den Schiebe-Befehlen der CPU wie z. B. SLL, SRL und SRA. Sie sind nur auf Words, DoubleWords und QuadWords, nicht aber auf Bytes, anwendbar. Für das logische Verschieben nach links werden
PSLLW
undPSLLD
und für die umgekehrte RichtungPSRLW
undPSRLD
angewandt. Für das arithmetische Verschieben stehenPSRAW
undPSRAD
zur Verfügung, für die logische Verschiebung von QuadWordsPSLLQ
undPSRLQ
.[10]Logische Operationen
Die Bit-Manipulationsbefehle sind identisch mit den CPU-Befehlen AND, OR und XOR, nur werden von ihnen gleich 64 Bit, also ein QuadWord, auf einmal bearbeitet.
Eine MMX-Entsprechung zum CPU-Befehl NOT existiert nicht. Der einzige MMX-Befehl ohne Entsprechung im CPU-Befehlsvorrat ist
PANDN
, der eine Negation des ersten Operanden mit anschließender AND-Verknüpfung mit dem zweiten Operanden in folgender Form darstellt:x = y AND (NOT x)
[14]Datenaustausch
Dazu existieren analog zum CPU-Befehl
MOV
die beiden BefehleMOVD
undMOVQ
für DoubleWords und QuadWords. Bedingt durch die Rechnerarchitektur – also die unterschiedliche Größe von 64-Bit-MMX-Registern, 32-Bit-Allzweckregistern und dem 32-Bit-Adressbus – sind beide Befehle gewissen Beschränkungen in Bezug auf die zulässigen Operanden unterworfen.[15]MOVD
kann nicht zum Datenaustausch zwischen zwei MMX-Registern verwandt werden, da es für MMX-Register nur 64-Bit-Daten gibt. Er ermöglicht also nur den Austausch zwischen einem MMX-Register und 32-Bit-Allzweckregistern und Speicherstellen in beiden Richtungen.[16] Die möglichen Formen sind also:MOVD MMX, Mem32 MOVD Mem32, MMX MOVD MMX, Reg32 MOVD Reg32, MMX
Dabei sind immer nur die niederwertigen Bits 0 bis 31 des MMX-Registers betroffen. Beim Verschieben von Daten aus einem MMX-Register werden also nur diese Bits verwandt. Beim Verschieben von Daten in das MMX-Register wird der höherwertige Anteil (Bits 32 bis 64) gelöscht, also auf Null gesetzt.
MOVQ
erlaubt einen bidirektionalen Datenaustausch aller 64 Bit zwischen MMX-Registern und Speicherstellen. Ein Datenaustausch mit den 32-Bit-Allzweckregistern ist nicht vorgesehen. Die möglichen Formen sind damit:MOVQ MMX, MMX MOVQ MMX, Mem64 MOVQ Mem64, MMX
Datenvergleich
Die MMX-Befehle zum Datenvergleich sind weniger flexibel und mächtig als die entsprechenden CPU- und FPU-Befehle. Es ist nur vorgesehen, beide Operanden auf Gleichheit zu testen oder prüfen zu lassen, ob der Wert im ersten Operand größer als im zweiten ist. Beide Vergleichsmöglichkeiten sind für die drei Formate Byte, Word und DoubleWord verfügbar. Somit ergeben sich folgende Befehle:
PCMPEQB
,PCMPEQW
,PCMPEQD
,PCMPGTB
,PCMPGTW
undPCMPGTD
(EQ steht hierbei jeweils für equal, GT für greater). Als erster Operand ist nur ein MMX-Register, als zweiter ein MMX-Register oder eine 64-Bit-Speicherstelle erlaubt.Ein wesentlicher Unterschied zu CPU und FPU besteht in der Art, wie das Ergebnis des Vergleichs übergeben wird. Es wird nicht durch das Setzen von Flags oder das Setzen einzelner Bits (z. B. im Statusregister der FPU) angezeigt, sondern im ersten Operanden – also einem MMX-Register – abgelegt. Führt der Vergleich zu einem wahren Ergebnis, wird dort der hexadezimale Wert FF bzw. FFFF oder FFFFFFFF eingetragen. Im anderen Fall werden Nullen eingefügt. Ein Vergleich von zwei DoubleWords auf Gleichheit durch PCMPEQD MMx, MMy ließe sich in seinem Ablauf demnach folgendermaßen ausdrücken:
IF MMx [31..00] > MMy [31..00] THEN MMx [31..00] := $FFFFFFFF ELSE MMx [31..00] := $00000000; IF MMx [63..32] > MMy [63..32] THEN MMx [63..32] := $FFFFFFFF ELSE MMx [63..32] := $00000000;
Datenkonversion
MMX-Befehle ermöglichen die Konvertierung eines Datums in ein kleineres oder größeres, wobei eine Konvertierung in ein kleineres Datenformat natürlich immer einen Datenverlust zur Folge hat.
- Für die Konvertierung in ein kleineres Datum stehen die Befehle
PACKSSWB
,PACKSSDW
undPACKUSWB
für die Umwandlung von Word zu Byte und DoubleWord zu Word zur Verfügung. Zwecks Erhaltung des Vorzeichens wird dabei das höchstwertige Bit des Zieldatums nicht verwendet. Damit ist nur die Hälfte des Wertebereichs verfügbar. Die Befehle saturieren deshalb Werte, welche diesen Bereich über- oder unterschreiten. So setzt z. B.PUNBKHBW
alle −128 unterschreitende Werte auf −128 und alle 127 überschreitende auf 127.PACKUSWB
(Pack with Unsigned Saturation Word to Byte) berücksichtigt das Vorzeichen nicht, saturiert aber dennoch.
- Die Konvertierung in ein größeres Format ist von Byte zu Word, Word zu DoubleWord und DoubleWord zu QuadWord möglich. Dabei existiert jeweils ein Befehl für die Umwandlung des niederwertigen und des höherwertigen Teil der Daten: Ersteres decken die drei Befehle
PUNPCKHBW
,PUNPCKHWD
undPUNPCKHDQ
ab, LetzteresPUNPCKLBW
,PUNPCKLWD
undPUNPCKLDQ
.[10]
MMX-Status
Die drei Befehle zum MMX-Status
EMMS
,FXSAVE
undFXSTORE
besitzen keine Operanden.EMMS
ist eine Art Aufräumbefehl nach Beendigung einer MMX-Anwendung.FXSAVE
undFXSTORE
dienen jeweils zum Sichern und Wiederherstellen FPU-spezifischer Daten, Flags und Register, siehe hierzu auch im Abschnitt Wechsel zwischen FPU und MMX.Exceptions
Da MMX-Befehle sich nicht grundlegend von CPU-Befehlen unterscheiden, können sie auch grundsätzlich dieselben Exceptions auslösen. FPU-spezifische, Gleitkommazahlen betreffende Exceptions wie z. B. Ausnahmesituationen bei Denormalisierungen können bei Benutzung der Register durch MMX nicht auftreten.[17]
CPUs mit MMX
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 allerdings auf die Liste von Mikroprozessoren verwiesen.
Nachfolgend eine Übersicht, ab welcher CPU-Familie die jeweiligen Hersteller MMX integriert haben:
- AMD: ab AMD K6[18]
- Centaur Technology: ab IDT WinChip C6
- Cyrix: ab Cyrix 6x86MX[18]
- Intel: ab Intel Pentium MMX[19]
- Rise Technology: Rise mP6
- Transmeta: ab Transmeta Crusoe
Programmiersprachen
Zur Umsetzung der erweiterten und erhöhten Potenziale eines neuen Prozessorkonzeptes wie MMX in optimierte Anwendungssoftware ist es erforderlich, dass die erweiterten Möglichkeiten der Maschinensprache auch von den neuen Versionen der diversen höheren Programmiersprachen unterschiedlichsten Abstraktionsniveaus und ihren Compilern unterstützt werden.
Die Sprachen können sich dabei einerseits darauf beschränken, die Möglichkeiten von MMX im Kompilierungsprozess umzusetzen, den Befehlsvorrat der jeweiligen Sprache aber nicht zu erweitern. Für den Programmierer ändert sich dadurch recht wenig, er muss lediglich aus Gründen der Abwärtskompatibilität vor der Kompilierung angeben, ob MMX im Zielcode verwendet werden soll oder nicht.[20]
Eine Sprache kann aber auch ihren Befehlsvorrat erweitern und neue, speziell die Stärken von MMX unterstützende Konzepte und Befehle für das Schreiben des Quellcodes implementieren. So stellt z. B. Free Pascal[21] vordefinierte Array-Typen speziell für MMX und 3DNow! bereit.[22] Vector Pascal ermöglicht parallele Operationen auf Daten.
Im systemnahen Sprachbereich unterstützte der Microsoft Macro Assembler schon ein dreiviertel Jahr nach Markteinführung von MMX in Version 6.12 die neuen Möglichkeiten von MMX. Auch der Flat Assembler und NASM unterstützten später MMX. Intel unterstützte in seinen eigenen C-Compilern und später in C++[23] relativ zügig MMX. Auch der VectorC Compiler[24] von Codeplay unterstützt die Vektorisierung und optimiert C-Quellcode bei der Übersetzung für MMX. Andere Programmiersprachen folgten später mit der Umsetzung der Möglichkeiten von MMX.
Einsatz in Software
MMX wurde, ebenso wie AMDs 3DNow!, nicht im von Intel erhofften Umfang von der Softwareindustrie eingesetzt. Nur bei wenigen Produkten ist ein Vermerk wie „Optimiert für MMX“ explizit zu finden. Am ehesten wurde es noch bei Spielen und Video-Anwendungen wie z. B. Ulead VideoStudio eingesetzt.[25] Eine der Anwendungen, die die MMX-Möglichkeiten relativ schnell implementierten, war Adobe Photoshop (siehe dazu auch den Abschnitt Leistung).
Leistung
Angaben zur Leistung sind stark vom jeweiligen Gesamtsystem, den getesteten Anwendungsbereichen und Anwendungen, den angewandten Algorithmen, der Testmethode bzw. der testenden Firma, und vielen anderen Randbedingungen abhängig.[26] Intel selbst verspricht bei MMX-Prozessoren 10–20 % mehr Leistung bei herkömmlicher Software und bis zu 60 % mehr bei MMX-optimierter Software.[27][28] Gerade aber bei 3D-Grafik mit vielen Gleitkommaberechnungen bringt MMX (siehe auch Grafik) kaum Leistungssteigerung, da das Umschalten zwischen MMX- und FPU-Arithmetik („Context Switch“) mit bis zu 50 Taktzyklen[7] relativ viel Zeit in Anspruch nehmen kann.[29]
Sreraman und Govindarajan haben im Jahr 2000 in Bezug auf die Vektorisierung unter der Sprache C Leistungssteigerungen vom Faktor 2 bis 6,5 für MMX ermittelt.[30] Bei Benutzung von Intel-eigenen Programmbibliotheken für Signal- und Bildberarbeitung bringt MMX Verbesserungen der Performance vom Faktor 1,5 bis 2, bei Grafikanwendungen zwischen 4 und 6.[31] Nach anderen Untersuchungen bringt die Verwendung von MMX Performancevorteile von Faktoren zwischen 1,2 und 1,75.[32] Beim MPEG-Decoding beschränkt sich laut Intel der Performencegewinn durch MMX auf 40 Prozent. Somit kann MMX nur bei bestimmten Aufgabenstellungen deutliche Leistungsvorteile gegenüber nichtoptimierter Software bringen.
Testergebnisse können sogar im Vergleich verschiedener Versionen derselben Software stark schwanken. So ergaben sich bei einem Test des für MMX optimierten Adobe Photoshop Version 4.0 bei den meisten Filtern Performancegewinne zwischen 5 und 20 Prozent.[33] In Version 4.0.1 liefen manche Aktionen unter MMX dagegen überraschenderweise langsamer als ohne MMX-Unterstützung.[34]
Nach MMX
MMX konnte schon bald den gestiegenen Anforderungen schnell wechselnder Grafik in hochauflösender Form, wie sie z. B. Spiele stellen, nicht mehr genügen. Deshalb führte Intel mit der Einführung des Pentium-III-Prozessors Anfang 1999 die SSE-Technologie ein. Dabei wurden acht – auch physikalisch – neue, CPU- und FPU-unabhängige 128 Bit breite Register geschaffen. Es wurde sowohl der MMX-Befehlssatz erweitert als auch gänzlich neue Befehle geschaffen. SSE erweiterte außerdem das ausschließliche Arbeiten von MMX mit Ganzzahlen (Integer) auf Realzahlen. Spätere Nachfolgeversionen erweiterten zudem stetig die Fähigkeiten von SSE.
Das von AMD 1998 mit dem AMD K6-2 eingeführte 3DNow! nutzte ebenso wie MMX die Register der FPU, allerdings in einer der FPU-adäquaten Art zur Bearbeitung von Gleitkommazahlen. Die nachfolgenden Versionen von 3DNow! beseitigten Inkompatibilitäten zu Intels SSE-Konzept.
Erweiterung des MMX-Befehlsvorrats unter SSE
Mit SSE wurden zwölf neue Befehle für den MMX-Modus eingeführt, welche nicht mit den neuen XMM-Registern von SSE, sondern ausschließlich mit den alten MMX- bzw. FPU-Registern arbeiten.
PAVGB
undPAVGW
bilden den gerundeten Mittelwert zweier Operanden.PEXTRW
undPINSRW
dienen der Extraktion und Insertion von Words.PMAXSW
,PMAXUB
,PMINSW
, undPMINUB
berechnen Minima und Maxima zweier vorzeichenbehafteter Words bzw. vorzeichenloser Bytes.PMOVMSKB
erzeugt aus den Most Significant Bits eines Short Packed Bytes eine Maske.PMULHUW
arbeitet wie der alte BefehlPMULHW
, verwendet im Gegensatz dazu aber zwei vorzeichenlose Words.PSADWB
berechnet für zwei Werte die absoluten Werte der Differenzen ihrer einzelnen Bytes und addiert danach die Summe dieser Differenzen auf.PSHUFW
mischt die Einzelbestandteile zweier 64-Bit-Werte nach Regeln, die über einen dritten Befehlsoperanden übergeben werden.[35][36]
SSE2 bis SSE4
Mit SSE2 wurde ein vereinheitlichter Befehlssatz verwirklicht, der ebenso auf die 128 Bit breiten XMM- wie auf 64 Bit breiten MMX-Register verwandt werden kann. Manche Befehle erlauben sogar die gleichzeitige Verwendung beider Registergruppen, z. B. der Konvertierungsbefehl
CVPD2PI MMX, XXM
.[37] Mit SSE4 wurde die Unterstützung von MMX dann aber beendet.Siehe auch
Literatur
- David Bistry, Carole Delong, Mickey Gutman: Complete Guide to MMX Technology, McGraw-Hill, 1997, ISBN 0070061920
- Richard Blum: Professional Assembly Language, Wiley Publishing, 2005, ISBN 0764579010
- Paul Cockshott, Kenneth Renfrew: SIMD Programming Manual for Linux and Windows, Springer, Berlin, 2004, ISBN 185233794X
- Rohan Coelho, Maher Hawash: DirectX, RDX, RSX, and MMX Technology – A Jumpstart Guide to High Performance APIs, Addison-Wesley, Amsterdam, 1997, ISBN 0201309440
- Randall Hyde: The Art of Assembly Language, No Starch Press, 2003, ISBN 1886411972
- Intel: Intel Architecture Software Developer’s Manual, Volume 1 – Basic Architecture, Bestellnummer 243190, 1999
- Intel: Intel Architecture Software Developer's Manual, Volume 2 – Instruction Set, Bestellnummer 243191, 1999
- Intel: Intel Architecture Software Developer's Manual, Volume 3 – System Programming Guide, Bestellnummer 243192, 1999
- Trutz Eyke Podschun: Das Assemblerbuch – Grundlagen, Einführung und Hochsprachenoptimierung, Addison-Wesley, 2002, ISBN 3827320267
- Shreekant S. Thakkar: Programmer’s Guide for Internet Streaming SIMD Extensions, Wiley & Sons, 2000, ISBN 0471375241
- Bliss Sloan: Developing for MMX Technology, Que, 1997, ISBN 0789713020
- Ralf Weber: Pentium, MMX, AMD konfigurieren, Sybex-Verlag GmbH, 1997, ISBN 3815571065
- Joachim Rohde: Assembler GE-PACKT, mitp-Verlag, 2001, ISBN 3826607864
Weblinks
- Rasmus Hahn, Bernd Peterson, Andreas Micklei: Prozessorerweiterungen für Multimedia – Workstationarchitekturen für Multimediasysteme WS 96/97
- Andreas Roskosch: Prozessoren, Ausarbeitung eines Proseminars an der Technischen Universität Chemnitz, von 1997
- Übersicht zu Intel-Pentium-MMX-Prozessoren
- Bernd Leitenberger: SIMD und VLIW, Überblick über einige SIMD-Technologien
- Jens Hohmuth: MMX-Tutorial, Anleitung zur Nutzung vom MMX bei der Westsächsischen Hochschule Zwickau, vom 2. Januar 1999
- Pei Qi, Yang Wang: Accelerating 3D Geometry Transformation with Intel MMX Technology
Einzelnachweise
- ↑ Bnet: Controversy brews over use of MMX moniker, Artikel von 6. Januar 1997
- ↑ Richard Blum: Professional Assembly Language, Wiley Publishing, 2005, Seite 482
- ↑ a b Intel Architecture Software Developer’s Manual, Volume 1 - Basic Architecture, Bestellnummer 243190, 1999, Kapitel 8: Programming with the Intel MMX Technology, Seite 216 f.
- ↑ Trutz Eyke Podschun: Das Assemblerbuch – Grundlagen, Einführung und Hochsprachenoptimierung, Addison-Wesley, 2002, Seite 274 f.
- ↑ a b Trutz Eyke Podschun: Das Assemblerbuch – Grundlagen, Einführung und Hochsprachenoptimierung, Addison-Wesley, 2002, Seite 276–278
- ↑ a b Randall Hyde: The Art of Assembly Language, No Starch Press, 2003, Seite 710–712
- ↑ a b Jens Hohmuth: MMX-Tutorial, Anleitung zur Nutzung vom MMX bei der Westsächsischen Hochschule Zwickau, vom 2. Januar 1999
- ↑ Randall Hyde: The Art of Assembly Language, No Starch Press, 2003, Seite 734
- ↑ Don Brumm, Leo J. Scanlon: 80486 Programming, Windcrest, 1991, Seite 24
- ↑ a b c Intel Architecture Software Developer’s Manual, Volume 1 – Basic Architecture, Bestellnummer 243190, 1999, Kapitel 8: Programming with the Intel MMX Technology, Seite 221 ff.
- ↑ Trutz Eyke Podschun: Das Assemblerbuch – Grundlagen, Einführung und Hochsprachenoptimierung, Addison-Wesley, 2002, Seite 281
- ↑ Klaus Wüst: Mikroprozessortechnik – Grundlagen, Architekturen und Programmierung von Mikroprozessoren, Mikrocontrollern und Signalprozessoren, vieweg, 2006, Seite 214–218
- ↑ Richard Blum: Professional Assembly Language, Wiley Publishing, 2005, Seite 488 ff.
- ↑ Richard Blum: Professional Assembly Language, Wiley Publishing, 2005, Seite 494
- ↑ Trutz Eyke Podschun: Das Assemblerbuch – Grundlagen, Einführung und Hochsprachenoptimierung, Addison-Wesley, 2002, Seite 296 ff.
- ↑ Randall Hyde: The Art of Assembly Language, No Starch Press, 2003, Seite 718 ff.
- ↑ David Bistry, Carole Delong, Mickey Gutman: Complete Guide to MMX Technology, McGraw-Hill, 1997, Seite 138
- ↑ a b Paul Herrmann: Rechnerarchitektur, vieweg, 2002, Seite 417
- ↑ Intel-Pentium-MMX-Prozessoren auf www.cpu-collection.de
- ↑ Shreekant S. Thakkar: Programmer’s Guide for Internet Streaming SIMD Extensions, Wiley & Sons, 2000, Seite 72
- ↑ FreePascal.org: Free Pascal Programmer’s Guide, Abschnitt 5.1: Intel MMX support – What is it about?
- ↑ Larry Carter, Jeanne Ferrante: Languages and Compilers for Parallel Computing, Seite 400
- ↑ The Code Project: Introduction to MMX Programming, Beispiele zur Nutzung von MMX mit C++
- ↑ Codeplay: Codeplay VectorC Compiler Technology
- ↑ Klaus Dembowski: PC-Werkstatt – Boards, Speicher, Prozessoren, Markt+Technik, 2005, Seite 711
- ↑ David J. Lilja: Measuring Computer Performance – A pracitioner’s guide, Cambridge University Press, 2000, Seite 2 ff.
- ↑ Andreas Roskosch: Prozessoren, Abschnitt „MMX im Leistungsvergleich“
- ↑ Berkeley Wireless Research Center: Intel Introduces 11TH Microprocessor with MMX™ Technology
- ↑ David Bistry, Carole Delong, Mickey Gutman: Complete Guide to MMX Technology, McGraw-Hill, 1997, Seite 291
- ↑ Paul Cockshott, Kenneth Renfrew: SIMD Programming Manual for Linux and Windows, Springer, Berlin, 2004, Seite 23
- ↑ Alan Conrad Bovik: Handbook of Image & Video Processing, 2005, Seite 636
- ↑ R. Bhargava, R. Radhakrishnan, B. L. Evans, L. John: Characterization of MMX-enhanced DSP and Multimedia Applications on a General Purpose Processor. Digest of the Workshop on Performance Analysis and Its Impact on Design held in conjunction with ISCA98, University of Texas at Austin
- ↑ Jennis Meyer-Spradow, Andreas Stiller: Großspurig – Ein kritischer Blick auf MMX, aus c’t-Ausgabe 1/97, Seite 228
- ↑ heise online: Weniger MMX bei Photoshop, Newsartikel vom 9. Juni 1997
- ↑ Trutz Eyke Podschun: Die Assembler-Referenz – Kodierung, Dekodierung und Referenz, Addison-Wesley, 2002, Seite 231–249
- ↑ Intel Architecture Software Developer's Manual, Volume 2 – Instruction Set, Kapitel 9.3.6: Additional SIMD Integer Instructions, Seite 246
- ↑ Trutz Eyke Podschun: Das Assemblerbuch – Grundlagen, Einführung und Hochsprachenoptimierung, Addison-Wesley, 2002, Seite 345 ff.
Schlagen Sie auch in anderen Wörterbüchern nach:
Multi Media Card — Saltar a navegación, búsqueda Tarjeta MMC MultiMediaCard, o MMC, es un estándar de tarjeta de memoria flash. Prácticamente igual a la SD, carece de la pestaña de seguridad que evita sobrescribir la información grabada en ella. Su forma está… … Wikipedia Español
Media GX — Der Cyrix MediaGX CPUs war die erste x86 CPU, die als SoC Design entstand. Als Basis wurde der Cyrix 5x86 Prozessor genommen und zusätzlich Funktionen der Northbridge und anderer Systemkomponenten wie z. B. ein Speichercontroller und ein… … Deutsch Wikipedia
Media Plus — is a European Union programme designed to support the European Union s audio visual industry. It is currently (as of 2005) in its third generation, with 1990 1995 and 1996 2000, being the previous two.MEDIA Plus supports the development,… … Wikipedia
Multi-monitor — Multi Monitor, also called Multi Display and Multi Head, is the use of multiple physical display devices, such as monitors, televisions, and projectors, in order to increase the area available for computer programs running on a single computer… … Wikipedia
Multi Theft Auto — Developer(s) MTA Team Platform(s) Microsoft Windows … Wikipedia
Multi-core processor — Diagram of a generic dual core processor, with CPU local level 1 caches, and a shared, on die level 2 cache … Wikipedia
Media monitoring service — A media monitoring service, a press clipping service or a clipping service as known in earlier times, provides clients with copies of media content, which is of specific interest to them and subject to changing demand; what they provide may… … Wikipedia
Multi-core — A multi core processor (or chip level multiprocessor, CMP) combines two or more independent cores into a single package composed of a single integrated circuit (IC), called a die, or more dies packaged together. The individual core is normally a… … Wikipedia
Multi-user MIMO — In radio, multi user MIMO (MU MIMO) is a set of advanced MIMO, multiple input and multiple output (pronounced mee moh or my moh), technologies that exploit the availability of multiple independent radio terminals in order to enhance the… … Wikipedia
New media art preservation — New media art preservation, a form of Art conservation, is the study and practice of techniques for sustaining artworks created using digital, biological, performative, and other variable media. Artists increased use of multi media, digital, and… … Wikipedia