stringtranslate.com

Taxonomía de Flynn

La taxonomía de Flynn es una clasificación de arquitecturas de computadoras , propuesta por Michael J. Flynn en 1966 [1] y ampliada en 1972. [2] El sistema de clasificación se ha mantenido 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) multiprocesadoras , ha evolucionado un contexto de multiprogramación como una extensión del sistema de clasificación. El procesamiento vectorial , cubierto por la taxonomía de Duncan , [3] no está en el trabajo de Flynn porque el Cray-1 se lanzó en 1977: el segundo artículo de Flynn se publicó en 1972.

Clasificaciones

Las cuatro clasificaciones iniciales definidas por Flynn se basan en la cantidad de secuencias de instrucciones (o control) y secuencias de datos concurrentes disponibles en la arquitectura. [4] Flynn definió tres subcategorías adicionales de SIMD en 1972. [2]

Flujo único de instrucciones, flujo único de datos (SISD)

Una computadora secuencial que no explota el paralelismo ni en las secuencias de instrucciones ni en las de datos. Una sola unidad de control (UC) obtiene una sola secuencia de instrucciones (IS) de la memoria. Luego, la UC genera señales de control apropiadas para indicarle a un solo elemento de procesamiento (PE) que opere en una sola secuencia 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 mainframe .

Flujo de instrucciones único, flujos de datos múltiples (SIMD)

Una única instrucción se aplica simultáneamente a múltiples flujos de datos diferentes. Las instrucciones se pueden ejecutar de forma secuencial, como por ejemplo mediante segmentación, o en paralelo por múltiples unidades funcionales. El artículo de Flynn de 1972 subdividió el SIMD en tres categorías más: [2]

Procesador de matriz

El término moderno para un procesador de matriz es " instrucción única, múltiples subprocesos " (SIMT). Esta es una clasificación distinta en la taxonomía de Flynn de 1972, como una subcategoría de SIMD. Es identificable por los subelementos paralelos que tienen su propio archivo de registros y memoria independientes (memoria caché y 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 asociativo (ASP) de Aspex Microelectronics [7] se categorizó a sí mismo en su material de marketing como "SIMD masivo y ancho", pero tenía ALU de nivel de bit y predicción de nivel de bit (taxonomía de Flynn: procesamiento asociativo), y cada uno de los 4096 procesadores tenía sus propios registros y memoria (taxonomía de Flynn: procesamiento de matriz). El Linedancer, lanzado en 2010, contenía 4096 ALU SIMD de 2 bits con predicción, cada una con su propia memoria direccionable por contenido , y era capaz de procesar 800 mil millones de instrucciones por segundo. [8] El procesador SIMT de matriz asociativa ASP de Aspex es anterior a NVIDIA por 20 años. [9] [10]

Procesador canalizado

En el momento en que Flynn escribió su artículo de 1972, muchos sistemas utilizaban la memoria principal como recurso desde el cual los pipelines leían y escribían. Cuando el recurso desde el cual todos los "pipelines" leen y escriben es el archivo de registros en lugar de la memoria principal, surgen variantes modernas de SIMD. Algunos ejemplos son 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)

Procesador asociativo

El término moderno para procesador asociativo es SIMD " predicado " (o enmascarado). Algunos ejemplos son AVX-512 .

Algunos diseños modernos ( GPU en particular) toman características de más de una de estas subcategorías: Las GPU de hoy son SIMT pero también son asociativas, es decir, cada elemento de procesamiento en la matriz SIMT también está predicado.

Múltiples flujos de instrucciones, flujo de datos único (MISD)

Varias instrucciones operan en un flujo de datos. Se trata de una arquitectura poco común que se utiliza generalmente para la tolerancia a fallos. Los sistemas heterogéneos operan en el mismo flujo de datos y deben coincidir en el resultado. Algunos ejemplos incluyen la computadora de control de vuelo del transbordador espacial . [12]

Múltiples flujos de instrucciones, múltiples flujos de datos (MIMD)

Varios procesadores autónomos ejecutan simultáneamente distintas instrucciones sobre distintos datos. Las arquitecturas MIMD incluyen procesadores superescalares multinúcleo y sistemas distribuidos que utilizan un espacio de memoria compartida o un espacio de memoria distribuida.

Diagrama comparativo de clasificaciones

A continuación se muestran visualmente estas cuatro arquitecturas. Cada unidad de procesamiento (PU) se muestra para una computadora de un solo núcleo o de varios núcleos:

Divisiones adicionales

A partir de 2006 , todas las 10 mejores supercomputadoras y la mayoría de las 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] e incluso a veces se consideran subdivisiones adicionales. [18]

Programa único, múltiples flujos de datos (SPMD)

Múltiples procesadores autónomos que ejecutan simultáneamente el mismo programa (pero en puntos independientes, en lugar de en el mismo orden de pasos que impone SIMD) sobre diferentes datos. También denominado proceso único, múltiples datos [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 que múltiples procesadores cooperan 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 programas, múltiples flujos de datos (MPMD)

Múltiples procesadores autónomos que operan simultáneamente al menos dos programas independientes. En contextos de HPC, estos sistemas suelen elegir un nodo para que sea el "host" ("el modelo de programación host/nodo explícito") o el "administrador" (la estrategia "Administrador/Trabajador"), que ejecuta un programa que distribuye datos a todos los demás nodos, que ejecutan un segundo programa. Estos otros nodos luego devuelven sus resultados directamente al administrador. Un ejemplo de esto sería la consola de juegos Sony PlayStation 3, con su procesador SPU/PPU .

MPMD es común en contextos que no son de HPC. Por ejemplo, el sistema de compilación make puede crear múltiples dependencias en paralelo, utilizando programas dependientes del objetivo además del ejecutable make en sí. MPMD también suele adoptar la forma de pipelines. Un simple comando de shell de Unix como ls | grep "A" | more lanza tres procesos que ejecutan programas separados en paralelo y la salida de uno se utiliza como entrada para el siguiente.

Ambos métodos se diferencian de la programación paralela explícita que se utiliza en HPC en el sentido de 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 segmentación, la cantidad de paralelismo disponible no aumenta con el tamaño del conjunto de datos.

Véase también

Referencias

  1. ^ Flynn, Michael J. (diciembre de 1966). "Sistemas informáticos de muy alta velocidad". Actas del IEEE . 54 (12): 1901–1909. doi :10.1109/PROC.1966.5273.
  2. ^ abc Flynn, Michael J. (septiembre de 1972). "Algunas organizaciones informáticas y su eficacia" (PDF) . IEEE Transactions on Computers . C-21 (9): 948–960. doi :10.1109/TC.1972.5009071. S2CID  18573685.
  3. ^ Duncan, Ralph (febrero de 1990). "A Survey of Parallel Computer Architectures" (PDF) . Computer . 23 (2): 5–16. doi :10.1109/2.44900. S2CID  15036692. Archivado (PDF) desde el original el 2018-07-18 . Consultado el 2018-07-18 .
  4. ^ "Paralelismo a nivel de datos en arquitecturas vectoriales, SIMD y GPU" (PDF) . 12 de noviembre de 2013.
  5. ^ Flynn, Michael J. (septiembre de 1972). "Algunas organizaciones informáticas y su eficacia" (PDF) . IEEE Transactions on Computers . C-21 (9): 948–960. doi :10.1109/TC.1972.5009071.
  6. ^ "Arquitectura informática CUDA de próxima generación de NVIDIA: Fermi" (PDF) . Nvidia .
  7. ^ Lea, RM (1988). "ASP: una microcomputadora paralela rentable". IEEE Micro . 8 (5): 10–29. doi :10.1109/40.87518. S2CID  25901856.
  8. ^ "Linedancer HD – Descripción general". Aspex Semiconductor . Archivado desde el original el 13 de octubre de 2006.
  9. ^ Krikelis, A. (1988). Red neuronal artificial en una arquitectura asociativa masivamente paralela . Conferencia internacional sobre redes neuronales. Dordrecht: Springer . doi :10.1007/978-94-009-0643-3_39. ISBN . 978-94-009-0643-3.
  10. ^ Ódor, Géza; Krikelis, Argy; Vesztergombi, György; Rohrbach, Francois. "Simulación eficaz de Monte Carlo en la arquitectura de procesamiento de cadenas asociativas masivamente paralelas de System-V" (PDF) .
  11. ^ Miyaoka, Y.; Choi, J.; Togawa, N.; Yanagisawa, M.; Ohtsuki, T. (2002). Un algoritmo de generación de unidades de hardware para la síntesis de núcleos de procesador con instrucciones empaquetadas de tipo SIMD . Conferencia de Asia y el Pacífico sobre circuitos y sistemas. págs. 171–176. doi :10.1109/APCCAS.2002.1114930. hdl : 2065/10689 . ISBN . 0-7803-7690-0.
  12. ^ Spector, A.; Gifford, D. (septiembre de 1984). "El sistema informático principal del transbordador espacial". Comunicaciones de la ACM . 27 (9): 872–900. doi : 10.1145/358234.358246 . S2CID  39724471.
  13. ^ "Secuencia de datos múltiples de un solo programa (SPMD)". Llnl.gov. Archivado desde el original el 4 de junio de 2004. Consultado el 9 de diciembre de 2013 .
  14. ^ "Requisitos de programación para compilar, crear y ejecutar trabajos". Guía del usuario de Lightning . Archivado desde el original el 1 de septiembre de 2006.
  15. ^ "Taller virtual del CTC". Web0.tc.cornell.edu . Consultado el 9 de diciembre de 2013 .
  16. ^ "NIST SP2 Primer: Distributed-memory programming" (Introducción al NIST SP2: Programación con memoria distribuida). Math.nist.gov. Archivado desde el original el 13 de diciembre de 2013. Consultado el 9 de diciembre de 2013 .
  17. ^ ab "Comprensión de la gestión de trabajos paralelos y el paso de mensajes en sistemas IBM SP". Archivado desde el original el 3 de febrero de 2007.
  18. ^ "9.2 Estrategias". Programación de memoria distribuida . Archivado desde el original el 10 de septiembre de 2006.
  19. ^ "Programa único, múltiples datos". Nist.gov. 17 de diciembre de 2004. Consultado el 9 de diciembre de 2013 .
  20. ^ Darema, Frederica ; George, David A.; Norton, V. Alan; Pfister, Gregory F. (1988). "Un modelo computacional de un solo programa y múltiples datos para EPEX/FORTRAN". Computación paralela . 7 (1): 11–24. doi :10.1016/0167-8191(88)90094-4.