MMX (Intel): verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
WilinckxBot (overleg | bijdragen)
k [redirectmaker] Romeinse getallen
 
Vussiewussie (overleg | bijdragen)
Geen bewerkingssamenvatting
Regel 1:
De '''MMX''' instructies die ontworpen zijn door [[Intel]] zijn een uitbreiding van 57 instructies op de [[IA-32]] instructieset. Deze toevoeging is voor het eerst gebruikt in de [[pentium_mmx_(processor)|Pentium MMX]] processor om de verwerkingssnelheid van processoren op te voeren. Later heeft AMD deze instructies toegevoegd aan de eigen processoren, voor het eerst bij de [[K6_(processor)|K6]] processor.
#REDIRECT [[2010]]
 
<table align="right" border="1"><tr><td>
[[Afbeelding:MMX_registers.PNG]]
</td></tr><tr><td>
Hierboven de MMX registers zoals ze<br>
in de FPU registers gedefiniëerd zijn<br>
met horizntaal de grgrenzen van de<br>
verschillende registers, dus de grootte<br>
en vertikaal de registernamen
</td></tr></table>
Intel zag bij de ontwikkeling van MMX in dat bij veel bewerkingen slechts met 8 of 16 bits integer data gewerkt wordt en dus vaak een groot gedeelte van de registers leegstond en dat veel bewerkingen erg vaak herhaald werden. Als data naast elkaar geplakt zou worden dan zouden deze kleine databrokjes in een keer bewerkt kunnen worden en dus sneller verwerkt worden. Om dit principe te kunnen bereiken heeft Intel 4 nieuwe datatypen ingevoerd, de packed versies van de [[byte]], [[word]], [[doubleword]] en [[quadword]]. Met packed wordt hier bedoeld dat de data achter elkaar wordt geplakt tot een eenheid van 64 bits, dus maximaal 8 bytes achter elkaar, of 1 quadword. Deze gegevens konden, nadat een MMX commando was gegeven, in een speciaal voor MMX data aangewezen gedeelte van de FPU registers worden geplaatsten bewerkt met de nieuwe instructies.
 
Het grote voordeel van deze aanpak was dat er bijvoorbeeld bij het bewerken van 8 bytes met dezelfde instructie niet 8 keer een instructie uitgevoerd hoeft te worden maar dat de instructie in één keer op alle 8 de bytes tegelijk uitgevoerd kan worden. Hierdoor wordt in theorie een instructie 8 keer zo snel uitgevoerd. De feitelijke snelheidswinst was echter sterk afhankelijk van een aantal factoren, als eerste het formaat van de te bewerken variabelen, grotere variabele betekent tenslotte dat er minder tegelijk bewerkt kunnen worden. Als tweede was het aantal wisselingen tussen het bewerken van MMX integer data en [[floating point]] data van belang. Iedere keer als tussen de twee bewerkingen gewisseld werd moest namelijk het hele register geleegd worden, gewacht worden op data uit het geheugen en daarna het register weer gevuld worden waarbij een behoorlijk aantal CPU cycles verloren ging.