Vés al contingut

Berkeley RISC

De la Viquipèdia, l'enciclopèdia lliure

El Berkeley RISC és un dels dos projectes de recerca pioners en el disseny de microprocessadors basats en ordinadors amb conjunt d'instruccions reduït (RISC) que s'estan duent a terme en el marc del projecte VLSI de l'Agència de Projectes de Recerca Avançats de Defensa. El RISC va ser dirigit per David Patterson (qui va encunyar el terme RISC) a la Universitat de Califòrnia, Berkeley, entre 1980 i 1984.[1] L'altre projecte va tenir lloc a poca distància, a la Universitat de Stanford, dins del seu esforç MIPS, que va començar el 1981 i va durar fins al 1984.[2]

El projecte de Berkeley va tenir tant d'èxit que es va convertir en el nom de tots els dissenys similars que el van seguir; fins i tot el MIPS es coneixeria com a "processador RISC". El disseny RISC de Berkeley va ser posteriorment comercialitzat per Sun Microsystems com l'arquitectura SPARC i va inspirar l' arquitectura ARM.[3]

El concepte RISC

[modifica]
Yunsup Lee sostenint el prototip de xip RISC V. Al retir d'hivern del Par Lab de la UC Berkeley, gener de 2013.

Tant RISC com MIPS es van desenvolupar a partir de la constatació que la gran majoria de programes només utilitzaven una petita minoria del conjunt d'instruccions disponible d'un processador. En un famós article de 1978, Andrew S. Tanenbaum va demostrar que un programa complex d'alt nivell de 10.000 línies es podia representar mitjançant una arquitectura de conjunt d'instruccions simplificada utilitzant un codi d'operació de longitud fixa de 8 bits.[4] Aquesta va ser aproximadament la mateixa conclusió a la qual va arribar IBM, els estudis de la qual del seu propi codi que s'executava en mainframes com l'IBM 360 només utilitzaven un petit subconjunt de totes les instruccions disponibles. Ambdós estudis suggerien que es podria produir una CPU molt més senzilla que encara executaria la majoria de codi del món real. Una altra troballa, no completament explorada en aquell moment, va ser la nota de Tanenbaum que el 81% de les constants eren 0, 1 o 2.[4]

Aquestes constatacions es produïen a mesura que el mercat dels microprocessadors passava de 8 a 16 bits, amb dissenys de 32 bits a punt d'aparèixer. Aquests dissenys es basaven en l'objectiu de replicar alguns dels ISA existents més respectats del món dels mainframe i els miniordinadors. Per exemple, el National Semiconductor NS32000 va començar com un esforç per produir una implementació d'un sol xip del VAX-11, que tenia un conjunt d'instruccions ric amb una àmplia varietat de modes d'adreçament. El Motorola 68000 tenia una disposició general similar. Per proporcionar aquest conjunt ric d'instruccions, les CPU utilitzaven microcodi per descodificar la instrucció visible per l'usuari en una sèrie d'operacions internes. Aquest microcodi representava potser1⁄4 a1⁄3 del disseny general.

Si, com suggerien aquests altres articles, la majoria d'aquests codis d'operació no s'utilitzarien mai a la pràctica, aleshores s'estava malgastant aquest recurs important. Si simplement es construís el mateix processador sense les instruccions no utilitzades, seria més petit i, per tant, menys costós, mentre que si en comptes d'això s'utilitzessin aquests transistors per millorar el rendiment en lloc de descodificar instruccions que no s'utilitzarien, seria possible un processador més ràpid. El concepte RISC era aprofitar tots dos, produint una CPU que tingués el mateix nivell de complexitat que el 68000, però molt més ràpida.

Per fer això, RISC es va concentrar en afegir molts més registres, petits bits de memòria que contenen valors temporals als quals es pot accedir molt ràpidament. Això contrasta amb la memòria principal normal, a la qual es poden accedir diversos cicles. Si es proporcionen més registres i s'asseguren que els compiladors realment els utilitzin, els programes haurien d'executar-se molt més ràpid. A més, la velocitat del processador estaria més definida per la seva velocitat de rellotge, ja que es dedicaria menys temps a esperar accessos a memòria. Transistor per transistor, un disseny RISC superaria una CPU convencional.

L'inconvenient era que les instruccions que s'eliminaven generalment executaven diverses "subinstruccions". Per exemple, la instrucció ADD d'un disseny tradicional generalment venia en diverses versions, una que sumava els nombres de dos registres i els col·locava en un tercer, una altra que sumava els nombres que es trobaven a la memòria principal i posava el resultat en un registre, etc. Els dissenys RISC, en canvi, només incloïen una única versió de cada instrucció en particular; l'ADD, per exemple, sempre utilitzava registres per a tots els operands. Això va obligar el programador a escriure instruccions addicionals per carregar els valors des de la memòria, si calia, fent que un programa RISC fos "menys dens".

A l'era de la memòria cara, això era una preocupació real, sobretot perquè la memòria també era molt més lenta que la CPU. Com que ADD d'un disseny RISC en realitat requeriria quatre instruccions (dues càrregues, una suma i una desa), la màquina hauria de fer molt més accés a memòria per llegir les instruccions addicionals, cosa que podria alentir-la considerablement. Això es va veure compensat en certa manera pel fet que els nous dissenys utilitzaven el que aleshores era una paraula d'instrucció molt gran de 32 bits, cosa que permetia que petites constants s'incorporessin directament a la instrucció en lloc d'haver-les de carregar per separat. A més, els resultats d'una operació sovint s'utilitzen poc després per una altra, de manera que, en ometre l'escriptura a la memòria i emmagatzemar el resultat en un registre, el programa no acabava sent gaire més gran i, en teoria, podia executar-se molt més ràpid. Per exemple, una cadena d'instruccions que executen una sèrie d'operacions matemàtiques podria requerir només unes poques càrregues de memòria, mentre que la majoria dels nombres que s'utilitzen serien constants a les instruccions o valors intermedis que queden als registres de càlculs anteriors. En cert sentit, en aquesta tècnica alguns registres s'utilitzen per fer ombra a les ubicacions de memòria, de manera que els registres s'utilitzen com a proxies de les ubicacions de memòria fins als seus valors finals després que s'hagi determinat un grup d'instruccions.

Per a l'observador casual, no estava clar que el concepte RISC millorés el rendiment, i fins i tot podria empitjorar-lo. L'única manera d'estar-ne segurs era simulant-ho. Els resultats d'aquestes simulacions van ser clars; prova rere prova, cada simulació va mostrar un enorme benefici general en el rendiment d'aquest disseny.

On els dos projectes, RISC i MIPS, diferien era en el maneig dels registres. MIPS simplement afegia molts registres i deixava que els compiladors (o programadors en llenguatge assemblador) els fessin servir. RISC, en canvi, afegia circuits a la CPU per ajudar el compilador. RISC utilitzava el concepte de finestres de registre, en què tot el "fitxer de registre" es dividia en blocs, permetent al compilador "veure" un bloc per a variables globals i un altre per a variables locals.

La idea era fer que una instrucció particularment comuna, la crida a procediment, fos extremadament fàcil d'implementar. Gairebé tots els llenguatges de programació utilitzen un sistema conegut com a registre d'activació o pila de dades per a cada procediment que conté l'adreça des de la qual es va cridar el procediment, les dades (paràmetres) que s'hi van passar i espai per a qualsevol valor de resultat que s'hagi de retornar. En la gran majoria dels casos, aquests marcs són petits, normalment amb tres o menys entrades i una o cap sortida (i de vegades una entrada es reutilitza com a sortida). En el disseny de Berkeley, doncs, una finestra de registre era un conjunt de diversos registres, suficients perquè tot el marc de la pila de procediments probablement encaixés completament dins de la finestra de registre.

En aquest cas, la crida a un procediment i el retorn des d'aquest és senzill i extremadament ràpid. Es crida una sola instrucció per configurar un nou bloc de registres (una nova finestra de registre) i, a continuació, amb els operands passats al procediment a la "part inferior" de la nova finestra, el programa salta al procediment. En retornar, els resultats es col·loquen a la finestra del mateix extrem i el procediment finalitza. Les finestres de registre estan configurades per superposar-se als extrems, de manera que els resultats de la trucada simplement "apareguin" a la finestra de la persona que truca, sense que calgui copiar dades. Així, la crida a procediment comuna no ha d'interactuar amb la memòria principal, cosa que l'accelera enormement.

Com a inconvenient, aquest enfocament significa que els procediments amb un gran nombre de variables locals són problemàtics, i els que en tenen menys condueixen al malbaratament de registres, un recurs costós. Hi ha un nombre finit de finestres de registre en el disseny, per exemple, vuit, de manera que els procediments només es poden imbricar a un cert nombre de nivells de profunditat abans que el mecanisme de finestres de registre arribi al seu límit; un cop s'arriba a l'última finestra, no es pot configurar cap finestra nova per a una altra crida imbricada. I si els procediments només estan imbricats a uns quants nivells de profunditat, no es podrà accedir mai als registres de les finestres per sobre del nivell d'imbricació de crides més profund, de manera que es malgasten completament. Va ser el treball de Stanford sobre els compiladors el que els va portar a ignorar el concepte de finestra de registre, creient que un compilador eficient podia fer un millor ús dels registres que un sistema fix en maquinari. (El mateix raonament s'aplicaria a un programador intel·ligent en llenguatge assemblador.)[5]

RISC I

[modifica]
Foto del RISC Moro. La major part del xip està ocupada pel fitxer de registre (zona inferior esquerra). La lògica de control només ocupa la petita cantonada superior dreta.

El primer intent d'implementar el concepte RISC es va anomenar originalment Gold. El treball en el disseny va començar el 1980 com a part d'un curs de disseny de VLSI, però el disseny, aleshores complicat, va fer estavellar gairebé totes les eines de disseny existents. L'equip va haver de dedicar quantitats considerables de temps a millorar o reescriure les eines, i fins i tot amb aquestes noves eines va trigar poc menys d'una hora a extreure el disseny en un VAX-11/780.

El disseny final, anomenat RISC I, es va publicar al Simposi Internacional sobre Arquitectura de Computadors (ISCA) de l'Association for Computing Machinery (ACM) el 1981. Tenia 44.500 transistors que implementaven 31 instruccions i un fitxer de registre que contenia 78 registres de 32 bits. Això permetia sis finestres de registre que contenien 14 registres. D'aquests 14 registres, 4 se superposaven a la finestra anterior. El total és llavors: 10 * 6 registres a les finestres + 18 globals = 78 registres en total. La secció de control i descodificació d'instruccions ocupava només el 6% del dau, mentre que el disseny típic de l'època utilitzava al voltant del 50% per a la mateixa funció. El fitxer de registre ocupava la major part d'aquell espai.

El RISC I també presentava una cadena d'instruccions de dues etapes per a una velocitat addicional, però sense la complexa reordenació d'instruccions dels dissenys més moderns. Això fa que les branques condicionals siguin un problema, perquè el compilador ha d'omplir la instrucció que segueix a una branca condicional (l'anomenada ranura de retard de la branca), amb alguna cosa seleccionada per ser "segura" (és a dir, que no depengui del resultat de la condicional). De vegades, l'única instrucció adequada en aquest cas és NOP. Un nombre notable de dissenys posteriors d'estil RISC encara requereixen la consideració del retard de la bifurcació.

Després d'un mes de validació i depuració, el disseny es va enviar al servei innovador MOSIS per a la producció el 22 de juny de 1981, utilitzant un sensor de 2 μm (2.000 procés nm). Diversos retards els van obligar a abandonar les seves màscares quatre vegades diferents, i les oblies amb exemples funcionals no van arribar a Berkeley fins al maig de 1982. El primer "ordinador" RISC I en funcionament (en realitat una placa de verificació) va entrar en funcionament l'11 de juny. En les proves, els xips van demostrar tenir un rendiment inferior a l'esperat. En general, una instrucció trigaria 2 μs a completar-se, mentre que el disseny original assignava uns 0,4 μs (cinc vegades més ràpid). Les raons precises d'aquest problema mai no es van explicar completament. No obstant això, durant les proves va quedar clar que certes instruccions s'executaven a la velocitat esperada, cosa que suggeria que el problema era físic, no lògic.

Si el disseny hagués funcionat a tota velocitat, el rendiment hauria estat excel·lent. Les simulacions utilitzant una varietat de petits programes van comparar els 4 RISC I VAX 11/780 de 32 bits de 5 MHz i el Zilog Z8000 de 16 bits de 5 MHz ho va mostrar clarament. La mida del programa era aproximadament un 30% més gran que la del VAX, però molt propera a la del Z8000, cosa que validava l'argument que la major densitat de codi dels dissenys CISC no era realment tan impressionant. Pel que fa al rendiment general, les simulacions van indicar que un RISC I de velocitat completa hauria estat dues vegades més ràpid que el VAX i aproximadament quatre vegades més ràpid que el Z8000. Els programes van acabar realitzant aproximadament el mateix nombre total d'accessos a memòria perquè el gran fitxer de registre va millorar dràsticament les probabilitats que l'operand necessari ja estigués al xip.

És important contextualitzar aquesta actuació. Tot i que el maquinari RISC I havia funcionat més lentament que el VAX, això no va suposar cap diferència en la importància del disseny. El RISC va permetre la producció d'un veritable processador de 32 bits en un xip real utilitzant el que ja era una fàbrica més antiga. Els dissenys tradicionals simplement no podien fer això; amb tanta superfície del xip dedicada a la lògica del descodificador, un veritable disseny de 32 bits com el Motorola 68020 requeria fàbriques més noves abans de ser pràctic. Utilitzant les mateixes fàbriques, el RISC I podria haver superat àmpliament la competència.

El 12 de febrer de 2015, l'IEEE va instal·lar una placa a la UC Berkeley per commemorar la contribució del RISC-I.[6] La placa diu:

  • Els estudiants de la UC Berkeley van dissenyar i construir el primer ordinador amb conjunt d'instruccions VLSI reduït el 1981. Les instruccions simplificades del RISC-I van reduir el maquinari per a la descodificació i el control d'instruccions, cosa que va permetre un espai d'adreces pla de 32 bits, un gran conjunt de registres i l'execució segmentada. Una bona combinació amb els programes en C i el sistema operatiu Unix, RISC-I va influir en els conjunts d'instruccions àmpliament utilitzats avui dia, inclosos els de consoles de jocs, telèfons intel·ligents i tauletes.

RISC II

[modifica]
Foto de dau RISC II

Mentre que el disseny del RISC I va patir retards, la feina a Berkeley ja s'havia centrat en el nou disseny Blue. El treball sobre Blue va progressar més lentament que sobre Gold, tant per la manca d'una necessitat urgent ara que Gold s'anava a fabricar, com pels canvis a les classes i al personal d'estudiants que formaven part de l'esforç. Aquest ritme també els va permetre afegir diverses funcions noves que acabarien millorant considerablement el disseny.

La diferència clau era un circuit de memòria cau més simple que eliminava una línia per bit (de tres a dues), reduint dràsticament la mida del fitxer de registre. El canvi també requeria una programació d'autobús molt més ajustada, però era un preu petit a pagar i, per tal de satisfer les necessitats, també es van accelerar diverses altres parts del disseny.

L'estalvi degut al nou disseny va ser enorme. Mentre que Gold contenia un total de 78 registres en 6 finestres, Blue contenia 138 registres dividits en 8 finestres de 16 registres cadascuna, amb 10 globals més. Aquesta expansió del fitxer de registre augmenta la possibilitat que un procediment determinat pugui encabir tot el seu emmagatzematge local en registres i augmentar la profunditat d'imbricació. No obstant això, el fitxer de registre més gran requeria menys transistors, i el disseny final de Blue, fabricat com a RISC II, implementava tot el conjunt d'instruccions RISC amb només 40.760 transistors.[7]

'altre canvi important va ser incloure un expansor de format d'instruccions, que "convertia ascendent" invisiblement instruccions de 16 bits a un format de 32 bits. Això permetia que les instruccions més petites, normalment coses amb un o cap operand, com ara NOP, s'emmagatzemessin a la memòria en un format més petit de 16 bits, i que dues d'aquestes instruccions s'empaquetassin en una sola paraula màquina. Les instruccions s'expandirien invisiblement a versions de 32 bits abans d'arribar a la unitat aritmètica i lògica (ALU), cosa que significa que no calia fer canvis a la lògica principal. Aquesta senzilla tècnica va produir una sorprenent millora del 30% en la densitat del codi, fent que un programa que d'altra banda seria idèntic en Blue s'executés més ràpid que en Gold a causa de la disminució del nombre d'accessos a memòria.

El RISC II va demostrar tenir molt més èxit en silici i, en proves, va superar gairebé tots els miniordinadors en gairebé totes les tasques. Per exemple, el rendiment va variar del 85% de la velocitat VAX al 256% en diverses càrregues. El RISC II també es va comparar amb el famós Motorola 68000, considerat aleshores la millor implementació de xip comercial, i el va superar en un 140% a un 420%.

Seguiments

[modifica]

El treball en els dissenys originals del RISC va acabar amb el RISC II, però el concepte va perviure a Berkeley. El nucli bàsic es va reutilitzar a SOAR el 1984, bàsicament un RISC convertit per executar Smalltalk (de la mateixa manera que es podria dir que RISC executava C), i més tard al VLSI-BAM similar que executava Prolog en lloc de Smalltalk. Un altre esforç va ser SPUR, que era un conjunt complet de xips necessaris per construir una estació de treball completa de 32 bits.

El concepte RISC, tal com es va desenvolupar en els projectes Berkeley RISC, Stanford MIPS i IBM 801, va influir en diversos ISA comercials a mitjans de la dècada de 1980. Acorn Computers, en col·laboració amb el soci de silici VLSI Technology, va desenvolupar l'arquitectura ARM, enviant ARM Evaluation Systems amb els seus xips ARM de segona generació a partir del juliol de 1986, i una gamma d'ordinadors d'escriptori, amb la marca Acorn Archimedes, anunciats com a capaços de 4 MIPS, a partir del 6 de juny de 1987. Hewlett Packard va introduir el seu propi PA-RISC ISA, també el 1986, en nous models de les seves sèries HP 3000 i HP 9000. Sun Microsystems, en col·laboració amb el soci de silici Fujitsu, va enviar el seu propi SPARC ISA, a partir del 8 de juliol de 1987, al seu Sun 4/260, una màquina anunciada que oferia 10 MIPS. MIPS Computer Systems, fundada el 1984 per comercialitzar el treball del projecte Stanford MIPS, va desenvolupar l'arquitectura MIPS i els processadors MIPS començant per l'R2000; Silicon Graphics (SGI) va substituir els processadors de la sèrie Motorola 68000 a les seves estacions de treball per processadors MIPS, i finalment va comprar MIPS, i Digital Equipment Corporation va utilitzar processadors MIPS a les seves estacions de treball DECstation. IBM va desenvolupar el processador ROMP RISC, utilitzat a l'IBM RT PC, i l'arquitectura POWER, utilitzada a la sèrie RS/6000. A finals de la dècada de 1980, la majoria dels grans proveïdors de xips van seguir el mateix camí, treballant en projectes com el Motorola 88000, el Fairchild Clipper i l'AMD 29000. El rendiment i l'eficiència dels sistemes van superar la generació anterior de CPU CISC.

A principis dels anys noranta, Apple, IBM i Motorola van formar l'aliança AIM, que va desenvolupar l'arquitectura PowerPC, basada en l'arquitectura POWER d'IBM, amb processadors PowerPC venuts tant per IBM com per Motorola, i utilitzats per Apple per substituir els processadors Motorola de la sèrie 68000 als seus ordinadors Macintosh. Digital Equipment Corporation (DEC) tenia diversos projectes RISC en desenvolupament des de principis dels anys vuitanta, i finalment es va decidir pel DEC PRISM, però aquest projecte es va cancel·lar; a principis dels anys noranta, un projecte posterior va produir el DEC Alpha.

El 13 de febrer de 2015, l'IEEE va instal·lar una placa a Oracle Corporation, a Santa Clara.[8] Es llegeix

  • Sun Microsystems va introduir l'arquitectura de processadors escalable (SPARC) RISC el juliol de 1987. Basant-se en els desenvolupaments del sistema operatiu i del compilador RISC de la UC Berkeley i de Sun, l'arquitectura SPARC era altament adaptable a l'evolució de la tecnologia de semiconductors, programari i sistemes, així com a les necessitats dels usuaris. L'arquitectura oferia estacions de treball i servidors escalables amb el màxim rendiment per a usos d'enginyeria, negocis, Internet i computació en núvol.

Les tècniques desenvolupades per i juntament amb la idea del conjunt d'instruccions reduït també s'han adoptat en implementacions i extensions successivament més potents de l'arquitectura x86 "complexa" tradicional. Gran part del nombre de transistors d'un microprocessador modern es dedica a grans memòries cau, moltes etapes de pipeline, enviament d'instruccions superescalar, predicció de ramificacions i altres tècniques modernes que són aplicables independentment de l'arquitectura d'instruccions. La quantitat de silici dedicada a la descodificació d'instruccions en una implementació moderna de x86 és proporcionalment força petita, de manera que la distinció entre implementacions de processadors "complexes" i RISC s'ha tornat borrosa.[9]

Referències

[modifica]
  1. ↑ Reilly, Edwin D. Milestones in Computer Science and Information Technology (en anglès). Bloomsbury Academic, 2003, p. 50. ISBN 1-57356-521-0.
  2. ↑ «UCB-BAR: RISC-V Instruction Set Architecture» (en anglès). [Consulta: 1r agost 2026].
  3. ↑ «Understanding ARM Architectures». Informit, 23-08-2010.
  4. 1 2 Tanenbaum, Andrew Communications of the ACM, 21, 3-1978, p. 237–246. DOI: 10.1145/359361.359454 [Consulta: free].
  5. ↑ «Client Challenge» (en anglès). [Consulta: 1r agost 2026].
  6. ↑ «memorabilia [RISC-I Reunion]» (en anglès). risc.berkeley.edu. [Consulta: 19 març 2020].
  7. ↑ «Berkeley Hardware Prototypes» (en anglès). people.eecs.berkeley.edu. [Consulta: 6 novembre 2021].
  8. ↑ Gee, Kelvin. «Oracle to Receive IEEE Milestone Award for SPARC RISC Architecture» (en anglès). blogs.oracle.com. [Consulta: 19 març 2020].
  9. ↑ «The Berkeley RISC model» (en anglès). [Consulta: 1r agost 2026].