Existen varios tipos de arquitectura, aunque no todos se emplean en la actualidad, algunos simplemente fueron propuesto y no se llegaron a plasmar en ningún concepto real, otros en cambio se abandonaron por no obtener lo que se esperaba de ellos o verse superados por otros paradigmas arquitectónicos.
En este artículo vamos a dar un repaso a todos los tipos que emplean las microarquitecturas de CPU y las arquitecturas de GPU actuales, así como algunos otros en desuso. Además, veremos en qué tipo se puede englobar algunos procesadores populares.
Índice de contenidos
Tipos de arquitectura según la densidad de instrucciones
Atendiendo a la densidad y formato de las instrucciones, se pueden destacar los siguientes tipos de arquitectura:
CISC (Complex Instruction Set Computer): se denomina así al tipo de ISA que emplea un conjunto de instrucciones extenso y las instrucciones son complejas, heterogéneas, además de tener gran cantidad de operaciones sobre la memoria o modos de direccionamiento. Esto da como resultado una unidad de procesamiento compleja de desarrollar, con unidades de control complicadas y basadas en microcódigo, pocos bancos de registros de propósito general. Como ventaja tiene un alto nivel de abstracción SW/HW, tiempos de programación bajos, y tamaño de los programas compactos. Ejemplos de este tipo de ISA son la de los IBM z/Architecture, x86, Motorola 68k, etc.
RISC (Reduced Instruction Set Computer): en el lado opuesto de la CISC tenemos a otra de las más extendidas de la actualidad. Se trata de un set de instrucciones homogéneo, con instrucciones más simples, y menor número de ellas. Esto da lugar a un tiempo de desarrollo más bajo, mayores posibilidades de escalar el rendimiento, unidades más eficientes, muchos bancos de propósito general, y pocos modos de direccionamiento. En contra tiene la complejidad mayor del compilador, tamaños de programa mayores, baja abstracción SW/HW, y tiempo de programación superior. Ejemplos de esta arquitectura son los IBM POWER, SPARC, Arm, RISC-V, etc.
Híbridos: actualmente, ni los RISC son tan RISC, ni los CISC son tan CISC, sino que ambos diseños se han fusionado. Por ejemplo, los procesadores de Intel y AMD usan instrucciones tipo CISC, pero éstas son traducidas a microoperaciones más simples y parecidas a un RISC. De hecho, AMD usó su procesador RISC 29k como base, agregando un traductor de instrucciones x86 y obteniendo así el K5. Por otro lado, los RISC «puros», como Arm, también están implementando algunas características de los CISC, como las extensiones numerosas de instrucciones.
ZISC (Zero Instruction Set Computer): esta otra arquitectura no es común y, como su propio nombre indica, no emplea instrucciones (vistas en el sentido clásico). No se han desarrollado arquitecturas de este tipo que hayan resultado exitosas, algún ejemplo del pasado fue el ZISC35 de IBM.
SISC (Specific Instruction Set Computer): se trata de un conjunto o set de instrucciones muy reducido y optimizado para realizar una tarea específica.
VISC (Virtual Instruction Set Computer): es una arquitectura rara, introducida por Soft Machines, y que hace uso de núcleos virtuales sobre el hardware.
DISC (Dynamic Instruction Set Computer): permite modificar el set de instrucciones de forma dinámica, según las necesidades del programa. Por este motivo, se deben implementar en FPGAs reprogramables, y las instrucciones se tratan como módulos.
NISC (No Instruction Set Computer): se emplea para desarrollar dispositivos de alta eficiencia, aceleradores por hardware, etc.
MISC (Minimal Instruction Set Computer): es otro de los tipos de arquitectura, esta vez con un número reducido de instrucciones. A diferencia de otros, en este caso se suele emplear la pila para almacenar operandos, y no los registros, simplificando el diseño. Un ejemplo serían los Transputer de INMOS.
EDGE (Explicit Data Graph Execution): se diseñó con el objetivo de resolver los cuellos de botella y mejorar a los CISC. Contiene gran cantidad de instrucciones individuales en un grupo denominado hyperblock y que se ejecuta en paralelo de forma simple. Se ha empleado para alguna unidad, como los TRIPS.
OISC (One Instruction Set Computer ) o URISC (Ultimate RISC): solo emplea una instrucción, sin que ello limite la cantidad de software que puede ejecutar. Suele usarse como modelo para la enseñanza, pero no se conoce ninguna implementación actual.
VLIW (Very Long Instruction Word): aunque muchos autores lo ven fuera de este grupo de arquitecturas, a mi me gusta englobarlo aquí. Se trata de una arquitectura ideada para conseguir mayor paralelismo a nivel de instrucción, todo gracias a unas instrucciones muy largas, pero escasas en cuanto a su número. Esto permite simplificar el hardware, aunque se complica del lado del software, con un compilador complejo. Un ejemplo práctico de esta arquitectura fueron los Crusoe y Efficeon de Transmeta, compañía en la que trabajó un joven Linus Torvalds recién llegado a Silicon Valley, y cuyo objetivo era crear Code Morphing, un software ejecutado en segundo plano que traducía las instrucciones x86 a VLIW para hacer que este procesador fuese compatible con los de Intel y AMD.
Tipos de arquitectura según la fisionomía
En cambio, si en vez de atender a las instrucciones nos fijamos en la propia arquitectura, las partes y la memoria, se puede diferenciar entre estos otros tipos de arquitectura:
Von Neumann: esta arquitectura se compone de una CPU, con banco de registros, ALU, unidad de control, y registro PC (Program Counter). Además, también tiene sistema de E/S y memoria para datos e instrucciones unificada. CPU, E/S y memoria se conectan entre sí mediante el bus del sistema, compuesto a su vez de un bus de control, un bus de direcciones y un bus de datos/instrucciones.
Harvard: es más compleja y moderna. En este caso el bus del sistema se descompone en bus de control, bus de direcciones, bus de datos, y bus de instrucciones. Es decir, se separan datos e instrucciones. También tenemos otros elementos como la CPU y E/S, mientras que la memoria en este caso también está dividida, una para datos y otra para instrucciones exclusivamente.
Harvard Modificada: se basa en la anterior, pero no es tan estricta en la separación de datos e instrucciones de la memoria. En ella están basadas muchas de las actuales CPUs, como Arm, PowerPC, etc.
Dataflow: en este caso no se cuenta con un registro PC, para ejecución secuencial, sino que se ejecutan en función de la disponibilidad de los operandos de las instrucciones entrantes. No hay implementaciones demasiado conocidas de este tipo, pero sí que algunas de las actuales combinan algunas ideas de ésta con las anteriores.
Según el tamaño de palabra
En el caso de atender al número de bits con los que una computadora puede lidiar, se puede tener desde algunos diseños de 1-bit, 2-bit, 4-bit, 8-bit, 16-bit, 32-bit, 64-bit, 128-bit, 256-bit, 512-bit, etc. Muchos de los actuales diseños son una combinación de varios. Por ejemplo, los chips AMD64/EM64T tienen retrocompatibilidad, por lo que podrían ejecutar software de 64-bit, de 32-bit, y de 16-bit. Además, cuentan con extensiones de 128-bit, 256-bit, etc.
Esto puede hacer referencia al tamaño de los datos con los que pueden trabajar las unidades funcionales, o también el tamaño de la dirección de memoria, pudiendo direccionar más o menos cantidad de ella. Por ejemplo, con 32-bit se pueden direccionar hasta 232 direcciones de memoria, mientras que con 64-bit se puede acceder a 264 direcciones de memoria diferentes.
Si quieres algunos ejemplos de diferentes tamaños que han surgido a lo largo de la historia, aquí van los más destacados:
1-bit: Motorola MC14500B
4-bit: Intel 4004, HP Saturn,…
8-bit: Zilog Z80, Intel 8008, Atmel AVR, …
16-bit: Intel 8086, DEC PDP-11, Zilog Z8000, …
32-bit: Pentium, Pentium II, Pentium III, Pentium 4, K5, K6, Athlon, Athlon XP, …
64-bit: Athlon64, Phenom, Sempron, Turion64, Ryzen, EPYC, Opteron, o los basados en Arm AArch64, SPARCv9, IBM POWER, MIPS64, etc.
128-bit: algunos procesadores de Intel y AMD incluyen extensiones del set de instrucciones con esta longitud.
256-bit: igual que el anterior. También han existido diseños como el Transmeta Efficeon con esta longitud.
512-bit: similar a los dos casos anteriores. Por ejemplo, las SIMD AVX-512 de Intel, ya que, aunque la unidad es de 64-bit, estas extensiones hacen que algunas de sus unidades funcionales, como las FPUs dedicadas a estas instrucciones largas, puedan trabajar con estos tamaños. Realmente están empleando varios registros enlazados, por lo que trabajan como unidades vectoriales, operando sobre varios datos.
Según el nivel de paralelismo
Por último, otros tipos de arquitecturas en función del nivel de paralelismo pueden ser:
Segmentada: la pipeline de la unidad de procesamiento aumenta el nivel de paralelismo a nivel de instrucción, ya que divide el proceso de ejecución en partes independientes que pueden estar trabajando simultáneamente, sin la necesidad de que una instrucción tenga que haber acabado todas las etapas para comenzar con otra.
Superescalar: se trata de una arquitectura que busca aumentar el paralelismo a nivel de instrucción. Para ello, se multiplican las unidades de ejecución como la ALU, FPU, etc., para poder ejecutar más instrucciones a la par.
Multihilo: tipos de arquitectura en la que se implementan técnicas para permitir más de un hilo o thread, como es el caso del SMT 2-way, 4-way, 8-way, etc. De esta forma, se permite procesar dos hebras simultáneamente. El multihilo puede ser temporal también, lo que quiere decir que no es un multihilo simultáneo, sino que el procesador va cambiando de un hilo a otro para írlos procesando por tiempos.
OoOE (Out of Order Execution): la ejecución fuera de orden es otro tipo de arquitectura o algoritmo (p.e. Tomasulo) para acelerar el procesamiento. En vez de seguir el orden secuencial del programa para la ejecución de instrucciones, se pueden ejecutar de forma desordenada, conforme van llegando los datos. Luego pasan a un buffer para reordenarse y obtener el resultado esperado. Por ejemplo, muchos procesadores antiguos usaban ejecución en orden. Intel también creó un diseño más reciente basado en la ejecución en orden, lo que le permitió simplificar el núcleo. Se trata del Atom, cuyos primeros modelos dieron paso a otros OoOE. Actualmente, la mayoría de procesadores de alto rendimiento son de este tipo.
La mayoría de los microprocesadores modernos emplean una combinación de todos estos tipos de arquitectura o tecnologías. Por ejemplo, un AMD Ryzen es una unidad con SMT, OoOE, superescalar, con pipeline, de 64-bit y con extensiones de 128-bit y 256-bit, con arquitectura híbrida (RISC con traducción de las instrucciones CISC), y que puede trabajar también en modo SIMD, etc.
Taxonomía de Flynn
Dentro de los tipos de arquitectura según el paralelismo también cabe señalar cómo se dividen las arquitecturas de las unidades de procesamiento según la taxonomía de Flynn:
SISD (Single Instruction, Single Data): como su nombre indica, son aquellas arquitecturas que emplean una sola instrucción y un solo dato, sin ningún tipo de paralelismo. Es la más simple de todas, y la de menor rendimiento. En el pasado se utilizó más, ahora no.
SIMD (Single Instruction, Multiple Data): una sola instrucción pero múltiples datos, esta otra arquitectura sí que es popular en procesadores vectoriales, GPUs, y muchas CPUs actuales, etc.
MISD (Multiple Instruction, Single Data): suele ser habitual en algunas unidades Tensor, además de otros procesadores especiales. En este caso se manejan múltiples instrucciones que son aplicadas a un solo dato.
MIMD (Multiple Instruction, Multiple Data): en este caso se tienen múltiples flujos de instrucciones y varios flujos de datos. Es la mayor forma de paralelismo, y por ello es empleada en algunas máquinas del sector HPC. Por ejemplo, el chip chino SW26010 de Sunway, o el IBM Cell, entre otros.
*Nota: podría haber más tipos de arquitectura, pero estos son los más esenciales, y ahora tienes una noción básica de todos ellos. Por ejemplo, además de la taxonomía propuesta por Flynn, también existen otras, aunque menos populares, como las que propuso Tse-yun Feng, en este caso orientada al paralelismo de bits.
Con esto terminamos nuestra guía sobre los tipos de arquitectura de un ordenador o PC. ¿Qué os ha parecido nuestra tutorial? ¿Te ha resultado interesante?