IBM 801
| Desenvolupador | John Cocke i IBM |
|---|---|
| Dissenyador | John Cocke |
| Llançament | 1975 |
| Característiques | |
| CPU | MIPS |
L'IBM 801 va ser un disseny experimental d'unitat central de processament (CPU) desenvolupat per IBM durant la dècada de 1970. Es considera el primer disseny RISC modern, que es basa en registres de processador per a tots els càlculs i elimina els molts modes d'adreçament variants que es troben en els dissenys CISC. Originalment desenvolupat com a processador per a un commutador telefònic, més tard es va utilitzar com a base per a un miniordinador i diversos productes per a la seva línia de mainframes (ordinador central). El disseny inicial era un processador de 24 bits; aviat va ser substituït per implementacions de 32 bits dels mateixos conceptes i el 801 original de 24 bits només es va utilitzar fins a principis dels anys vuitanta.
Durant el disseny inicial, el sistema es va considerar com un processador simple amb funcionalitat limitada que no competiria amb els sistemes més complexos d'IBM com el System/370. Però a mesura que exploraven el concepte utilitzant grans quantitats de dades de rendiment recollides dels seus clients, l'equip va poder demostrar que el disseny simple era capaç de superar fàcilment fins i tot els dissenys de CPU clàssics més potents. L'aplicació d'aquestes mateixes tècniques a màquines existents com l'S/370, és a dir, ignorant els nombrosos codis d'operació complexos a favor de fer tot el que es podia en els registres, també va duplicar el rendiment d'aquests sistemes. La complexitat d'aquests dissenys més antics va conduir a màquines molt més lentes i costoses, cosa que va suposar una gran complexitat implementant codis que era millor no utilitzar. Això va demostrar el valor del concepte RISC, i tots els sistemes futurs d'IBM es van basar en els principis desenvolupats durant el projecte 801.
Pel seu treball en el 801, John Cocke va ser reconegut amb diversos premis i medalles, incloent-hi el Premi Turing el 1987, la Medalla Nacional de Tecnologia el 1991 i la Medalla Nacional de Ciència el 1994.
Història
Concepte original
El 1974, IBM va començar a examinar la possibilitat de construir una central telefònica per gestionar un milió de trucades per hora, o unes 300 trucades per segon. Van calcular que cada trucada requeriria 20.000 instruccions per completar-se, i quan s'hi afegien la sobrecàrrega de temps i altres consideracions, una màquina d'aquest tipus requeria un rendiment d'uns 12 MIPS. Això requeriria un avenç significatiu en el rendiment; la seva màquina actual de gamma alta, l'IBM System/370 Model 168 de finals de 1972, oferia uns 3 MIPS.[1]
El grup que treballa en aquest projecte al Thomas J. Watson Research Center, inclòs John Cocke, va dissenyar un processador per a aquest propòsit. Per assolir el rendiment requerit, van considerar el tipus d'operacions que requeria una màquina d'aquest tipus i van eliminar les que no eren apropiades. Això va portar a l'eliminació d'una unitat de coma flotant, per exemple, que no seria necessària en aquesta aplicació. Més críticament, també van eliminar moltes de les instruccions que treballaven amb dades de la memòria principal i van deixar només les instruccions que treballaven amb els registres interns del processador, ja que eren molt més ràpids d'utilitzar i el codi simple d'una central telefònica es podia escriure per utilitzar només aquest tipus d'instruccions. El resultat d'aquest treball va ser un disseny conceptual per a un processador simplificat amb el rendiment requerit.
El projecte de la commutació telefònica es va cancel·lar el 1975, però l'equip havia fet progressos considerables en el concepte i a l'octubre IBM va decidir continuar-lo com a disseny d'ús general. Sense cap projecte evident al qual vincular-lo, l'equip va decidir anomenar-lo "801" en honor a l'edifici on treballaven. Per al rol d'ús general, en contraposició al sistema telefònic dedicat, l'equip va començar a considerar programes del món real que s'executarien en un miniordinador típic. IBM havia recopilat enormes quantitats de dades estadístiques sobre el rendiment de les càrregues de treball del món real a les seves màquines i aquestes dades demostraven que més de la meitat del temps d'un programa típic es dedicava a executar només cinc instruccions: carregar valor des de la memòria, emmagatzemar valor a la memòria, afegir nombres de coma fixa, comparar nombres de coma fixa i ramificar en funció del resultat d'aquestes comparacions. Això suggeria que el mateix disseny simplificat del processador funcionaria igual de bé per a un miniordinador d'ús general com per a un commutador d'ús especial.
Justificació en contra de l'ús del microcodi
Aquesta conclusió va anar en contra del disseny contemporani de processadors, que es basava en el concepte d'utilitzar microcodi. IBM havia estat una de les primeres empreses a fer un ús generalitzat d'aquesta tècnica com a part de la seva sèrie System/360. Els 360, i més tard els 370, venien en una varietat de nivells de rendiment que executaven el mateix codi de llenguatge màquina. A les màquines de gamma alta, moltes d'aquestes instruccions s'implementaven directament en maquinari, com una unitat de coma flotant, mentre que les màquines de gamma baixa podien simular aquestes instruccions utilitzant una seqüència d'altres instruccions codificades en microcodi. Això va permetre que una sola interfície binària d'aplicació s'executés a tota la línia i va permetre als clients tenir la confiança que si mai es necessitava més rendiment, podrien passar a una màquina més ràpida sense cap altre canvi.[2]
El microcodi permetia que un processador simple oferís moltes instruccions, que havien estat utilitzades pels dissenyadors per implementar una àmplia varietat de modes d'adreçament. Per exemple, una instrucció com ADD pot tenir una dotzena de variacions, una que suma dos nombres en registres interns, una que suma un registre a un valor en memòria, una que suma dos valors de la memòria, etc. Això permetia al programador seleccionar la versió exacta que necessitava per a qualsevol tasca en particular. El processador llegiria aquesta instrucció i utilitzaria microcodi per dividir-la en una sèrie d'instruccions internes. Per exemple, afegir dos nombres a la memòria es podria implementar carregant aquests dos nombres de la memòria en registres, sumant-los i després emmagatzemant la suma de nou a la memòria. La idea d'oferir tots els modes d'adreçament possibles per a totes les instruccions es va convertir en un objectiu dels dissenyadors de processadors, i el concepte es va conèixer com a conjunt d'instruccions ortogonals.
L'equip 801 va notar un efecte secundari d'aquest concepte; quan s'enfrontaven a la gran quantitat de versions possibles d'una instrucció determinada, els autors del compilador normalment triaven una sola versió. Aquesta era normalment la que s'implementava en maquinari a les màquines de gamma baixa. Això assegurava que el codi màquina generat pel compilador s'executés el més ràpid possible en tota la línia. Tot i que l'ús d'altres versions d'instruccions podria funcionar encara més ràpid en una màquina que les implementes en maquinari, la complexitat de saber quina triar en una llista de màquines en constant canvi ho feia extremadament poc atractiu, i els autors del compilador ignoraven en gran manera aquestes possibilitats.
Com a resultat, la majoria de les instruccions disponibles al conjunt d'instruccions mai es van utilitzar en programes compilats. I va ser aquí on l'equip va fer la realització clau del projecte 801:
Imposar microcodi entre un ordinador i els seus usuaris imposa una sobrecàrrega costosa en l'execució de les instruccions executades amb més freqüència.
El microcodi triga un temps diferent de zero a examinar la instrucció abans d'executar-la. El mateix processador subjacent amb el microcodi eliminat eliminaria aquesta sobrecàrrega i executaria aquestes instruccions més ràpidament. Com que el microcodi executava essencialment petites subrutines dedicades a una implementació de maquinari en particular, en última instància realitzava la mateixa tasca bàsica que el compilador, implementant instruccions de nivell superior com una seqüència d'instruccions específiques de la màquina. Simplement eliminant el microcodi i implementant-lo al compilador es podria obtenir una màquina més ràpida.
Una preocupació era que els programes escrits per a una màquina així ocuparien més memòria; algunes tasques que es podien dur a terme amb una sola instrucció al 370 s'haurien d'expressar com a múltiples instruccions al 801. Per exemple, afegir dos nombres de la memòria requeriria dues instruccions de càrrega a registre, una suma de registre a registre i després una emmagatzematge a memòria. Això podria alentir el sistema en general si hagués de dedicar més temps a llegir instruccions de la memòria que abans a descodificar-les. A mesura que continuaven treballant en el disseny i millorant els seus compiladors, van descobrir que la longitud total del programa continuava disminuint, fins a arribar a ser aproximadament la mateixa que la dels escrits per al 370.
Primeres implementacions
L'arquitectura proposada inicialment era una màquina amb setze registres de 24 bits i sense memòria virtual.[3][4] Utilitzava un format de dos operands a la instrucció, de manera que les instruccions eren generalment de la forma A = A + B, en contraposició al format de tres operands, A = B + C La CPU resultant ja estava operativa l'estiu de 1980 i es va implementar mitjançant la tecnologia de components discrets Motorola MECL-10K en plaques personalitzades grans amb cables enrotllats. La CPU tenia una velocitat de 66 ns (aproximadament 15,15 MHz) i podia calcular a una velocitat ràpida d'aproximadament 15 MIPS.
L'arquitectura 801 es va utilitzar en diversos dispositius IBM, incloent-hi controladors de canal per als seus mainframes S/370 (com ara l'IBM 3090),[5]:377diversos dispositius de xarxa i com a unitat d'execució de microcodi vertical als processadors 9373 i 9375 de la família de mainframes IBM 9370.[6] La versió original de l'arquitectura 801 va ser la base de l'arquitectura del microprocessador IBM ROMP[5]:378 utilitzat a l'ordinador de treball IBM RT PC i a diversos ordinadors experimentals d'IBM Research. Un derivat de l'arquitectura 801 amb adreçament de 32 bits anomenat Iliad estava pensat per servir com a processador principal del projecte de sistema de gamma mitjana Fort Knox, que no va tenir èxit.[7]
Modificacions posteriors
Originalment dissenyat per a un sistema de funcions limitades, el disseny 801 mancava d'una sèrie de característiques que es veien en màquines més grans. Entre aquests, destacava la manca de suport de maquinari per a la memòria virtual, que no era necessària per al rol de controlador i que s'havia implementat en programari en els primers sistemes 801 que la necessitaven. Per a un ús més generalitzat, el suport de maquinari era una característica imprescindible. A més, a la dècada del 1980 el món informàtic en general s'estava movent cap als sistemes de 32 bits, i hi havia el desig de fer el mateix amb el 801.
El canvi a un format de 32 bits tenia un altre avantatge significatiu. A la pràctica, es va descobrir que el format de dos operands era difícil d'utilitzar en codi matemàtic típic. Idealment, ambdós operands d'entrada romandrien en registres on es podrien reutilitzar en operacions posteriors. En el format de dos operands, un dels dos valors se sobreescrivia amb el resultat i sovint calia tornar a carregar un dels valors des de la memòria. En passar a un format de 32 bits, els bits addicionals a les paraules d'instrucció permetien especificar un registre addicional, de manera que la sortida d'aquestes operacions es podia dirigir a un registre separat. La paraula d'instrucció més gran també permetia augmentar el nombre de registres de setze a trenta-dos, un canvi que havia estat evident a partir de l'examen del codi 801. Malgrat l'expansió de les paraules d'instrucció de 24 a 32 bits, els programes no van créixer en el 33% corresponent a causa de les càrregues i els estalvis evitats gràcies a aquests dos canvis.
Altres addicions desitjables inclouen instruccions per treballar amb dades de cadena codificades en format "empaquetat" amb diversos caràcters en una sola paraula de memòria, i addicions per treballar amb decimal codificat en binari, inclòs un sumador que podia transportar nombres decimals de quatre bits.
Quan la nova versió del 801 es va executar com a simulador al 370, l'equip es va sorprendre en descobrir que el codi compilat al 801 i executat al simulador sovint s'executava més ràpid que el mateix codi font compilat directament al codi màquina del 370 utilitzant el compilador PL/I del 370. Quan van portar el seu llenguatge experimental "PL.8" de nou al 370 i van compilar aplicacions que l'utilitzaven, aquestes aplicacions van funcionar fins a tres vegades més ràpid que les versions PL/I. Això es devia al fet que el compilador prenia decisions similars a les del RISC sobre com el codi generat utilitzava els registres del processador, optimitzant així tants accessos a memòria com fos possible. Aquests eren tan cars al 370 com al 801, però aquest cost normalment quedava amagat per la simplicitat d'una sola línia de codi CISC. El compilador PL.8 era molt més agressiu a l'hora d'evitar càrregues i desaments, cosa que va resultar en un rendiment més alt fins i tot en un processador CISC.
Els projectes Cheetah, Panther i America
A principis dels anys vuitanta, les lliçons apreses sobre el 801 es van combinar amb les del projecte IBM Advanced Computer Systems, donant lloc a un processador experimental anomenat "Cheetah". Cheetah era un processador superescalar de 2 vies, que va evolucionar a un processador anomenat "Panther" el 1985, i finalment a un disseny superescalar de 4 vies anomenat "America" el 1986.[8] Aquest era un conjunt de processadors de tres xips que incloïa un processador d'instruccions que recupera i descodifica instruccions, un processador de coma fixa que comparteix la tasca amb el processador d'instruccions i un processador de coma flotant per a aquells sistemes que ho requereixen. Dissenyat per l'equip 801, el disseny final es va enviar a l'oficina d'IBM a Austin el 1986, on es va desenvolupar en el sistema IBM RS/6000. L'RS/6000 funcionant a 25 MHz va ser una de les màquines més ràpides de la seva època. Va superar altres màquines RISC de dues a tres vegades en proves comunes, i va superar fàcilment els sistemes CISC més antics.
Després de l'RS/6000, l'empresa va centrar la seva atenció en una versió dels conceptes 801 que es pogués fabricar de manera eficient a diverses escales. El resultat va ser l'arquitectura del conjunt d'instruccions IBM POWER i la derivació del PowerPC.
Reconeixement
Pel seu treball sobre el 801, John Cocke va rebre diversos premis i medalles:
- 1985: Premi Eckert-Mauchly[9]
- 1987: Premi AM Turing[10]
- 1989: Premi Pioner en Informàtica[11]
- 1991: Medalla Nacional de Tecnologia[12]
- 1994: Medalla IEEE John von Neumann[13]
- 1994: Medalla Nacional de la Ciència[12]
- 2000: Medalla Benjamin Franklin (Institut Franklin)[14]
Michael J. Flynn considera el 801 com el primer RISC.[15]
Referències
- ↑ Savard, John. «On the 370/165 and the 360/85» (en anglès). Arxivat de l'original el 2024-05-06. [Consulta: 1r agost 2026].
- ↑ Sack, Harald. «The IBM System/360 and the Use of Microcode» (en anglès). SciHub, 07-04-2016. Arxivat de l'original el 7 de desembre 2023. [Consulta: 1 d’agost 2026].
- ↑ «The 801 Minicomputer - An Overview» (en anglès), 08-10-1976. Arxivat de l'original el March 27, 2020. [Consulta: 16 gener 2019].
- ↑ «System 801 Principles of Operation» (en anglès), 16-01-1976.
- 1 2 Dewar, Robert B.K.. Microprocessors: A Programmer's View (en anglès). McGraw-Hill, 1990.
- ↑ Mitchell, James ACM SIGMICRO Newsletter, 19, 3, 9-1988, p. 3–10. DOI: 10.1145/62185.62186. ISSN: 1050-916X.
- ↑ Frank G. Soltis. Inside the AS/400, Second Edition. Duke Press, 1997. ISBN 978-1882419661.
- ↑ Shen, John Paul. «Survey of Superscalar Processors». A: Modern Processor Design: Fundamentals of Superscalar Processors (en anglès). McGraw-Hill, 2005.
- ↑ «John Cocke» (en anglès). awards.acm.org. [Consulta: 29 agost 2022].
- ↑ «John Cocke - A.M. Turing Award Laureate» (en anglès). amturing.acm.org. [Consulta: 29 agost 2022].
- ↑ «IEEE Computer Society Women of ENIAC Computer Pioneer Award» (en anglès americà), 09-04-2018. [Consulta: 29 agost 2022].
- 1 2 «NSTMF» (en anglès). NSTMF. [Consulta: 12 maig 2020].
- ↑ «IEEE John von Neumann Medal Recipients» (en anglès). Institute of Electrical and Electronics Engineers (IEEE).
- ↑ «John Cocke» (en anglès). The Franklin Institute, 10-01-2014. [Consulta: 29 agost 2022].
- ↑ Flynn, Michael J. Computer architecture: pipelined and parallel processor design (en anglès). Jones & Bartlett Learning, 1995, p. 54–56. ISBN 0867202041.