Mindennapi processzorunk rovat:
Intel A80860XR-33 és A80860XP-50
Az
Intel i860 (másként
80860) egy korai RISC mikroprocesszor volt az Inteltől. 1989-ben mutatták be. Az i860 (az i960-nal együtt) egyike volt az Intel első, vadonatúj, csúcskategóriás ISA létrehozására irányuló erőfeszítéseinek az 1980-as évek elején megbukott i432 óta. Nagy hírveréssel vezették piacra, ami elhomályosította az Intel i960 indulását is, bár az utóbbi CPU-t sokan jobbnak tartották. Az Intel az i860-at „szerényen” csak a „Cray on a Chip” jelzővel illette. Az i860 sosem lett kereskedelmileg sikeres, és a projektjét az 1990-es évek közepén végleg lezárták.
Technikai tulajdonságai
Az i860 egy sor, abban a korban egyedinek számító tulajdonságot kombinált: ezek közül talán a legfigyelemreméltóbb a VLIW (
Very Long Instruction Word) architektúra és az erőteljes lebegőpontos támogatottság voltak. 32-bites ALU és 64-bites FPU kapott helyett a chipen. Az FPU maga is három alegységből állt: egy összeadó, egy szorzó és grafikus processzor alkották. Az ALU önálló csővezetéket kapott, akárcsak az FPU összeadó egysége, valamint a szorzóegység. A rendszer így legfeljebb három műveletet képes volt végrehajtani órajelenként (ti. egy integer utasítást, és egy lebegőpontos szorzás-és-összeadás műveletet). Az FPU opkódjának egy bitje jelezte, hogy a következő egészpontos/lebegőpontos utasításpár végrehajtható-e egyidejűleg.
A 8 kilobájtos adatcache-t a CPU korlátozásokkal, de használhatta úgy is, mint egy kicsiny vektor regisztert (hasonlóan a szuperszámítógépekhez). A cache szokatlan szervezésű volt: virtuális címeket használt a fizikaiak helyett, emiatt aztán frissíteni kellett minden egyes alkalommal, amikor a laptáblák megváltoztak, még akkor is, ha a gyorsítótárban tárolt adatok egyébként változatlanok maradtak. Az utasítás- és adatbuszok elkülönültek, összesen legfeljebb 4 GB memória volt használható szegmentálással. A chip tartalmazott egy MMU-t is a virtuális tároláshoz.
A rendszer valamennyi busza legalább 64-bites volt, de például a gyorsítótárhoz vezető belső memóriabusz 128 bit szélesre sikeredett. Mindkét egységnek (ALU és FPU) 32 darab 32-bites regisztere volt, de az FPU képes volt a saját készletét összevonni 16 darab 64-bites regiszterré. Az ALU számára órajelenként két utasítás került lehívásra, hogy a külső busz teljes 64-bites kapacitását kihasználják. Az Intel mindig is „i860 64-Bit Microprocessor”-ként hivatkozott erre a CPU-ra, noha a 32-bites ALU regiszterek nyilvánvalóvá teszik, hogy nem volt teljesen 64-bites a processzor.
Abban a korban a 3D grafikus egység egyedinek számított, különösen egy CPU-ba építve. Lényegében egy 64-bites egészpontos egység volt, ami az FPU regisztereit használta. Számos SIMD-szerű utasítást támogatott az alapszintű 64-bites egészpontos matematikán túlmenően. Az i860 tapasztalatai befolyásolták a később a Pentiumokban megjelenő MMX utasításkészlet funkcionalitását. Támogatta a vonalrajzolást, a Gouraud árnyékolást, volt benne Z-buffering a rejtett vonalak eltüntetésére és egyéb, az FPU-val összefüggő műveletek.
Szokatlan tulajdonsága volt az i860-nak az, hogy a funkcionális egységek csővezetékeit programból is el lehetett érni. Ez azt követelte meg a fordítóprogramoktól, hogy az objektumkódok utasítássorrendjét nagy körültekintéssel állítsák össze annak érdekében, hogy a csővezeték futásidő alatt a lehető legtovább feltöltött állapotban maradjon. A hagyományos felépítésű processzorokban ez a feladatütemező logika dolga volt, amit a CPU-ba építettek, de ezeknek a struktúráknak az összetettsége korlátozta a korai RISC-processzorokban való alkalmazhatóságukat. Az i860 egy (mint azt látni fogjuk az okokat) elvetélt kísérlet volt ennek a feladatnak a compilerek részére történő teljes körű delegálására. Így viszont több hely maradt a funkcionális egységek számára, ami megnövelte azok teljesítményét. A felépítése eredményeként az i860 bizonyos grafikus és lebegőpontos algoritmusokban kivételesen nagy teljesítményre volt képes, de csak szenvedett az általános célú alkalmazásokban, és nehéz volt a programozása is.
Teljesítmény(problémák)
Papíron a produkció lenyűgöző volt egy egychipes megoldástól: a valós teljesítmény azonban már... Az egyik, akkoriban talán még fel sem ismert probléma az volt, hogy a futásidőben bekövetkező elágazások előrejelzése finoman szólva is necces volt. Emiatt a megfelelő utasítássorrend fordításidőben történő beállítása kivételesen nehéz volt. Például ha egy összeadó utasítás két adata nem állt rendelkezésre a gyorsítótárban, az lényegesen megnövelte az utasítás végrehajtási idejét. És azt bizony a programozó nem tudhatta előre, hogy mikor lesz a cache-ben egy adat, és mikor nem. Ha rosszul találgatott, az egész csővezeték megakadt az adatokra várakozván. A teljes i860 design azon alapult, hogy a fordítóprogramok hatékonyan képesek lesznek végrehajtani ezt a feladatot, de ez a gyakorlatban lehetetlennek bizonyult. Míg elméletileg az i860 XP változata képes volt 60-80 MFLOPS csúcsteljesítményre egyszeres pontosságú és kétszeres pontosságú számításokban egyaránt, a gyakorlatban a kézzel optimalizált assembly kódokkal legfeljebb 40 MFLOPS-ot ért el. A compilereknek pedig még a 10 MFLOPS elérése is nehezükre esett.
Egy másik komoly probléma volt a kontextusváltások gyors lekezelésének teljes hiánya. Egy megszakítás az i860 összes csővezetékét teljes újratöltésre kényszeríthette. Ez a legjobb esetben 62 ciklust igényelt, a legrosszabb esetben azonban majdnem 2000 ciklust. Az utóbbi eset egy másodperc 1/20000-ed része volt (vagyis 50 µsec), ami egy CPU számára maga az örökkévalóság. És ez nagyon súlyos érv volt az i860 általános célú alkalmazása ellen.
Változatok
A chip kétféle változatban került forgalomba, az alapszintű
XR (kódneve
N10) és az
XP (kódneve
N11) kiadásokban. Az XP-ben nagyobb méretű, magra integrált gyorsítótárak voltak, kapott másodszintű gyorsítótárat is, továbbá gyorsabb buszokat és hardveres támogatást a buszmegosztáshoz és a cache koherenciához, ami a többprocesszoros rendszerekben való felhasználáshoz szükségeltetett. Az XR 25 és 40 MHz közötti sebességeken futott, majd amikor a gyártásával az Intel átállt az XP technológiájára (1 µm-ről 0,8 µm-re), az XR is elérte az 50 MHz-et. Mindkét változat ugyanazt az utasításkészletet kapta.
Alkalmazások
Eleinte az i860-at csak csekély számban, nagygépekben alkalmazták, például az iPSC/860 rendszerben, ami a los alamos-i Nemzeti Laboratóriumban működött. Ahogy a compilerek fejlődtek, az i860 általános teljesítménye is így tett, de addigra a legtöbb versenytárs RISC CPU túllépett az i860 teljesítményén.
Az Intel egy ideig tesztelte az i860 életképességét, mint munkaállomások lehetséges központi egységéét, a MIPS architektúrával és másokkal összevetve. A Microsoft a kezdetekben azt, amiből a Windows NT lett, belső tervezésű i860 munkaállomásokon fejlesztette (kódneve
Dazzle volt), és az NT-t csupán portolta a MIPS (Microsoft
Jazz), az Intel i386 és más rendszerekre. Pletykálták, hogy az „NT” eredeti jelentése „N-Ten” lett volna, az i860 kódneve után.
Az i860 azért kapott némi feladatot munkaállomásokban, mint grafikus gyorsító. Többek között a NeXTdimension-ben kapott munkát, ahol a Mach kernel lebutított változatát futtatta komplett PostScript környezetben. Mindazonáltal a projekt PostScript részét sosem fejezték be teljesen, csak színes pixelek mozgatásáig jutott el. Ebben a feladatkörben az i860 lényegesen jobban teljesített, mivel a teljes program szépen elfért a cache-ben, ily módon teljes mértékben „előrejelezhetővé” vált a compilerek számára a helyes utasítássorrend. Egy másik példa az SGI Onyx Reality Engine 2 volt, amelynek geometriai motorjában számos i860XP processzort használtak. De ez a fajta felhasználás is lassan eltűnt, ahogy az általános célú CPU-k elérték az i860 teljesítményszintjét, és az Intel is inkább a Pentium fejlesztése felé fordult.
A későbbiekben az Intel a teljes RISC-vonalát ARM-alapúra cserélte, amit XScale néven ismerünk. Némi zavart okozott évekkel később, hogy a 860-as számot ismételten felhasználták a Xeonok mellé szánt alaplapi lapkakészlet jelölésére.
... a trip back in time is all I need ...