MMX (instruktionsuppsättning)
MMX är en instruktionsuppsättningsarkitektur för enkel instruktion ( SIMD ) designad av Intel , introducerad den 8 januari 1997 med sin Pentium P5 (mikroarkitektur) baserade linje av mikroprocessorer , kallad "Pentium with MMX Technology". Den utvecklades ur en liknande enhet som introducerades på Intel i860 och tidigare Intel i750 videopixelprocessor. MMX är en kompletterande processorkapacitet som stöds på IA-32- processorer av Intel och andra leverantörer från och med 1997.
New York Times beskrev den första pushen, inklusive Super Bowl- reklam, som fokuserad på "en ny generation av glittrande multimediaprodukter, inklusive videotelefoner och 3-D-videospel."
MMX har därefter utökats med flera program av Intel och andra: 3DNow! , Streaming SIMD Extensions (SSE) och pågående revisioner av Advanced Vector Extensions (AVX).
Översikt
Namngivning
MMX är officiellt en meningslös initialism varumärkesskyddat av Intel; inofficiellt har initialerna på olika sätt förklarats stå för
- MultiMedia eXtension ,
- Multiple Math eXtension , eller
- Matrix Math eXtension .
Advanced Micro Devices (AMD), under en av dess många domstolsstrider med Intel, producerade marknadsföringsmaterial från Intel som indikerar att MMX stod för "Matrix Math Extensions". [ citat behövs ] Eftersom en initialism inte kan varumärkesskyddas, [ hänvisning behövs ] var detta ett försök att ogiltigförklara Intels varumärke. 1995 väckte Intel talan mot AMD och Cyrix Corp. för missbruk av dess varumärke MMX. AMD och Intel gjorde upp, med AMD som erkände MMX som ett varumärke som ägs av Intel, och med att Intel beviljade AMD rättigheter att använda MMX-varumärket som ett teknologinamn, men inte ett processornamn.
Tekniska detaljer
MMX definierar åtta processorregister , benämnda MM0 till MM7, och operationer som fungerar på dem. Varje register är 64 bitar brett och kan användas för att hålla antingen 64-bitars heltal eller flera mindre heltal i ett "packat" format: en instruktion kan sedan appliceras på två 32-bitars heltal, fyra 16-bitars heltal eller åtta 8-bitars heltal på en gång.
MMX tillhandahåller endast heltalsoperationer. När den ursprungligen utvecklades, för Intel i860 , var användningen av heltalsmatematik meningsfull (både 2D- och 3D-beräkningar krävde det), men eftersom grafikkort som gjorde mycket av detta blev vanliga, blev heltals- SIMD i CPU:n något överflödig för grafiska applikationer. [ citat behövs ] Alternativt kan mättnadsaritmetiska operationer i MMX [ vaga ] avsevärt påskynda vissa digitala signalbehandlingstillämpningar . [ citat behövs ]
För att undvika kompatibilitetsproblem med kontextväxlingsmekanismerna i befintliga operativsystem är MMX-registren alias för de befintliga x87 flyttalsenhetsregistren (FPU), vilka kontextväxlar redan skulle spara och återställa. Till skillnad från x87-registren, som beter sig som en stack , är alla MMX-registren direkt adresserbara (slumpmässig åtkomst).
Alla operationer som involverar flyttalsstacken kan också påverka MMX-registren och vice versa, så denna aliasing gör det svårt att arbeta med flyttals- och SIMD-operationer i samma program. För att maximera prestandan använde mjukvara ofta processorn uteslutande i det ena eller det andra läget, vilket skjuter upp den relativt långsamma växlingen mellan dem så länge som möjligt.
Varje 64-bitars MMX-register motsvarar mantissadelen av ett 80-bitars x87-register. De övre 16 bitarna i x87-registren går således oanvända i MMX, och dessa bitar är alla inställda på ettor, vilket gör dem till Not a Number ( NaN ) datatyper, eller oändligheter i flyttalsrepresentationen. Detta kan användas av mjukvara för att avgöra om ett visst registers innehåll är avsett som flyttal eller SIMD-data.
Programvarustöd
Mjukvarustöd för MMX utvecklades långsamt. Intels C-kompilator och relaterade utvecklingsverktyg erhöll inneboende egenskaper för att anropa MMX-instruktioner och Intel släppte bibliotek med vanliga vektoriserade algoritmer med MMX. Både Intel och Metrowerks försökte automatisk vektorisering i sina kompilatorer, men operationerna i programmeringsspråket C mappade dåligt till MMX-instruktionsuppsättningen och anpassade algoritmer från och med 2000 måste vanligtvis fortfarande skrivas i assemblerspråk .
Efterträdare
AMD, en konkurrerande x86- mikroprocessorleverantör, förbättrade Intels MMX med sin egen 3DNow! instruktionsuppsättning. 3DNow är mest känt för att lägga till enkelprecision (32-bitars) flyttalsstöd till SIMD-instruktionsuppsättningen, bland andra heltals- och mer allmänna förbättringar.
Efter MMX var Intels nästa stora x86-tillägg Streaming SIMD Extensions (SSE), som introducerades med Pentium III -familjen 1999, ungefär ett år efter AMD:s 3DNow! introducerades.
SSE åtgärdade kärnbristerna med MMX (oförmåga att blanda heltals-SIMD-operationer med alla flyttalsoperationer) genom att skapa en ny 128-bitars bred registerfil (XMM0–XMM7) och nya SIMD-instruktioner för den. Liksom 3DNow! fokuserade SSE uteslutande på flyttalsoperationer med enkel precision (32-bitars); heltals SIMD-operationer utfördes fortfarande med MMX-registret och instruktionsuppsättningen. Den nya XMM-registerfilen gjorde det dock möjligt för SSE SIMD-operationer att blandas fritt med antingen MMX- eller x87 FPU-operationer.
Streaming SIMD Extensions 2 ( SSE2 ), introducerade med Pentium 4 , utökade ytterligare x86 SIMD-instruktionsuppsättningen med heltal (8/16/32 bitar) och dubbelprecision flyttalsdatastöd för XMM-registerfilen. SSE2 tillät också MMX- operationskoderna ( opcodes ) att använda XMM-registeroperander, utvidgade till ännu bredare YMM- och ZMM-register genom senare SSE-revisioner.
MMX i inbyggda applikationer
Intels och Marvell Technology Groups XScale- mikroprocessorkärna som börjar med PXA270 inkluderar en SIMD- instruktionsuppsättningsarkitekturtillägg till ARM-arkitekturkärnan med namnet Intel Wireless MMX Technology (iwMMXt) som liknar funktionerna i IA-32 MMX-tillägget. Den tillhandahåller aritmetiska och logiska operationer på 64-bitars heltal, där programvaran kan välja att istället utföra två 32-bitars, fyra 16-bitars eller åtta 8-bitars operationer i en instruktion. Tillägget innehåller 16 dataregister på 64-bitar och åtta kontrollregister på 32-bitar. Alla register nås via standard ARM-arkitektur-samprocessormappningsmekanism. iwMMXt upptar utrymme för samprocessorerna 0 och 1, och några av dess opkoder krockar med opkoderna för den tidigare flyttalsförlängningen, FPA. [ citat behövs ]
Senare versioner av Marvells ARM-processorer stöder både Wireless MMX (WMMX) och Wireless MMX2 (WMMX2) opkoder.
Se även
externa länkar
- Intel Intrinsics Guide
- Intel Pentium-processor med MMX-teknikdokumentation
- IA Software Developer's Manual, Vol 1 (PDF) , se kapitel 8 för MMX-programmering