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.

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.

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. 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),diversos 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. La versió original de l'arquitectura 801 va ser la base de l'arquitectura del microprocessador IBM ROMP 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.

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.