Berkeley RISC - Berkeley RISC

A Berkeley RISC a csökkentett utasításkészlet-számítógépes (RISC) alapú mikroprocesszoros tervezés két alapvető kutatási projektjének egyike, amely az Advanced Research Projects Agency ( ARPA ) VLSI projekt keretében zajlik . RISC vezette David Patterson (aki megalkotta a RISC), a University of California, Berkeley 1980 és 1984 között A másik projekt zajlott egy rövid távolságra a Stanford Egyetem alatt MIPS erőfeszítés kezdődő 1981-ig tartó 1984.

Berkeley projektje annyira sikeres volt, hogy az összes hasonló terv nevének lett a neve; még a MIPS is "RISC processzor" néven vált ismertté. A Berkeley RISC tervezés később által forgalmazott Sun Microsystems a SPARC architektúra és inspirálta az ARM architektúra .

A RISC koncepció

A RISC és a MIPS is abból a felismerésből jött létre, hogy a programok túlnyomó többsége nem a processzor utasításainak túlnyomó részét használta. Egy híres 1978-as cikkben Andrew S. Tanenbaum bebizonyította, hogy egy bonyolult, 10 000 soros magas szintű program képviselhető egy egyszerűsített utasításkészlet-architektúra segítségével, 8 bites rögzített hosszúságú opcode használatával. Nagyjából ugyanerre a következtetésre jutottak az IBM-nél is , akiknek a nagygépeken, például az IBM 360-en futó saját kódjuk tanulmányozása az összes rendelkezésre álló utasításnak csak egy kis részhalmazát használta fel. Mindkét tanulmány azt sugallta, hogy sokkal egyszerűbb CPU-t lehet előállítani, amely még mindig a valós kódok túlnyomó részét futtatja. Egy másik apróság, amelyet akkor még nem fedeztek fel teljesen, Tanenbaum megjegyzése volt, hogy az állandók 81,4 százaléka 0, 1 vagy 2 volt.

Ezek a felismerések akkor zajlottak le, amikor a mikroprocesszorok piaca 8-ról 16-bitesre mozgott, 32 bites kialakítással. Ezeket a processzorokat abból a célból tervezték, hogy megpróbálják lemásolni a nagyszámítógépes és a miniszámítógépes világ néhány jobban elismert ISA-ját. Például a National Semiconductor NS32000 a VAX-11 egychipes megvalósításának megalkotásaként indult , amelynek gazdag utasításkészlete volt, sokféle címzési móddal . A Motorola 68000 általános elrendezésben hasonló volt. Ennek a gazdag utasításkészletnek a biztosításához a CPU-k mikrokód segítségével dekódolták a felhasználó által látható utasításokat belső műveletsorozattá. Ez a mikrokód képviseli talán 1 / 4 , hogy 1 / 3 a tranzisztorok a teljes design.

Ha - amint ez a többi tanulmány is sugallja - ezeknek az opkódoknak a többségét soha nem használnák a gyakorlatban, akkor ez a jelentős erőforrás kárba veszne. Ha egyszerűen ugyanazt a processzort kellene megépíteni, eltávolítva a fel nem használt utasításokat, az kisebb és ezáltal olcsóbb lenne, míg ha ehelyett ezeket a tranzisztorokat használná a teljesítmény javítása érdekében a nem használt utasítások dekódolása helyett, akkor gyorsabb processzor lehetséges. A RISC koncepciója mindkettő kihasználása volt, olyan CPU-t állítva elő, amely ugyanolyan összetettségű, mint a 68000, de sokkal gyorsabb.

Ehhez a RISC arra összpontosított, hogy még sok regisztert hozzon létre, olyan kis memóriabiteket, amelyek ideiglenes értékeket tartalmaznak, amelyekhez nagyon gyorsan lehet hozzáférni. Ez ellentétben áll a normál fő memóriával , amelynek elérése több ciklust is igénybe vehet. Több regiszter biztosításával és annak biztosításával, hogy a fordítók valóban használják őket, a programoknak sokkal gyorsabban kell futniuk. Ezenkívül a processzor sebességét pontosabban meghatározná az órajelének sebessége, mert kevesebb ideje töltődik a memória elérésére várva. Tranzisztor a tranzisztorhoz, egy RISC kialakítás felülmúlja a hagyományos CPU-t, remélhetőleg sokkal.

Hátránya, hogy az eltávolított utasítások általában több "részutasítást" hajtottak végre. Például ADD egy hagyományos formatervezési minta általában többféle ízben jelenik meg: az egyik két regiszterbe adta a számokat, és egy harmadikba tette, a másik a fő memóriában található számokat adta hozzá, és az eredményt nyilvántartásba vette stb. A RISC-tervek viszont csak egyetlen ízt tartalmaztak egy adott utasításnak, ADD például mindig regisztereket használtak minden operandushoz. Ez arra kényszerítette a programozót, hogy írjon további utasításokat az értékek memóriából történő betöltésére, ha szükséges, így egy RISC program "kevésbé sűrű".

A drága memória korszakában ez valódi gondot okozott, főleg azért, mert a memória is sokkal lassabb volt, mint a CPU. Mivel egy RISC tervezéshez ADD valójában négy utasításra lenne szükség (két betöltés, hozzáadás és mentés), a gépnek sokkal több memória hozzáférést kell tennie az extra utasítások elolvasása érdekében, ami jelentősen lelassíthatja azt. Ezt bizonyos mértékben ellensúlyozta az a tény, hogy az új tervek akkoriban nagyon nagy, 32 bites utasításszót használtak , lehetővé téve a kis állandók közvetlen behajtását az utasításba ahelyett, hogy külön kellett volna betölteni őket. Ezenkívül az egyik művelet eredményeit gyakran hamarosan felhasználja a másik, így az írás memóriába hagyásával és az eredmény nyilvántartásban való tárolásával a program nem lett sokkal nagyobb, és elméletileg sokkal gyorsabban futtatható. Például egy sor matematikai művelet végrehajtásához szükséges utasítások csak néhány terhelést igényelhetnek a memóriából, míg a használt számok többsége vagy konstans az utasításokban, vagy köztes értékek maradnak a regiszterekben az előző számításokból. Bizonyos értelemben ebben a technikában egyes regisztereket a memóriahelyek árnyékolására használnak , így a regisztereket a memóriahelyek proxyként használják, amíg végső értékeik nem lesznek megadva, miután egy utasításcsoportot meghatároztak.

A hétköznapi megfigyelő számára nem volt világos, hogy a RISC koncepció javítja-e a teljesítményt, sőt, még rosszabb is lehet. Az egyetlen módja annak, hogy szimuláljunk. Az ilyen szimulációk eredményei egyértelműek voltak; a teszt utáni teszt során minden szimuláció óriási általános előnyöket mutatott a teljesítmény szempontjából ebből a tervből.

A két projekt, a RISC és a MIPS különbözött a nyilvántartások kezelésében. A MIPS egyszerűen sok regisztert adott hozzá, és a fordítókra (vagy az összeállítási nyelvű programozókra) bízta, hogy ezeket felhasználják. A RISC viszont áramkört adott a CPU-hoz, hogy segítse a fordítót. A RISC a regiszterablakok fogalmát használta , amelyben a teljes "regiszterfájlt" blokkokra bontották, lehetővé téve a fordító számára, hogy az egyik blokkot a globális változókra, a másikat a helyi változókra "lássa".

Az ötlet az volt, hogy egy különösen elterjedt utasítást, az eljáráshívást rendkívül egyszerűen végrehajthassanak. Szinte az összes programozási nyelv aktiválási rekordként vagy veremkeretként ismert rendszert használ minden eljáráshoz, amely tartalmazza a címet, amelyről az eljárást meghívták, az adatokat (paramétereket), amelyeket továbbítottak, és helyet a visszaadandó eredményértékeknek. . Az esetek túlnyomó többségében ezek a keretek kicsiek, jellemzően három vagy kevesebb bemenettel és egy vagy egy kimenettel (és néha egy bemenetet kimenetként újra felhasználnak). A Berkeley-tervezés során a regiszterablak több regiszter halmaza volt, amelyekből elég annyi, hogy a teljes eljárási veremkeret nagy valószínűséggel teljesen belefér a regiszterablakba.

Ebben az esetben az eljárás behívása és visszatérése egyszerű és rendkívül gyors. Egyetlen utasítást kell meghívni egy új regiszterblokk - egy új regiszterablak - felállítására, majd az új ablak "alsó végén" az eljárásba átadott operandusokkal a program az eljárásba ugrik. Visszatérve az eredményeket ugyanabban a végén helyezzük el az ablakban, és az eljárás kilép. A regisztrációs ablakok úgy vannak beállítva, hogy átfedjék egymást a végén, így a hívás eredményei egyszerűen "megjelennek" a hívó ablakában, és nem kell adatokat másolni . Így a közös eljáráshívásnak nem kell kölcsönhatásba lépnie a fő memóriával, jelentősen felgyorsítva azt.

Hátránya, hogy ez a megközelítés azt jelenti, hogy a nagyszámú helyi változóval rendelkező eljárások problematikusak, és kevesebbel vezetnek a nyilvántartások - egy drága erőforrás - pazarlásához. A tervezés során véges számú regiszterablak található, például nyolc, így az eljárásokat csak annyi szinten lehet egymásba ágyazni, mielőtt a regiszterelszámolási mechanizmus elérné a határát; az utolsó ablak elérése után nem lehet új ablakot beállítani egy másik beágyazott híváshoz. Ha pedig az eljárások csak néhány szint mélyen vannak beágyazva, akkor a legmélyebb hívásfészkelési szint feletti ablakokban lévő regisztrációkhoz egyáltalán nem lehet hozzáférni, így ezeket teljesen elpazaroljuk. Stanford fordítóin végzett munkája arra késztette őket, hogy figyelmen kívül hagyják a regisztráció ablak koncepcióját, abban a hitben, hogy egy hatékony fordító jobban ki tudja használni a regisztereket, mint a hardverben rögzített rendszer. (Ugyanez az érvelés vonatkozik az intelligens összeállítási nyelvű programozókra is.)

RISC I

Az első kísérlet a RISC koncepció megvalósítására eredetileg Arany volt . A tervezéssel kapcsolatos munka 1980-ban kezdődött a VLSI tervező tanfolyam részeként, de az akkor bonyolult tervezés szinte minden létező tervező eszközt összeomlott. A csapatnak jelentős időt kellett eltöltenie az eszközök fejlesztésével vagy újraírásával, és még ezekkel az új eszközökkel is alig egy órába telt, mire a VAX-11/780-ra tervezték .

A RISC I névre keresztelt végleges tervet 1981- ben a Association for Computing Machinery (ACM) Nemzetközi Számítógépes Építészeti Szimpóziumában (ISCA) tették közzé. 44 500 tranzisztorral rendelkeztek, amelyek 31 utasítást hajtottak végre, és 78 32 bites regisztert tartalmazó nyilvántartási állományt. Ez lehetővé tette hat, 14 regisztert tartalmazó regiszterablakot. E 14 regiszterből 4 átfedésben volt az előző ablakból. A teljes összeg ekkor: 10 * 6 regiszter a Windowsban + 18 globális = 78 regiszter összesen. A vezérlő és utasító dekódolási szakasz csak a szerszám 6% -át foglalta el, míg a korszak tipikus kialakítása körülbelül 50% -ot használt ugyanarra a szerepre. A nyilvántartási fájl elfoglalta ennek a térnek a nagy részét.

A RISC I kétlépcsős utasításvezetéket is tartalmazott a további sebesség érdekében, de anélkül, hogy a komplex utasításokat át kellene rendelni a modernebb kialakításokhoz. Ez problémássá teszi a feltételes elágazásokat, mert a fordítónak ki kell töltenie az utasításokat egy feltételes elágazást (az úgynevezett elágazás késleltetési rést ) követve valamivel, amelyet "biztonságos" -nak választanak (azaz nem függenek a feltételes eredményétől). Néha az egyetlen megfelelő utasítás ebben az esetben az NOP . Jelentős számú későbbi RISC-stílusú terv még mindig megköveteli az elágazás késleltetését.

Egy hónapos validálás és hibakeresés után a tervet 1981 június 22-én elküldtük az innovatív MOSIS szolgáltatásnak, 2 μm (2000 nm) eljárással. A különféle késések négy alkalommal kényszerítették őket arra, hogy felhagyjanak maszkjaikkal, és működő példákkal ellátott ostyák csak 1982 májusában érkeztek vissza Berkeley-be. Az első működő RISC I "számítógép" (valójában pénztár) június 11-én futott. , a chipek a vártnál alacsonyabb teljesítménynek bizonyultak. Általában egy utasítás végrehajtása 2 μs-ig tart, míg az eredeti terv kb .4 µs-re (ötször olyan gyorsra) fordult. A probléma pontos okait soha nem sikerült teljes körűen megmagyarázni. A tesztelés során azonban egyértelmű volt, hogy bizonyos utasítások a várt sebességgel futnak, ami arra utal, hogy a probléma fizikai, és nem logikus.

Ha a tervezés teljes sebességgel működött volna, a teljesítmény kiváló lett volna. A különféle kicsi programok segítségével végzett szimulációk összehasonlították a 4 MHz-es RISC I-t az 5 MHz - es 32 bites VAX 11/780 - zal, és az 5 MHz - es 16 bites Zilog Z8000 ezt egyértelműen megmutatta. Program mérete kb 30% -kal nagyobb, mint a VAX de nagyon közel áll a Z8000, érvényesítése az az érv, hogy a magasabb kódot sűrűsége a CISC tervek ténylegesen nem volt olyan meggyőző a valóságban. Összességében a RISC I kétszer olyan gyors volt, mint a VAX, és körülbelül négyszerese a Z8000-nek. A programok nagyjából ugyanannyi memória-hozzáférést hajtottak végre, mert a nagy regiszterfájl drámai módon javította az esélyeket, amelyekre a szükséges operandus már chipen volt.

Fontos ezt az előadást kontextusba helyezni. Annak ellenére, hogy a RISC kialakítása lassabban futott, mint a VAX, nem tett különbséget a tervezés fontosságában. A RISC lehetővé tette egy valódi 32 bites processzor gyártását valódi chipkockán, a már régebbi fabetét felhasználásával. A hagyományos minták egyszerűen nem tudták ezt megtenni; a chipfelület ennyi részével a dekóder logikának szentelve az igazi 32 bites kialakítás, mint a Motorola 68020 , újabb gyártmányokat igényelt, mielőtt praktikussá vált. Ugyanazokat a fabrikákat használva a RISC I nagyban felülmúlhatta volna a versenyt.

2015. február 12-én az IEEE emléktáblát helyezett el az UC Berkeley-n a RISC-I hozzájárulásának emlékére. A táblán ez áll:

  • Az UC Berkeley hallgatói 1981-ben megtervezték és megépítették az első VLSI csökkentett utasításkészletű számítógépet. A RISC-I egyszerűsített utasításai csökkentették az utasítások dekódolásához és vezérléséhez szükséges hardvert, ami lehetővé tette a lapos 32 bites címteret, a nagyszámú regiszterkészletet és a vonalakat végrehajtás. A C programokhoz és a Unix operációs rendszerhez jól illeszkedő RISC-I befolyásolta a manapság széles körben alkalmazott utasításkészleteket, beleértve a játékkonzolokhoz, okostelefonokhoz és táblagépekhez is.

RISC II

Míg a RISC I design késésekbe ütközött, a Berkeley-nél végzett munka már az új Blue design felé fordult . A kék munkája lassabban haladt, mint az arany, mind a sürgető igény hiánya miatt, mivel az arany mostanában nagyszerű, mind az osztályok és az erőfeszítéseket végző diákok váltása miatt. Ez a tempó azt is lehetővé tette számukra, hogy több olyan új funkcióval bővüljenek, amelyek végül jelentősen javítják a dizájnt.

A legfontosabb különbség az egyszerűbb gyorsítótár-áramkör volt, amely bitenként egy sort (háromról kettőre) szüntetett meg, és drasztikusan csökkentette a regiszterfájl méretét. A változtatáshoz sokkal szigorúbb busz-időzítésre is szükség volt, de ez alacsony árat fizetett, és az igények kielégítése érdekében a tervezés számos más részét is felgyorsították.

Az új kialakítás miatt óriási megtakarítások voltak. Míg az Gold összesen 78 regisztert tartalmazott 6 ablakban, addig a Blue 138 regisztert tartalmazott 8 ablakba bontva, egyenként 16 regiszterből, további 10 globállal. A regiszterfájl ilyen kiterjesztése növeli annak esélyét, hogy egy adott eljárás az összes helyi tárolóját elférje a regiszterekben, és növelje a fészkelési mélységet. Mindazonáltal a nagyobb regiszterfájl kevesebb tranzisztort igényelt, és a RISC II néven definiált végleges kék kialakítás az összes RISC utasításkészletet csak 39 000 tranzisztorral valósította meg.

A másik jelentős változás egy utasításformátumú bővítőt tartalmazott , amely láthatatlanul „felkonvertálta” a 16 bites utasításokat 32 bites formátumra. Ez lehetővé tette a kisebb utasítások, általában egy vagy anélküli operandusú dolgok NOP tárolását a memóriában, kisebb 16 bites formátumban, és két ilyen utasítást egyetlen gépi szóba csomagolva. Az utasításokat láthatatlanul kibővítenék 32 bites verziókra, még mielőtt elérnék az aritmetikai logikai egységet (ALU), ami azt jelenti, hogy nem szükségesek változtatások az alaplogikában. Ez az egyszerű technika meglepő 30% -os javulást eredményezett a kódsűrűségben, aminek következtében az egyébként azonos program a Blue-on gyorsabban fut, mint az Gold-on, a memória-hozzáférések csökkenése miatt.

A RISC II sokkal sikeresebbnek bizonyult a szilíciumban, és a tesztelés szinte minden miniszámítógépet szinte minden feladaton felülmúlt. Például a teljesítmény a VAX sebességének 85% -ától 256% -ig terjedt a különféle terheléseknél. A RISC II-t a híres Motorola 68000- zel is összehasonlították , amelyet akkor a legjobb kereskedelmi chip-megvalósításnak tekintettek, és 140–420% -kal felülmúlta.

Követések

Az eredeti RISC tervek kidolgozása a RISC II-vel zárult, de a koncepció Berkeley-ben élt. Az alapmagot 1984 -ben használták fel újra a SOAR- ban, alapvetően egy RISC-t alakítottak át a Smalltalk futtatására (ugyanúgy, ahogyan azt a RISC C futására is lehetett hivatkozni ), később pedig a hasonló VLSI-BAM-ban , amely a Prologot futtatta a Smalltalk helyett. További erőfeszítés volt a SPUR , amely egy teljes chipkészlet volt, amely egy teljes 32 bites munkaállomás felépítéséhez szükséges .

A RISC kevésbé híres, de befolyásosabb, mivel a Sun Microsystems kereskedelmi SPARC processzorának alapja . A SPARC volt az, amely először világosan megmutatta a RISC koncepció erejét; amikor az első Sun-4- ben szállítottak, akkor a piacon bármit felülmúltak. Ez azt eredményezte, hogy gyakorlatilag minden Unix- gyártó sietett egy saját RISC-tervezésért, és olyan tervekhez vezetett, mint a DEC Alpha és a PA-RISC , míg a Silicon Graphics (SGI) megvásárolta a MIPS számítógépes rendszereket . 1986-ra a legtöbb nagy chipgyártó követte, és olyan erőfeszítéseken dolgozott, mint a Motorola 88000 , a Fairchild Clipper , az AMD 29000 és a PowerPC . 2015. február 13-án az IEEE emléktáblát helyezett el az Oracle Corporationnél Santa Clarában. Ez olvasható

  • A Sun Microsystems 1987-ben vezette be a Scalable Processor Architecture (SPARC) RISC-t. Az UC Berkeley RISC, valamint a Sun fordító és operációs rendszerek fejlesztéseire építve a SPARC architektúra rendkívül alkalmazkodó volt a fejlődő félvezető-, szoftver-, rendszer-technológiai és felhasználói igényekhez. Az architektúra a legnagyobb teljesítményt nyújtotta, méretezhető munkaállomások és szerverek a mérnöki, üzleti, internetes és felhőalapú számítástechnikai alkalmazásokhoz.

A csökkentett utasításkészlet ötletéhez kifejlesztett technikákat a hagyományos "komplex" x86 architektúra egymást követő erőteljesebb megvalósításában és kiterjesztésében is alkalmazták . A modern mikroprocesszor tranzisztorszámának jelentős részét nagy gyorsítótárak, sok csővezeték- szakasz, szuperskáláris utasításküldés, elágazás-előrejelzés és egyéb modern technikák fordítják, amelyek az utasítás architektúrájától függetlenül alkalmazhatók. A modern x86-os implementáción az utasítások dekódolására szánt szilíciummennyiség arányosan meglehetősen kicsi, ezért a "komplex" és a RISC processzor-implementációk közötti különbség elmosódott.

Lásd még

Hivatkozások

Idézetek

Bibliográfia