MMX

Från Wikipedia
Hoppa till: navigering, sök
För flygplatsen, se Malmö Airport.

MMX är en teknik skapad av Intel, introducerad 1996, för att göra dess CPUer mera lämpade för avancerad grafik- och ljudbehandling. MMX består i en uppsättning av 57 stycken CPU-instruktioner som har egenskapen att de kan utföras på flera data samtidigt, en teknik mera allmänt känt som SIMD (Single Instruction, Multiple Data). Tekniken finns numera duplicerad i de flesta x86- och x64-CPUer, även från andra tillverkare. För att dra fördel av MMX måste programmen ibland vara speciellt skrivna för ändamålet.

MMX sägs ofta vara en förkortning av MultiMedia eXtensions, men enligt Intel själva är MMX bara en betydelselös bokstavskombination.

Kort efter att tekniken introducerats började avancerade ljud- och grafikkort dyka upp på marknaden, som helt avlastade datorns CPU från de uppgifter som MMX främst var ämnade att lösa. MMX har därför haft endast marginell betydelse i praktiken, men termen MMX användes kraftigt i Intels marknadsföring under en tid.

MMX hanterade endast heltal, men när konkurrenten AMD lanserade 3DNow! 1998, hade det även stöd för flyttal. Intel lanserade 1999 sin SIMD-lösning för flyttal, SSE.

Tekniska detaljer[redigera | redigera wikitext]

För MMX lades åtta nya 64-bitars processorregister till, betecknade MM0 till MM7. I realiteten är dessa register en delar av redan existerande register, registren i flyttalsprocessorn x87, som varit en del av x86-processorerna sedan Intel 80486. Dessa register är egentligen 80-bitar långa, så hela registret används inte.

I MMX-registerna kan man lagra åtta bytes (8×8 bitar), fyra ord (4×16 bitar) eller två dubbelord (2×32 bitar). Instruktioner som utförs på dessa register utför sina instruktioner på dessa mindre enheter var för sig, parallellt.

Exempelvis kan man tänka sig att man har fyra par (Ak och Bk för k = 1, 2, 3, 4) av 16-bitars tal, och man vill multiplicera varje par var för sig (Ak × Bk). Om man lagrar de första talen (Ak) i varje par i registret MM0 och de andra talen (Bk) i varje par kan man med en instruktion multiplicera alla talen.


\begin{matrix}
\text{MM0:} [ & A_1 & | & B_1 & | & C_1 & | & D_1 &] \\
     &        \times && \times && \times && \times \\
\text{MM1:} [ & A_2 & | & B_2 & | & C_2 & | & D_2 &]
\end{matrix}
\rightarrow
\begin{matrix}
\text{MM0:} [ & A_1 \times A_2 & | & B_1 \times B_2 & | & C_1 \times C_2 &| & D_1 \times D_2 &] \\
\text{MM1:} [ & A_2 & | & B_2 & | & C_2 & | & D_2 &]
\end{matrix}

Detta skiljer sig från vanlig beräkning i en processor, då man måste beräkna varje produkt var för sig och ha ett ledigt register för varje tal.