La taxonomía de Flynn es una clasificación de arquitecturas informáticas , propuesta por Michael J. Flynn en 1966 [1] y ampliada en 1972. [2] El sistema de clasificación se ha estancado y se ha utilizado como herramienta en el diseño de procesadores modernos y sus funcionalidades. Desde el surgimiento de las unidades centrales de procesamiento (CPU) multiprocesamiento , ha evolucionado un contexto de multiprogramación como una extensión del sistema de clasificación. El procesamiento de vectores , cubierto por la taxonomía de Duncan , [3] falta en el trabajo de Flynn porque el Cray-1 fue lanzado en 1977: el segundo artículo de Flynn se publicó en 1972.
Las cuatro clasificaciones iniciales definidas por Flynn se basan en el número de flujos de instrucciones (o control) y flujos de datos concurrentes disponibles en la arquitectura. [4] Flynn definió tres subcategorías adicionales de SIMD en 1972. [2]
Una computadora secuencial que no explota ningún paralelismo ni en las instrucciones ni en los flujos de datos. La unidad de control única (CU) recupera un único flujo de instrucciones (IS) de la memoria. La CU genera entonces señales de control apropiadas para dirigir un único elemento de procesamiento (PE) para que funcione en un único flujo de datos (DS), es decir, una operación a la vez.
Ejemplos de arquitecturas SISD son las máquinas monoprocesador tradicionales , como las computadoras personales (PC) más antiguas (en 2010, muchas PC tenían múltiples núcleos) y las computadoras centrales .
Una única instrucción se aplica simultáneamente a múltiples flujos de datos diferentes. Las instrucciones se pueden ejecutar de forma secuencial, como mediante canalización, o en paralelo mediante múltiples unidades funcionales. El artículo de Flynn de 1972 subdividió SIMD en tres categorías más: [2]
El término moderno para un procesador de matriz es " instrucción única, subprocesos múltiples " (SIMT). Esta es una clasificación distinta en la taxonomía de Flynn de 1972, como una subcategoría de SIMD. Es identificable porque los subelementos paralelos tienen su propio archivo de registro independiente y memoria (caché y memoria de datos). Los artículos originales de Flynn citan dos ejemplos históricos de procesadores SIMT: SOLOMON e ILLIAC IV .
Nvidia utiliza comúnmente el término en sus materiales de marketing y documentos técnicos, donde defiende la novedad de su arquitectura. [6] SOLOMON es anterior a Nvidia en más de 60 años.
El procesador de cadenas asociativas (ASP) de Aspex Microelectronics [7] se categorizó a sí mismo en su material de marketing como "SIMD masivo y ancho", pero tenía ALU a nivel de bits y predicción a nivel de bits (taxonomía de Flynn: procesamiento asociativo), y cada uno de los procesadores 4096 tenía sus propios registros y memoria (taxonomía de Flynn: procesamiento de matrices). El Linedancer, lanzado en 2010, contenía 4096 SIMD ALU de 2 bits, cada una con su propia memoria direccionable por contenido , y era capaz de realizar 800 mil millones de instrucciones por segundo. [8] El procesador SIMT de matriz asociativa ASP de Aspex es anterior a NVIDIA en 20 años. [9] [10]
En el momento en que Flynn escribió su artículo de 1972, muchos sistemas utilizaban la memoria principal como recurso desde el cual las tuberías leían y escribían. Cuando el recurso desde el que leen y escriben todas las "canalizaciones" es el archivo de registro en lugar de la memoria principal, surgen variantes modernas de SIMD. Los ejemplos incluyen Altivec , NEON y AVX .
Un nombre alternativo para este tipo de SIMD basado en registros es "SIMD empaquetado" [11] y otro es SIMD dentro de un registro (SWAR) . Cuando se aplica la predicación, se convierte en procesamiento asociativo (abajo)
El término moderno para procesador asociativo es SIMD " predicado " (o enmascarado). Los ejemplos incluyen AVX-512 .
Algunos diseños modernos ( GPU en particular) adoptan características de más de una de estas subcategorías: las GPU actuales son SIMT pero también son asociativas, es decir, cada elemento de procesamiento en la matriz SIMT también está predicado.
Varias instrucciones operan en un flujo de datos. Esta es una arquitectura poco común que generalmente se usa para tolerancia a fallas. Los sistemas heterogéneos operan con el mismo flujo de datos y deben ponerse de acuerdo sobre el resultado. Los ejemplos incluyen la computadora de control de vuelo del transbordador espacial . [12]
Múltiples procesadores autónomos ejecutan simultáneamente diferentes instrucciones sobre diferentes datos. Las arquitecturas MIMD incluyen procesadores superescalares de múltiples núcleos y sistemas distribuidos , que utilizan un espacio de memoria compartida o un espacio de memoria distribuida.
Estas cuatro arquitecturas se muestran a continuación visualmente. Cada unidad de procesamiento (PU) se muestra para una computadora uni-core o multi-core:
A partir de 2006 [update], todos los 10 mejores superordenadores y la mayoría de los TOP500 se basan en una arquitectura MIMD.
Aunque estos no son parte del trabajo de Flynn, algunos dividen aún más la categoría MIMD en las dos categorías siguientes, [13] [14] [15] [16] [17] y, a veces, se consideran incluso más subdivisiones. [18]
Múltiples procesadores autónomos ejecutan simultáneamente el mismo programa (pero en puntos independientes, en lugar de en el mismo paso que impone SIMD) sobre diferentes datos. También denominado proceso único, datos múltiples [17] : el uso de esta terminología para SPMD es técnicamente incorrecto, ya que SPMD es un modelo de ejecución paralela y supone múltiples procesadores cooperantes ejecutando un programa. SPMD es el estilo más común de programación paralela explícita. [19] El modelo SPMD y el término fueron propuestos por Frederica Darema del equipo RP3. [20]
Múltiples procesadores autónomos operando simultáneamente al menos dos programas independientes. En contextos de HPC, estos sistemas a menudo eligen un nodo como "host" ("el modelo de programación explícito de host/nodo") o "administrador" (la estrategia "Administrador/Trabajador"), que ejecuta un programa que distribuye datos para todos los demás nodos que ejecutan un segundo programa. Luego, esos otros nodos devuelven sus resultados directamente al administrador. Un ejemplo de esto sería la videoconsola Sony PlayStation 3, con su procesador SPU/PPU .
MPMD es común en contextos que no son HPC. Por ejemplo, el sistema make build puede crear múltiples dependencias en paralelo, utilizando programas dependientes del objetivo además del propio make ejecutable. MPMD también suele adoptar la forma de tuberías. Un comando de shell Unix simple como ls | grupo "A" | more lanza tres procesos que ejecutan programas separados en paralelo y la salida de uno se utiliza como entrada para el siguiente.
Ambos se diferencian de la programación paralela explícita utilizada en HPC en que los programas individuales son bloques de construcción genéricos en lugar de implementar parte de un algoritmo paralelo específico. En el enfoque de canalización, la cantidad de paralelismo disponible no aumenta con el tamaño del conjunto de datos.