Bár mind az Intel és mind az AMD már korábban bejelentették az egymással csatát vívó legújabb processzoraikat, a Pentium III-at és az Athlont, összefoglaló írásunkra az egyre kiélezôdô verseny adott alkalmat. Az 1 GHz-es órajel átlépése után az alább tárgyalt processzormaggal (mikroarchitektúrával) újabb processzorok jelennek meg 2000 második félévében, mind az AMD-tôl (Spitfire, Thunderbird, Mustang) és mind az Intel-tôl.

A két rivális a közelmúltban új processzorokkal jelent meg, amelyekre már jellemző, hogy egyre inkább eltávolodnak egymástól a felépítésüket tekintve. A piacot kétség kívül nagyobb mértékben az Intel határozza meg, azonban a vetélytárs is egyre inkább megerősödik, ami köszönhető az AMD laborjaiban végzett gyors fejlesztésnek éppúgy, mint az ötletes és nagy teljesítményű felépítésnek. Az Intel utolsó, asztali PC-kbe szánt áramköre a Pentium III nevet viseli, ennek nagy riválisa az AMD cég Athlon vagy K7 kódnévre hallgató processzora. A szaklapokban már több tesztcikk látott napvilágot, azonban a processzorok részletes belső felépítésének leírásával, pontosabban ezek összehasonlításával még nem találkozhattunk. Így írásunk az eddigiektôl eltérôen, egy új szemszögbôl, közérthetôen kívánja bemutatni a két processzor "belsô világát".

Microarchitectúra

A processzorok szuperskalár felépítésűek, ami azt jelenti, hogy a végrehajtó egység egy időben több adatfolyammal is képes műveleteket végezni. Az adatfolyam azoknak az adatoknak az összessége, amellyel a processzor egy folyamat utasításainak a végrehajtása közben dolgozik. Mivel az adatokon a műveleteket az aritmetikai-logikai egység (Arithmetic-logical Unit, ALU) végzi el, ezért természetesen ehhez több, egymással párhuzamosan működő ALU-ra van szükség. A technika használata a teljesítményt jelentősen megnövelheti.
A szuperskalár felépítés mellett további gyorsítási módok is szerepet kapnak, melyeket mindkét processzorban alkalmaznak is. Az AMD Athlon és a Pentium III processzor utasítás végrehajtása csővonalakon alapszik. A csővonal alkalmazásával utasítások feldolgozása párhuzamosítható. Ahhoz, hogy megértsük, hogy ez mit is jelent, nézzük meg röviden, hogy egy utasítás végrehajtása milyen elemi részekből áll!


A mikroutasítások felépítése

Az utasítások végrehajtását az alábbi lépésekre lehet felosztani
 

  1. A program kezdőcímének megadása
  2. Utasításelőkészítés és utasításlehívás. Ebben a két lépésből álló fázisban a programszámláló regiszter (Program Counter, PC) tartalma alapján a processzor kikeresi a tárból a soron következő utasítást, majd ez átkerül a vezérlő egység utasításregiszterébe (Instruction Register, IR). Az utasítás mindaddig ebben a regiszterben van, amíg végrehajtásra nem kerül.
  3. Utasításszámláló regiszter értékének növelése. Ebben a lépésben a PC tartalmát meg kell növelni az aktuális utasítás hosszának megfelelő értékkel, így a következő utasítást tároló memóriarekesznek a címét kapjuk meg. Ez csak abban az esetben nem igaz, ha az éppen lehívott utasítás vezérlésátadó utasítás, ami azt jelenti, hogy a program végrehajtását máshol kell folytatni.
  4. A műveleti kód értelmezése és az operandus címének meghatározása. Itt történik egyrészt a műveleti jelrész értelmezése, másrészt a művelethez szükséges operandus(ok) címének a meghatározása. A műveleti jelrész meghatározza, hogy a vezérlőegységnek mit kell csinálnia az utasítás hatására, az operandusok pedig az ehhez szükséges adatokat jelentik.
  5. Végrehajtás. A lehívott művelet végrehajtása a hozzá tartozó operandussal. Abban az esetben, ha a dekódolt utasítás vezérlésátadó utasítás, akkor ebben a lépésben a PC regiszter tartalmának a korrigálása is megtörténik, tehát már az ugrás utáni címre fog mutatni.
  6. Visszaírás. Az eredmény eltárolása a kijelölt helyre, ami lehet vagy a memóriában vagy valamelyik operandus helye.
A számítógépek többsége még 1-2 évvel ezelőtt is ilyen módon működött. A működés blokkvázlatát mutatja az alábbi ábra.
 

Az ábra az ún. soros utasítás-feldolgozást követi, ami a Neumann-elvű számítógépekre jellemző. Mint tudjuk az ilyen elven működő számítógépek az utasításokat és az adatokat ugyanabban a tárban tárolják, ezért azok elérése csak egymás után kerülhet sorra. Az utasításregiszterbe kerülő utasítás műveleti jelrésze vagy az aritmetikai egység működését szabja meg, vagy ugróutasítás esetén a programszámláló regisztert tölti fel az utasításban szereplő címmel.
A számítógép teljesítményének növeléséhez növelni kell az időegység alatt végrehajtható utasításokat. Ehhez az egyik legkézenfekvőbb megoldás, hogy az egységek ütemezésére szolgáló órajel frekvenciáját megnöveljük, így az egységek felgyorsulnak. Ennek azonban technológiai korlátjai vannak és ez komoly kihívást jelent a processzorgyártóknak. A soros utasítás-végrehajtás miatt a processzor részegységeinek a többsége nem dolgozik, mert vagy információt vár, vagy már végzett a saját műveletrészével. A másik módszer a gyorsításra a folyamatok és így az utasítás-végrehajtásnak is a párhuzamosításában rejlik. Ha a folyamatok végrehajtását párhuzamosítani szeretnénk, akkor azokat olyan részfázisokra kell bontani, amelyek végrehajtása más és más erőforráshoz kapcsolódik és végrehajtásuk önálló egységet képez. Így abban az esetben, ha az egyik erőforrás felszabadul, a következő folyamat hasonló feladatot elvégző fázisa igénybe veheti. Az aktuális fázis eredménye a következő induló paramétereit adja. Ilyen utasítás-végrehajtás során egy utasítás végrehajtási ideje nem csökken, azonban ugyanannyi idő alatt több utasítás dolgozható fel. Ezt az átlapolt végrehajtást csővonal (pipeline) működésnek nevezik.
Természetesen a működés csak elvében működik ilyen módon, a fizikai megvalósítása koránt sem ilyen egyszerű. Problémát elsősorban a részfolyamatok egymásra hatása okozza, amelynek megvalósításától függ a technika eredményessége.


A Pentium III processzorban öt csővonal található, amely használatával maximálisan öt műveletet képes egy órajel ciklus alatt végrehajtani. Az öt csővonalból kettő az egész számokkal való műveleteket párhuzamosítja, egy a címkiszámítás, egy pedig a lebegőpontos műveletek végrehajtását gyorsítja. Az Intel a P6-os processzorcsaládban - és így a Pentium III-ban is - a csővonal alkalmazásán túl további teljesítménynövelő technológiát is alkalmazott, amelynek a neve dinamikus végrehajtás (dynamic execution) és tulajdonképpen három technikát foglal magába:
 
  • Többszörös elágazás jóslás (Multiple branch predictions)

  • Ennek az algoritmusnak a használatával a processzor az esetek többségében meg tudja jósolni, hogy a következő utasítás melyik memória címen lesz megtalálható és onnan be tudja tölteni. Ennek az ugróutasítások használatakor van értelme, azonban ahhoz, hogy megértsük miről is van szó, nézzük meg az ugróutasítások végrehajtásának módját. A cikk elején már leírtuk az utasítások végrehajtásának elemi lépéseit és ott láthattuk, hogy a vezérlésátadó utasítások során csak a végrehajtási fázisban lesz a programszámláló regiszter a helyes címmel feltöltve. Ez nem is okoz gondot mindaddig, amíg az utasítás-feldolgozás sorosan történik. Abban az esetben, ha csővonal alkalmazásával az egy időben végrehajtott utasítások számát megnöveljük, problémával találhatjuk szembe magunkat. Mire az ugróutasítás végrehajtása megtörténik, addigra már a csővonalban több utasítás is lehívásra, dekódolásra került. Ezeket azonban feleslegesen végezte el a processzor, mivel a következő utasítások nem ezek lesznek. Ez miatt a csővonalat ki kell üríteni és az ugrás utáni új utasításokkal feltölteni. Ez természetesen felesleges idő, amit a többszörös elágazás jóslással nagy valószínűség szerint meg lehet előzni. A módszer alkalmazásával a következő utasítás címe mintegy 90%-kos pontossággal megjósolható, viszont ez a szám a program megfelelő struktúrájú megírásával még tovább növelhető.
  • Adatfolyam analízis (Data flow analysis)

  • A párhuzamosan végzett műveletek végrehajtása során előfordulhat, hogy azoknak egymás eredményeire lenne szükség. Értelemszerűen ez komoly probléma, mivel addig nem folytatódhat a függő utasítások végrehajtása, amíg ez a függőség fel nem oldódik. Ennek a megoldására fejlesztették ki az adatfolyam analízis elvét. A processzor az utasítás dekódolásakor (tehát még az operandusok lehívása előtt) megvizsgálja, hogy azok operandusai függenek-e egymástól. Ha nem, akkor nincs probléma, azok végrehajthatók. Azonban ha igen, akkor megpróbálkozik az optimális utasítássorrendet meghatározni, és így a függőségeket megszüntetni.
  • Spekulatív végrehajtás (Speculative execution)

  • A spekulatív végrehajtás az utasítások sorrendjének olyan manipulációját jelenti, amelynek eredményeként a teljesítmény a maximálisra növelhető, figyelembe véve a szuperskalár felépítés sajátosságait és az alkalmazásával kapcsolatos problémákat. A technika használatával a processzor foglaltsága esetén olyan utasítás kerül végrehajtásra - természetesen amennyiben erre lehetőség van -, amely más erőforrásokat köt le. Természetesen az ilyen esetekben az utasítások és az adatok egymással való függőségének a kezelésének kiemelkedő szerepe van.
Mint a fentiekből látható, a dinamikus végrehajtás tulajdonképpen a párhuzamosítások miatt fellépő problémák hatékony kezelését célozzák meg, ami a teljesítmény növekedésének alapvető feltétele.
Az AMD processzora a PIII-hoz képest jelentős felépítésbeli különbségeket mutat. Az Athlon (K7) 9 párhuzamos végrehajtó egységet tartalmaz, amelyből három szolgál a címkiszámításhoz, három az egész számokkal végrehajtandó művelethez és további három a lebegőpontos műveletekhez. Ez utóbbi alkalmas mind az MMX, mind a 3DNow!TM utasítások párhuzamosított végrehajtására. A kilenc csővonallal az Athlon maximálisan kilenc utasítás végrehajtására képes egy órajelciklus alatt.
Az alábbi ábrán szemügyre vehetjük az Athlon belső felépítésének blokkvázlatát.

A két processzor mikroarchitektúráját kiszolgáló, megvalósító processzormagja:


Athlon die
 
 
 


PIII die

Rendszersín
Mint az bizonyára ismeretes, a processzorok a 486DX2-es típus kibocsátása óta a belső áramkörök működése magasabb órajelen történik, mint a külső áramkörökkel való kommunikáció. A fejlődéssel eljött az az idő, amikor a sebesség alapvetően meghatározó eleme a perifériákkal való kommunikáció lett. Ezért a gyártóknak elsődleges feladatukká vált, hogy gyorsítsák a külső sín sebességét, azonban ez nem ilyen egyszerű feladat. Az órajel-frekvencia növelésével az áramkörökben működő tranzisztorok által kibocsátott hő erősen megnövekszik. Ha elér egy kritikus értéket, akkor a tranzisztorok árama megnő, ami további hőmérsékletnövekedést okoz. Ez a folyamat nem áll meg addig, amíg a tranzisztor tönkre nem megy. A hatás ellen erős hűtéssel védekezhetünk, de ezt sem lehet a végtelenségig növelni.
A Pentium III processzor a külvilággal, tehát a perifériákkal és a memóriával 66, 100 vagy egyes típusoknál maximálisan 133 MHz-es sebességgel kommunikál, a belső egységek működése megközelítheti vagy akár meg is haladhatja az 1 GHz-et is. A PIII belső órajel generátora a külső rendszerórajelet egy fix értékkel szorozza meg. Ez a szorzószám 4-től 8-ig terjedhet, felenkénti növekedéssel.
Az AMD processzora az első a PC technikában, amelynél a rendszersín órajele eléri, de akár meg is haladhatja a 200MHz-et. Az Alpha-tól vásárolt technika lehetővé teszi 400 MHz-nél magasabb órajelű rendszersín kialakítását is, az EV6 buszrendszernek köszönhetôen. A külső perifériák nem alkalmasak arra, hogy ekkora sebességgel működjenek, ezért ezeknél az órajel maximálisan 133MHz-es lehet.
Cache
Az utasítások, mint már tudjuk, a memóriában kerülnek tárolásra. Abban az esetben, ha a processzornak szüksége van egy utasításra vagy egy adatra, a memóriához kell fordulnia. A memória működési sebessége a processzorhoz képest nagyon lassú. Olvasás esetén a processzornak el kell küldeni az olvasni kívánt memóriarekesz címét. Ezt a tároló feldolgozza, majd az adatvezetékekre teszi a kívánt rekesz tartalmát. Azt az időt, ami a cím elküldésétől az adat megjelenéséig eltelik, elérési időnek nevezzük. A következő olvasásig várni kell, amíg a memória alkalmas lesz a következő olvasásra vagy írásra. Azt az időt, amelynek el kell telnie két olvasás vagy írás között, ciklusidőnek nevezzük. Általában, de manapság minden estben a ciklusidő nagyobb, mint a processzor működési sebessége, amiből következik, hogy ilyen műveletek során a processzornak várnia kell. Ennek kiküszöbölésére egy viszonylag kis méretű, de a processzor sebességének megfelelő memóriát használnak, amit cache-nek, vagy magyarul gyorsítótárnak neveznek. Ez egy statikus RAM - amely rendkívül kis ciklusidővel rendelkezik és a processzor, valamint az operatív tár között helyezkedik el - a felhasználó számára nem érhető el és vagy a processzorban, vagy a processzoron kívül helyezkedik el. A cache tároló és a memória között az adatátvitel mindig blokkos formájú, ami azt jelenti, hogy nem csak egy adatot viszünk át, hanem egy egész blokkot visz át a processzor. Ezek a blokkok a memóriában folytonosan elhelyezkedő adatok, ami azt a tényt mutatja, hogy az utasítások és az adatok felhasználása is többnyire az egymást követő tároló helyekről történik. A cache tárak nem csak az utasításokat, hanem az adatokat is, illetve ezeket külön-külön is tárolhatják. A tárolás során a memóriarekeszek címét is el kell tárolni, a visszakeresés tartalom szerint történik. A működés szempontjából fontos, hogy a cache tartalmának változtatásakor a megfelelő adatokat írjuk felül az új értékekkel. Ennek biztosítására több módszer is kialakításra került, ám ezek ismertetése meghaladja a cikk kereteit. A Pentium III és az Athlon processzorban is kétszintű cache-tárat alkalmaznak, egy kisebb méretűt a processzormagban, és egy nagyobb méretűt a processzormagon kívül. Az előbbit szokás első szintű (Level 1, L1), míg az utóbbit második szintű (Level 2, L2) cache-nek is nevezni. A PIII L1 gyorsítótárának a mérete 32 KBájt, ugyanez az Athlonnál 128 KBájt. Az L2 mérete mindkét processzornál váltózó, a típus határozza meg. Az L2 a PIII esetében 512 KBájttól 2 MBájtig terjedhet, míg az Athlonnál 512 KBájttól akár 8 MBájtig. Minkét processzornál a cache 64 bit szélességű. Nagyon fontos szempont a cache sebessége mind az első, mind a második szint esetében. Az L1 szinten nincs probléma, mivel az minden estben a processzor órajelével üzemel, tehát a kommunikáció a processzor és a cache között várakozási állapotok beiktatása nélkül megoldható. Az L2 cache estében már kissé bonyolultabb a helyzet. Ha a cache lassabb órajellel működik, akkor a processzor várakozni kényszerül az adatokra. Mindkét processzor esetében gondot fordítottak ennek a problémának a kiküszöbölésére, ezért az L2 cache is a processzor órajelével működik. A Pentium III processzorban annak érdekében, hogy a cache-el folytatott kommunikáció ne terhelje le a rendszersínt, dedikált (csak erre szolgáló) sínt alakítottak ki. Ennek a technológiának a neve Dual Independed Bus (DIB). Az alábbi ábrán látható a két rendszer közötti különbség.

 
A Pentium processzor esetében a kommunikáció a második szintű cache-el a chipset-en (lapkakészlet) keresztül zajlott, ami a külső sínrendszer foglaltsága miatt a csak a maximális sebességnél jóval lassabban történhetett. Ezért az Intel már a PII processzorban a dedikált cache sínt alkalmazta, ami a teljesítmény növekedését vonta maga után. Ez a megoldás vonta maga után a SECC tokozás bevezetését, de erről a későbbiekben még lesz szó.
Utasításkészlet
A processzorokat az utasításkészletük alapján két csoportba sorolhatjuk, ennek megfelelően megkülönböztetünk redukált (Reduced Instructions Set Computing, RISC) és komplex utasításkészletű (Complex Instructions Set, CISC) felépítésű CPU-kat. A RISC processzorok kevés utasítással rendelkeznek, ezek azonos hosszúságúak, a végrehajtásuk nagyon gyors. Ezzel szemben a CISC archtiketúrájú áramkörök sok utasításból álló az utasításkészlettel rendelkeznek és ezek az utasítások nagyon változó hosszúságúak lehetnek.
Mindkét processzor kívülről nézve CISC processzornak tekinthető.  Ez a végrehajtás szempontjából nem szerencsés, mert minél hosszabb egy utasítás, annál tovább tart a végrehajtása. A CISC felépítésre a régebbi processzorokkal való kompatibilitás miatt van szükség. Az újabb processzorok esetében ahhoz, hogy a teljesítményt még tovább lehessen növelni, komoly felépítésbeli változtatást kellett elvégezni, azonban meg kellett tartani a lefele való kompatibilitást is. Ezt a kettősséget úgy oldották meg mindkét processzornál, hogy a processzormag RISC architektúrájú, a CISC utasításokat pedig emulálják a processzorok. Az utasítások nagy többsége olyan, hogy azok skalár számokkal végeznek műveleteket. Ezek a hétköznapi alkalmazásoknál tökéletesen megfelelnek, azonban a speciális, például vektorokkal dolgozó programoknál már lassú működést eredményez.
A Pentium III is és az AMD Athlon processzora is rendelkezik olyan utasításkészlettel, amely a multimédiás és a 3D-s alkalmazásokban előforduló műveletek elvégzésére szolgálnak. Az Intel már a Pentium MMX processzorában kidolgozta azokat az utasításokat, amelyek a multimédiás alkalmazásokban előforduló gyakori műveletek elvégzésére alkalmasak. Ezek vektoros adatokkal dolgoznak. Az AMD is követte a riválisát, azonban egy teljesen új utasításkészletet dolgozott ki, amely a 3 dimenziós számításokat hivatott elvégezni és ezt nagy hatékonysággal meg is tudta valósítani. Ezt a teljesen új technológiát 3DNow!TM-nak nevezték el. A PIII 71 MMX utasítást tartalmaz, a Athlonnál ez csupán 45. Azonban nem feltétlenül a több utasítás nyújt nagyobb számítási teljesítményt. Mindkét CPU egyszeres pontosságú SIMD (Single Instruction Stream, Multiple Data Stream, egy utasításfolyam, több adatfolyam) lebegőpontos egységgel rendelkezik a 3D-s és az MMX-es utasítások feldolgozásához. Az előbbi mondatban szerepelt két fogalom, amely a processzorok felépítésének a jellemzésekor kerül szóba. Az utasításfolyam azoknak az utasításoknak az összessége, amelyet a processzor végrehajt egy folyamat elvégzése során. Ez nem egyezik meg a programlistában szereplő utasításokkal, mivel a listában többször előforduló utasításcsoportokat általában egyszer, ciklussal írjuk le, addig az utasításfolyamban ezek annyiszor fordulnak elő, amennyit a ciklus meghatároz. Az adatfolyam azoknak az adatoknak az összességét jelenti, amellyel a processzor egy utasításfolyam végrehajtása közben dolgozik. A SIMD rövidítés azt jelenti, hogy egy utasításfolyam több adatfolyammal képes egy időben műveleteket végezni, tehát ezekből az egységekből több dolgozik párhuzamosan. Az Athlon a három lebegőpontos egységével a felépítésnek köszönhetően 4 lebegőpontos műveletet képes egy órajelciklus alatt elvégezni, ezzel szemben a PIII csupán egyet. Mindegyik processzor előrejelzést alkalmaz az adatfüggőségek kiküszöbölésére, viszont csak az Athlon rendelkezik a digitális jelfeldolgozáshoz alkalmas bővítéshez. A digitális technikának ez egy kritikus területe, mivel nagyon gyorsan és nagyon sok adattal kell dolgozni egyszerre. A piacon erre a célra céláramköröket (Digital Signal Processor, DSP) használnak.
Fizikai adatok, tokozás
A PIII CPU körülbelül 9,5 millió tranzisztorból áll, ez a szám a ATHLON esetében 22 millió. A két érték között hatalmas a különbség, aminek az egyik oka, a cache memória négyszeres mérete a PIII-hoz képest. A párhuzamos végrehajtó egységek nagyobb száma is magával vonzza a tranzisztorok számának a növekedését.
A Pentium III a PII-nél megismert SECC (Single Edge Contact Cartridge, egysoros csatlakozós kazetta) tokba került a processzor az L2 cache. Ez a tok a SLOT1 néven bevezetett csatlakozóba ültethető. A processzort szerelik OEM változatban, ebben az esetben a hűtőt nem adják a CPU mellé, valamint a műanyag tok egyik fele is hiányzik. Ezeknél a hűtésről nekünk kell gondoskodnunk, amire komoly hangsúlyt kell fektetni a fokozott melegedés miatt.
Az AMD az Athlon processzoránál szakított a PGA (Pin Grid Array) tokozással és áttért az Intel által már használt kazettás burkolatra. A processzor azonban nem illeszthető a SLOT1 foglalatba, mivel annak specifikációját az Intel nem adta közzé, illetve csak hatalmas összegért hajlandó erre. Ezért az Athlonnál a SlotA csatlakozót fejlesztették ki. Ennek a paraméterei nagyon hasonlóak a SLOT1-hez, azonban a processzorok nem keverhetők össze, erre pozíciós bevágások szolgálnak.
A két processzor, a külső sínrendszer jelentős eltérése miatt más alaplapot igényel. Pontosabban nem is az alaplapon van a hangsúly, hanem a perifériák és a processzor működését összehangoló lapkakészleten. Ma az Intel 810 és 815, valamint az AMD 750 chipsetek vannak a piacon, ezeket lehet a megfelel? processzorhoz beszerezni. A lapkakészletek fejlesztése is töretlen, amit a piacon az újabb alaplapok megjelenésével lehet követni.

      

Összefoglalva a két processzor sok paraméterében hasonlatos, de sokban pedig eltérő. A kompatibilitásról már csak olyan szinten beszélhetünk, hogy azok értelmezni és végrehajtani képesek a 8086/286/386/486/P5 processzorok utasításait. A rivalizálás tovább folyik és a tesztek alapján úgy látszik, hogy most egy kicsit az AMD irányába billent a mérleg nyelve. Azt, hogy a jövőben milyen megoldásokkal jönnek ki a gyártók előre nem lehet megjósolni, de az azonban látszik, hogy a verseny erős és nem csak egymással, hanem a technológiai korlátokkal is.