MMX (processorteknik)

För andra betydelser, se MMX.
Den här artikeln bör enligt ett förslag flyttas till MMX eller MMX (datorteknik) (2024-04) (Diskussion)
Motivering: Detta synes vara huvudämnet för titeln. Alternativ bör suffixet göras mindre specifikt, så att det är lättare att förstå för icke-insatta eftersom det inte behöver vara så specifikt.
Mallen används för flyttningsförslag som behöver diskuteras, se diskussionssidan. Okontroversiella flyttningar kan utföras direkt. I fall då sidflytt kräver administratörshjälp, fråga efter denna på Wikipedia:Begäran om åtgärder.

MMX är en instruktionsuppsättning skapad av Intel, introducerad 1996, för att göra dess Pentium-processorer mera lämpade för avancerad grafik- och ljudbehandling. Det är en utökning av x86 som består av 57 stycken processor-instruktioner som har egenskapen att de kan utföras på flera data samtidigt, en teknik allmänt känd som akronymen för den engelska termen single instruction, multiple data, SIMD(en). Instruktionsuppsättningen finns numera duplicerad i de flesta x86-processorer, även från andra tillverkare. Advanced Micro Devices införde det med start i dess K6-arkitektur. 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 huvudprocessor 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!(en) 1998, hade det även stöd för flyttal. Intel lanserade 1999 sin SIMD-lösning för flyttal, SSE(en).

Tekniska detaljer

För MMX lades åtta nya 64-bitars processorregister till, betecknade MM0 till MM7. I realiteten är dessa register delar av redan existerande register, registren i flyttalsprocessorn x87(en), 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.

MM0: [ A 1 | B 1 | C 1 | D 1 ] × × × × MM1: [ A 2 | B 2 | C 2 | D 2 ] MM0: [ A 1 × A 2 | B 1 × B 2 | C 1 × C 2 | D 1 × D 2 ] MM1: [ A 2 | B 2 | C 2 | D 2 ] {\displaystyle {\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.