Version 0.9a Pre-Released 2, First Previewed version

I. Fejezet




Under Construction

Írta : Hodosi Szabolcs (PPK)
Dátum : 1998.10.19

Jelen dokumentáció anyaga szabadon felhasználható.


    Mielőtt hozzákezdenénk

  1. Introduction - Bevezető
  2. Alapfogalmak
  3. Általánosságban a processzorokról
  4. Pentium előtti időkből

  5. 80386 processzor
  6. 80486 processzor
  7. Pentium

  8. Intel Pentium processzor
  9. NexGen processzorokról röviden
  10. Cyrix 6x86 (M1) processzor
  11. MMX

  12. MMX technológia,Intel Pentium MMX
AMD K6-2 3DNow és a Quake - A 3Ds király

Bevezető

Ez a dokumentáció nem kíván teljes leírást adni az itt szereplő processzorokról,inkább egy összegző, átfogó jellegű szöveget szeretnék írni a ma forgalomban levő processzorokról.Csak a PCs processzorokat említem és közülük természetesen nem mindet, sőt az itt szereplőket is eltérő részletességgel.
Az első fejezetben csak a 80386,80486,Intel Pentium Cyrix M1,NexGen 5x86,Intel MMX processzorokról kívánok beszélni.A második fejezetben - mely jelenleg is intenzív fejlesztések alatt áll - a 3DNow! technológiára szeretném fektetni a legnagyobb hangsúlyt,mivel jómagam nagyon érdeklődöm az ezzel a technológiával készült processzorok iránt, szerintem elég sok jó ötletet tartalmaz ahhoz, hogy a vékonyabb pénztárcájú vásárlók közkedvelt processzora legyen, hisz olcsó ára mellett ez az első Intel klón ami - habár egy orrhosszal mindössze - de megelőzte az Intel fejlesztéseit. Sebességeredményei elég erősnek hatnak a 3Ds alkalmazások terén...
Kicsit részletesebben szólok a Pentium processzorról, a MMX technológiáról, a 3DNow technológáról, a Cyrix M1, AMD K6, AMD K6-2,Pentium MMX,Pentium Pro és Pentium II processzorokról.
Kevésbé részletesen beszélek a Cyrix M2,GX processzorokról, valamint a NexGen fejlesztéseiről.
A második fejezetben terveim szerint a Xeon,Pentium II,Pentium Pro,Katmai,Merced,AMD K6,AMD K6-2 3DNow!,Cyrix M2,GX processzorokról lesz szó.
A leírás során nagyon sokminden kimaradt és leegyszerűsödött az eredeti leírásokhoz képest,ezért szíves elnézésüket kérem.
A leírás a Fazekas Mihály Gimnázium Számítástechnika Fakultáció I-re készült mint 'kis'(?)előadás, megértéséhez a Gimnáziumokban tanított számítástechnikai ismeretek alapos ismerete szükséges.A dokumentáció 14-18 éves korosztályhoz szól, igazodva ehhez nyelvezetében is.Szabadon Felhasználható iskolai tanórák kiegészítőjeként, név illetve honlapscím megemlítése esetén.
Először is szóljunk néhány fontosabb alapfogalomról, ami szükséges lesz a továbbiakban a megértéshez.


Általánosságban a processzorokról

Regiszterek

Az assembly programozóknak már nem kell bemutatni ezeket bemutatni, hiszen tulajdonképpen ezen tanultak meg programozni.
a legősibb műveletek közé tartozik a MOV AX,BX.
Mindenki ezzel kezdte annak idején.
  • Rendszer regiszterek

    Ide tartoznak azok a regiszterek amelyek a felhasználói programok végrehajtó környezetével foglalkoznak,mint például a
    • EFLAGS: ezek tulajdonképpen a fent említett flagek,persze sokkal több van az itt melítetteknél,de ezek a legfontosabbak... Ezek vezérlik az I/O műveleteket,maszkolható megszakításokat, nyomkövetést, task-cserét, V86 módot (Virtuális 8086-os mód)
      Ezek : ID,VIP,VIF,AC,VM,RF,NT,IOPL (privilegizált szint jelzők),IF,TF
    • Memory Management Registers (memória-szervező regiszterek) :
    • Control Registers (vezérlőregiszterek) : Ezek a PG,PCD,PWT,CD,NW,AM,WP,NE,ET,TS,EM,MP,PE,VMEPVI,TSD,DE,PSE,MCE
    • Debug Registers (Nyomkövető regiszterek) : ezek magas nyomkövetési tudással látják el a processzort
    32 bites regiszterekkel csak a 32 bites processzorok rendelkeznek (80386-tól felfele). Az itt felsorolt regiszterek közül nagyon sok, csak a Pentium, illetve a Pentium klónokban, Pentium alapú gépekben található meg.Nem kívántam külön leírni, hogy melyik regiszter melyik processzorban nincsen benne.

    80386os processzor

    Általános adatai

    Géptípus386DX
    Processzortípus80386
    Regiszterméret32 Bites
    Regiszterek száma
    Adatbusz32 bites (SX esetén 16)
    Címbusz32 bites (SX esetén 24)
    Órajelfrekvenciák20..40 (SX esetén 16..40)
    KoprocesszorOpcionális
    Processzor Helyeaz alaplapon
    Pipeline1 db, 1 integer egység


    80486-os processzor

    Eltérés a 80386hoz képest

    486-os cache-je

    Mindössze 8Kb, ezért igen intelligensen képes ezt kihasználni.Nincs szétosztva külön adat és utasítás részére


    Általános adatai

    GéptípusPentium
    ProcesszortípusPentium
    Regiszterméret32 Bites
    Regiszterek száma
    Adatbusz64 bites
    Címbusz32 bites
    Órajelfrekvenciák50,60,66,75,83,100
    KoprocesszorA processzorban
    Processzor HelyeSocket7
    Pipeline2 db, 1 integer egység

    Technikai információk

    Cache2x8Kbyte
    Tranzisztorszám3.3 millió
    CPU Voltage2.7V

    Arhitektúra

    Az Intel ezen processzor működését egyértelműen meghatározza a szuperskalár architektúra, azaz ez a processzor egy órajel ciklus alatt képes több (pontosan 2) utasítás végrehajtására (gyakorlatilag egyszerre). Ezt az úgynevezett Pipeline-jaink keresztül éri el.Ez megkétszerezi az előnyét az Intel 486 processzorokhoz képest, hiszen az integer egység a két integer utasítást egyszerre hajtja végre.

      A Pipelineok 5 végrehajtási szintre tagolódnak :

    1. Prefetch (PF)
    2. Utasítás dekódolás (D1) (Decode Stage 1)
    3. Címgenerálás (D2) (Decode Stage 2)
    4. Végrehajtás (E) (Execute)
    5. Visszaírás (WB) (Write Back)
    Ez mindkét Pipelinera érvényes.

      INTEGER egység :

    1. U Pipeline : elsődleges pipeline
    2. V pipeline : másodlagos pipeline,hasonló az elsőhöz,de itt már megszorítások lépnek fel, ami korlátozhatja az optimalizálás hatásfokát.
    Ez figyelhető meg az 1.2-es ábrán.
    Képes az utasítások elő betöltésére (Intruction Prefetch), azaz az utasítások kódjának a magasabb címekről történő előzetes beolvasása a processzorba, még a végrehajtást megelőzően.Célja az utasításvégrehajtás átfedése.
    Amikor az utasítás a prefetchből átkerül a decoder-be a pipeline készen áll a következő utasítás végrehajtására, ez az "utasítás párosítás",ennek feltétele, hogy mindkét utasításnak egyszerűnek kell lennie, mindkét pipeline tartalmaz saját ALU-t, címgenerátor, adatcache interface-t. Ezt szemlélteti az 1.3-as ábra.
    Az Intel Pentium Processzor Pipeline szerkezete

    Cache és memóriakezelés

    8 Kb-os cachekkel rendelkezik, külön az utasításoknak és külön az adatoknak (azaz 2*8K=16K-s a Pentium processzorok L1 Cache-je) ezek kétutas csoport associativ szervezésűek, támogatják a directmap eljárást. A cache vonalak 32 bájtosak, s mivel két ilyen van a pentium 2*32=64 bit széles busszal rendelkezik.
    Az adatcachek két interface van, minden pipelinehoz egy-egy, így egy órajel ciklus alatt két külömböző művelet is képes felhasználni ugyanazt az adatot. MESI (Modified,Exclusive,Shared,Invalid) protokoll szerint jár el.Ez nagyon fontos a multiprocesszoros rendszerekben.

    MESI protokoll

    Mint már említettem a fentiekben leírt cache "konzisztencia" ezen az elven működik, akkor lássuk, hogy mit is takar ez a "misztikus" :)) név.Az alapproblémát az okozta, hogy azokban a rendszerekben, ahol egynél több processzort kapcsolnak össze multiprocesszoros rendszerekké (már itt látszik az Intelnek azon törekvése, mely szerint a Mainframek világába is be kíván törni, kegyetlen erős szervereket létrehozva) gyakran előfordul, hogy több processzornak egyszerre ugyanarra az adatra van szüksége, erre kínál megoldást a MESI. Arról van szó, hogy a cache vonalakon végrehajtott művelet szerint (amit a CPU csinált) 4 féle állapotot definiál, ezek az állapotok : Ekkor viszont el kell dönteni, hogy egy cahce írás során kell-e frissíteni a főmemóriát, és ha igen, akkor mikor és hogyan.Ennek a problémának a megoldására az Intel mérnökei kétféle "stratégiát" dolgoztak ki. A belső kesek együttműködnek a külső cache-kel, mind a Write back mind a Write Trought módban, ez szoftveresen vagy hardveresen vezérelhető.
    Lehetőség van arra is, hogy a memória akérmelyik eljárással kezelhatő legyen, ezt az eljárást akár hardver de akár szoftver is vezérelheti.

    Branch Target Buffer (BTB)

    Eddig szándékosan nem említettem a pipeline technika egy hátulütőjét, ez pedig az, hogy a CISC (Complex Intruction Set Computer) felépítésből következően (mivel az utasítások változó hosszúságúak és lefutási idejűek, nem képes kiszámolni, hogy hol fog kezdődni a következő utasítás) egy pipeline azt feltételezi (mert nem képes jobbat feltételezni :)) ), hogy a következő utasítás amit neki le kell futtatni, az a következő memóriacímen levő utasítás (sorban...) (így képes az előbetöltésre) ezért nem szereti az olyan utasításokat, amik a maga kis "gondolatmenetéből" kizökkentik (mint pl.:JMP (Jump),feltételes elágazás).Ekkor az fordul elő, hogy nem az az utasítás fog végrehajtódni ami a memóriában a következő, hanem egy - a memóriában teljesen máshol levő utasítás.Ennek ellensúlyozására az Intel mérnökei létrehoztak egy cache-t, amely megpróbálja előrejelezni, hogy a programban feltételes elágazás mely ága fog végrehajtódni (pl.:feltételezi, hogy az 'igaz' ág fog érvényre jutni,mivel a feltételek a legtöbb esetben igaz szokott lenni és a programozó is többnyire erre számít). Ez a Brach Target Buffer (BTB)
    Ezért nagy jelentősége van az utasítások előrejelzésénél (Branch Prediction). Def.: az utasítás előrejelzés az a technika mely során az általa biztosított információkkal apipelineokat maximális sebességel lehet használni
    Ez a módszer tulajdonképpen azt próbálja meg meghatározni hogy melyik programág (Branch) fog végrehajtódni.Amikor a processzor elér egy elágazáshoz, ekkor a BTB feljegyzi az utasítást és az illető Branch ugrási címét is.Ezalapján jósol a processzor, ha a jóslat bejön akkor mindenképpen időt takarítunk meg a cache által.

    A Pentium lebegőpontos egysége

    Pentium igen fejlett, jól megtervezett lebegőpontos számítást végző egységgel rendelkezik, mely igen gyorssá teszi. Órajelenként 1 lebegőpontos számítást képes végezni a 8 szintes Pipeline egység.

    Lebegőpontos pipelineok

    Az utasítás először az "egész egység" pipelinjaiban kezdődik,majd innen veszi át a végrehajtást az FPU, amely mint mondtuk 8 szintű. A nyolc szint úgy épül fel, hogy az első 4 szint teljesen megegyezik az INTEGER egység első 4 szintjével (PF,D1,D2,E) A következő 4 pipeline a következőképpen oszlik fel :

      Lebegőpontos végrehajtó egység

    1. Kerekítő egység
    2. Regiszterbe író egység

    Miért olyan gyors a Pentium ?

    1. Szuperskalár felépítés: egyértelmű, hogy miért...
    2. A cache-ek (külső és belső) szétválasztottaká váltak
    3. Write Back Cache
    4. FPU
    5. 64 bites adatbusz a memória felé
    6. Burst Cache : Egy ciklus alatt 256bit hosszú csomagok tölthetőek be a cacheből
    7. Számos ALU utasítás hardveres megvalósítású
    8. Támogatja a nagy lapméretekkel történő lapozások (az eddigi 4K helyett mostmár akár 4Mb is lehet)
    Viszont szólni kell egy kicsi kis "bug"-ról, ez pedig az F0.

    Multiprocesszoros Szerverek

    A Pentium támogatja a Multiprocesszoros rendszereket olyan szempontból, hogy beléjük építettek egy úgynevezett APIC (Advanced Programmable Interrupt Controller) megszakítás vezérlőt.

    Adatok védelme

    A már említett hibadetektálás 2 szinten hajtódik végre : Ezt szolgálja még a funkcionális redundancia ellenőrzés (Functional Redundancy Checking (FRC). Ehhez vizsont két chip szükséges, az egyik a Master a másik a Checker.
    A checker mikor befejezi a számítását összehasonlítja a saját eredményét, és ha annyi akkor annyi, akkor nincs baj.Ezalapján matek dolgozat közben is FRCzünk,csak nem tudunk róla ... ;). Ennek a hatásfoka 99% felett van,mivel nagyon ritkán fordul elő az az eset, hogy mindkét chip egyszerre ugyanúgy rontsa el a számításait.

    Az Intel Pentium processzor módjai

    Tartalmazza a már megismert módokat, azaz azokat amelyek már a 386 SL-nél megismerhettünk.


    NexGen Nx586 Processzor

    Ez a processzor eléggé speciális felépítésű, így nem is lábkompatibilis a Pentium processzorokkal.Használatukhoz speciális alaplapra van szükség, talán ennek köszönhető, hogy nme is terjedt el igazán, így a szaküzletekben sem találkozhatunk vele.Ennek ellenére egy nagyon gyors processzort sikerült alkotniuk a NexGen szakembereinek.Alapjában véve sem a 486osra, sem pedig a Pentiumra nem hasonlít, annál inkább viszont az Alpha processzorokra.Furcsaságai ott kezdődnek, hogy a másodszintű cache-t a processzor lapkára integrálták.
    Az Nx586-ban egy 64 bites busz áll rendelkezésre a matematikai processzorral és egy pedig a külső SRAM-okkal való kommunikációra.Létezik még egy harmadik 64 bites busz is, ez pedig az összes többi eszközzel való kapcsoalttartásra hivatott.A cache-busz frekvenciája megegyezik a CPU frekvenciájával.Teljes implementációt biztosít az X86 utasításkészletnek, méghozzá ezt RISC86-os architektúrával teszi valós időben.Ráadásul mindezt hardveresen emulálja (nme úgy mint a pl.: az Alpha processzorok).Ezzel jelentős sebességnövekedést ér el.RISC utasítait felruházták az X86-osok arhitektúrájával.

    Regiszterei

    8 db általánok felhasználású regiszere van, amit viszont azon nyomban leképez 32 fizikai regiszterré (mivel az Alphákban is 32 regiszter van).
    Ez az eljárás, amit regiszter átnevezésnek nevezünk, biztosítja, hogy a pipelineok ne akadjanak el, így a processzor a BTB által feltételezett ágon fut tovább, az ugrási feltételek után pedig kiértékeli őket.

    Integer egység

    Hasonlóan a Pentium processzorokhoz, ez is rendelkezik integer egységgel, méghozzá 2-vel.Az egyik az egész típusú RISC86os utasításokat hajtva végre, a másik ez idő alatt más egyciklusos utasítások hajt végre. A dekóder egység rendelkezik egy "betöltés kiegyenlítő" algoritmussal, és ennek segítségével irányítja az utasításokat valamelyik INTEGER-egységre.A RISC86 betöltő és tároló utasítások a CÍM-egységbe kerülnek, amely kiszámítja a cél címet, és gondoskodik az X86-os szabvány szerinti fordításról. Mivel a chip csak egy egyszerű CÍM-egységet tartalmaz, ciklusonként csak egy betöltő, vagy tároló utasítás hajtódhat végre.
    A processzor használja a Brach Target Prediction és az "elméleti futtatás" technológiáját is. Ha a processzor találkozik egy programággal, először megbecsüli a végrehajtásához szükséges időt, és majd később kezdi el az utasítások végrehajtását. Ezt a módszert nevezzük elméleti végrehajtásnak.A BTB elég jól működik : általános jellegű kódok esetén a helyes előrejelzés 90% körüli.A processzor 2x16 Kb cache-t tartalmaz (ez a Pentiuménak kétszerese), az egyik az adatoknak, a másik az utasításoknak, ahogy azt már megszokhattuk.A processzor támogatja Write-back és a Write-Trought eljárásokat, sőt a cache támogatja az önmódósító kódokat is.

    Dióhélyban ennyit szerettem volna elmondani erről a processzorról.

    Cyrix M1 processzor

    Másnéven ez volt az a bizonyos 6x86os processzor.

    INTEGER egység

    Itt is megtalálható a megszokott pipeline egység, viszont itt két pipeline egység szorosabban együttműködik, ezért ezt a technológiát Szuperpipeline technikának nevezzük.
    0.5 mikronos technológiát használnak. 32 db általános célú regiszter található benne, így többet tud tárolni, kevesebbszer kell a memóriához nyúlnia adatért.
    Emiatt általában csurig tele van adattal ami gyorsabb futást tesz lehetővé. Jó Branch Prediction.
    Cache terén marad a 8-8as felosztás,tehát 8Kb az adatnak és 8Kb az utasításoknak szolgál.Rendelkezik egy 16Kbos duálporton cache-el, amibe viszont mindkettő jöhet. Ez a cache alapvetően gyors, így maga a processzor is meglehetősen gyorssá válik. nem megoldott viszont a két szuperskalár pipeline függőségi viszonya, hiszen annyira egymásra vannak utalva, hogy képesek egymást bevárni, ez lassulást eredményezhet.Ezt úgy oldották meg, hogy a 32 regiszterbe letárolják a végeredményeket, és a másik pipeline ha éppen kellene az eredméyn, akkor onnan olvassa ki.
    Pipelinejai az X,Y névre hallgatnak.Előfordulhat az az eset, hogy kiegyenlítetlenség lép fel a két pipeline között, így lassul a processzor, hiszen az egyiknek be kell várnia a másikat. Ezt úgy oldották meg, hogyha az egyik pipelineban gyorsabb a műveletvégrehajtás akkor másikból az utasítások kiléphetnek a pipeline végrehajtási sorrendből, és lefuttatják magukat a szabadon levő pipelineval.





    Technikai Információk

    Terület141 négyzetmiliméter
    Gyártási technológia0.35 mikronos
    Tranzisztorszám4.5 millió
    Cache méret2x16Kb
    CPU Voltagekettős : 2.8V (Internal),3.3V (I/O)


    Ennek a szintén varázslatos 3 betűnek nagy hatása volt a processzoriparágra.
    Jelentése MultiMedia Extension.Azaz multimédia kiterjesztés, azaz arról van mindössze szó, hogy a multimédiás alkalmazások térhódításának következtében az alkalmazásoknak megnövekedett az erőforrásigénye, mégpedig drasztikus mértékben, szükségessé vált egy olyasmi kitalálása ami kicsit meggyorsítja a multimégiás alkalmazásokat( hang - és képfeldolgozás,2Ds és 3D-s számítások, hangszintézis stb...) ez az iparág minden területén érvényessé vált, gondolok itt a nagy teljesítményű és nagykapacitású háttértárolók, gyors SDRAMok (Syncronized Dinamic Random Access memory) megjelenésére.De mindezek közül a processzorok terén bekövetkeződött változások a legjelentősebbek, így itt is erre kívánok kitérni. A már jól ismert módszert alkalmazták.A probléma lefordítva az volt, hogy X műveletet (ami sok) le kell redukálni Yra, így kevesebb utasítással tudjuk elvégezni ugyanazt a műveletet, tehát gépünk gyorsul.De hogy tudjuk elérni azt, hogy kevesebb legyen a műveletek száma ?
    Úgy, hogy új utasítások definiálunk, mégpedig olyanokat amik a multimédiás számítások során lehetnek hasznosak, pl.: interpolálások,kerekítések,lebegőpontos számítások, gyors osztások,szorzások...
    Ezek az új műveletek nagyon jók, de csak úgy érünk el teljesítménynövekedést (ami az Intel állítása szerint 60%-al haladja meg az azonos órajel-ferekvenciájú Pentiumok teljesítményét a multimédiás és kommunikációs alkalmázokban) , ha ezeket az utasítások használjuk a programfejlesztés során, ehhez viszont át kell írni a meglévő alkalmazásokat, ha azt akarjuk, hogy kihasználják az MMX által nyújtott előnyöket. Ezért jelentek meg ssorran - főleg a játék - fejlesztők site-jaink a multimédiás programokhoz a patch-ek, kiegészítések.
    Ez úgy érték el az Intel fejlesztőmérnökei 1997 elején, hogy a Pentium processzorba építettek egy MMX egységet(később egységeket), amik tartalmazzák az új utasításokat.
    Az MMXes utasítások 57en vannak és így egy lépésben hajthatók végre azok az utasítások amik eddig egy jó tucatnyi lépésben.
    Ennek ellenére a már meglévő nem MMXes alkalmazások körülbelül (az Intel mérései szerint) 20%os teljesítménynövekedést eredményeznek.
    a kérdés mindössze annyi, hogy miért ?
    Azért, mert a lapkán már 32Kbájtos cache található (pontosan duplája a Pentiuménak), ezzel a processzornak kevesebb gondja van azzal, hogy a lassú háttértárral és főmmeóriával a kapcsolatot fenntartsa.
    szintén a gyorsításhoz sorolható az a tény is, hogy csökkentek a várakozások is.

    Szoftveres támogatás

    • DirectX 3.0 : játékok terén és azon alkalmazások terén amik ennek az eljárásait és hívásait használják.A DirectX és benne a Direct3Dvel egy API (Application Protokoll Interface), amit a Microsoft dolgozott ki azzal a céllal, hogy szűnjök meg a hardverspecifikusság a (alkalmazás)fejlesztők oldalán, mert ők ezt elvégzik ezt.Készítettek egy felületet ahova a gyártók integrálják a hardver drivereit, majd a fejlesztőknek mindössze annyi a feladatuk, hogy az onnantól már egységes DirectX-es hívásokat és megszakításokat használják.
    • Windows 95 OSR2 : rendszerszintű támogatás
    Kettős feszültséget használ, a belső üzemeléshez 2.8V-ot, az I/O műveletekhez 3.3V-ot annak érdekében, hogy külön hűtésre ne legyen szükség. Azonban a gyakorlati tapasztalat az, hogy mégis jobb az MMX processzorrra egy brutális Pentium Turbo hűtőventillátor.Ezért csak olyan alaplapokba helyezhető, ami támogatja a kettős tápfeszültséget (MMX kompatibilitás) (VRE felszültségszabályozó).Ilyen okok miatt készült el az MMXek Overdrive változata, amely már magának állítja elő a kétféle feszültséget.
    Az új 57 utasítás SIMD (Single Instruction, Multiple Data), azaz egy utasítással több adaton lehet műveletet végezni.
    A hatékonyabb számítás érdekében 4 db új adattípust definiáltak.

      Új adattípusok

    • packed byte (64 bites bájt típus)
    • packed word (64 bites szó típus)
    • packed doubleword (64 bites duplaszó típus)
    • packed quadword (64 bites 4szó típus)
    Az MMX technológia új, tömörített 64 bites formátumokat definiált...

      Memória adatformátumok

    • 8as tömörített: áll 8 db bájtból (8 bites)
    • 4es tömörített: áll 4 db wordből (16 bites)
    • 2es tömörített: áll 2 db doublewordből (32 bites) duplaszóból (doubleword)

    ez a 64 bit 0-tól 63ig van számozva.Az alsó bites alul, a felő bitek pedig felül foglalnak helyet, az alsó és felső rendszer ugyanúgy megmarad, mint korábban (pl.: AL+AH=AX)
    Az új regiszterek szintén 64 bitesek, elérésük ugyanúgy megy, mint a memóriáé, azzal a külömbséggel, hogy itt kétféle módon kezelhetőek, egyrészt 32 bitesen, vagypedig egyben 64 bitesen. Továbbá csináltak 8 db új 64 bites regisztert (MM0 - MM7).Ezek a Float Point Registers néven ismertek

      Arhitektúra

      Itt is jelentős módosítássokkal kell számolnunk.
    1. Új (F) Fetch pipeline lépcső
    2. Külön pipeline az MMX utasításoknak
    3. Továbbfejlesztett előrejelző algoritmus (BTB)
    4. 16 K-s L1 cache, 4 egyidejű hozzáféréssel
    5. 4 db mindkét pipe által közösen használt Write Buffer

    Az Pentium MMX processzor Pipelinejai

    hagyományos Integer pipelineok (U,V)

    Az MMX utasítások számára készült egy saját pipeline,ahol csak az MMXes utasítások hajtódnak végre. egység kapott egy Fetch (F) lépcsőt a PreFetch (PF) és a Instruction Decode (ID) közé. A byte-okat a PF lépcső olvassa be és választja szét utasításokra a F lépcső számára.
    Az ID oldalán ezek az utasítások ezután párosával kerülnek kiolvasásra.

    Az új MMX Pipeline

    Ennek pipelinenak 5 lépcsője van : A processzor magja továbbra is CISC maradt.

    MMX Utasítások

    Ezek az új utasítások párhuzamosan akár egyszerre több elemen is végezhetők.

    MMX Utasítások
    Név
    Operandus típusok
    Bájt 1
    Bájt 2
    Bájt 3, [4]
    EMMSNincs 0F77 mod-rm, [sib]
    MOVDregister, memory/iregister 0F6E mod-rm, [sib]
    MOVDmemory/iregister, register 0F7E mod-rm, [sib]
    MOVQregister, memory/register 0F6F mod-rm, [sib]
    MOVQmemory/register, register 0F7F mod-rm, [sib]
    PACKSSDWregister, memory/register 0F6B mod-rm, [sib]
    PACKSSWBregister, memory/register 0F63 mod-rm, [sib]
    PACKUSWBregister, memory/register 0F67 mod-rm, [sib]
    PADDBregister, memory/register 0FFC mod-rm, [sib]
    PADDDregister, memory/register 0FFE mod-rm, [sib]
    PADDSBregister, memory/register 0FEC mod-rm, [sib]
    PADDSWregister, memory/register 0FED mod-rm, [sib]
    PADDUSBregister, memory/register 0FDC mod-rm, [sib]
    PADDUSWregister, memory/register 0FDD mod-rm, [sib]
    PADDWregister, memory/register 0FFD mod-rm, [sib]
    PANDregister, memory/register 0FDB mod-rm, [sib]
    PANDNregister, memory/register 0FDF mod-rm, [sib]
    PCMPEQBregister, memory/register 0F74 mod-rm, [sib]
    PCMPEQDregister, memory/register 0F76 mod-rm, [sib]
    PCMPEQWregister, memory/register 0F75 mod-rm, [sib]
    PCMPGTBregister, memory/register 0F64 mod-rm, [sib]
    PCMPGTDregister, memory/register 0F66 mod-rm, [sib]
    PCMPGTWregister, memory/register 0F65 mod-rm, [sib]
    PMADDWDregister, memory/register 0FF5 mod-rm, [sib]
    PMULHWregister, memory/register 0FE5 mod-rm, [sib]
    PMULLWregister, memory/register0FD5 mod-rm, [sib]
    PORregister, memory/register 0FEB mod-rm, [sib]
    PSHIMD*register, immediate 0F72 mod-rm, imm
    PSHIMQ*register, immediate 0F73 mod-rm, imm
    PSHIMW*register, immediate 0F71 mod-rm, imm
    PSLLDregister, memory/register0FF2 mod-rm, [sib]
    PSLLQregister, memory/register 0FF3 mod-rm, [sib]
    PSLLWregister, memory/register 0FF1 mod-rm, [sib]
    PSRADregister, memory/register 0FE2 mod-rm, [sib]
    PSRAWregister, memory/register 0FE1 mod-rm, [sib]
    PSRLDregister, memory/register 0FD2 mod-rm, [sib]
    PSRLQregister, memory/register 0FD3 mod-rm, [sib]
    PSRLWregister, memory/register 0FD1 mod-rm, [sib]
    PSUBBregister, memory/register 0FF8 mod-rm, [sib]
    PSUBDregister, memory/register 0FFA mod-rm, [sib]
    PSUBSBregister, memory/register 0FE8 mod-rm, [sib]
    PSUBSWregister, memory/register 0FE9 mod-rm, [sib]
    PSUBUSBregister, memory/register 0FD8 mod-rm, [sib]
    PSUBUSWregister, memory/register 0FD9 mod-rm, [sib]
    PSUBWregister, memory/register 0FF9 mod-rm, [sib]
    PUNPCKHBWregister, memory/register 0F68 mod-rm, [sib]
    PUNPCKHDQregister, memory/register 0F6A mod-rm, [sib]
    PUNPCKHWDregister, memory/register 0F69 mod-rm, [sib]
    PUNPCKLBWregister, memory/register 0F60 mod-rm, [sib]
    PUNPCKLDQregister, memory/register 0F62 mod-rm, [sib]
    PUNPCKLWDregister, memory/register 0F61 mod-rm, [sib]
    PXORregister, memory/register 0FEF mod-rm, [sib]

    Felhasznált irodalom