stringtranslate.com

Arquitectura de flujo de datos

La arquitectura de flujo de datos es una arquitectura informática basada en flujo de datos que contrasta directamente la arquitectura tradicional de von Neumann o la arquitectura de flujo de control . En concepto, las arquitecturas de flujo de datos no tienen contador de programas : la ejecutabilidad y ejecución de las instrucciones se determina únicamente en función de la disponibilidad de argumentos de entrada para las instrucciones, [1] por lo que el orden de ejecución de las instrucciones puede ser difícil de predecir.

Aunque ningún hardware informático de propósito general comercialmente exitoso ha utilizado una arquitectura de flujo de datos, se ha implementado con éxito en hardware especializado como en procesamiento de señales digitales , enrutamiento de redes , procesamiento de gráficos , telemetría y, más recientemente, en almacenamiento de datos e inteligencia artificial (como : flujo de datos polimórfico [2] motor de convolución, [3] basado en estructura, [4] programación de flujo de datos [5] ). También es muy relevante en muchas arquitecturas de software actuales, incluidos los diseños de motores de bases de datos y los marcos de computación paralelos . [ cita necesaria ]

Las arquitecturas de flujo de datos síncrono se ajustan para adaptarse a la carga de trabajo presentada por las aplicaciones de ruta de datos en tiempo real, como el reenvío de paquetes a velocidad de cable. Las arquitecturas de flujo de datos que son de naturaleza determinista permiten a los programadores gestionar tareas complejas como el equilibrio de carga del procesador , la sincronización y el acceso a recursos comunes. [6]

Mientras tanto, hay un choque de terminología, ya que el término flujo de datos se utiliza para una subárea de la programación paralela: la programación de flujo de datos .

Historia

Las arquitecturas de hardware para el flujo de datos fueron un tema importante en la investigación de arquitectura de computadoras en los años 1970 y principios de los 1980. Jack Dennis del MIT fue pionero en el campo de las arquitecturas de flujo de datos estáticos, mientras que Manchester Dataflow Machine [7] y la arquitectura MIT Tagged Token fueron proyectos importantes en el flujo de datos dinámico.

La investigación, sin embargo, nunca superó los problemas relacionados con:

Las instrucciones y sus dependencias de datos demostraron ser demasiado detalladas para distribuirse eficazmente en una red grande. Es decir, el tiempo necesario para que las instrucciones y los resultados etiquetados viajaran a través de una gran red de conexión fue mayor que el tiempo necesario para realizar muchos cálculos.

No obstante, la ejecución fuera de orden (OOE) se ha convertido en el paradigma informático dominante desde la década de 1990. Es una forma de flujo de datos restringido. Este paradigma introdujo la idea de una ventana de ejecución . La ventana de ejecución sigue el orden secuencial de la arquitectura von Neumann; sin embargo, dentro de la ventana, las instrucciones pueden completarse en orden de dependencia de los datos. Esto se logra en CPU que etiquetan dinámicamente las dependencias de datos del código en la ventana de ejecución. La complejidad lógica de realizar un seguimiento dinámico de las dependencias de datos restringe las CPU OOE a una pequeña cantidad de unidades de ejecución (2-6) y limita los tamaños de las ventanas de ejecución al rango de 32 a 200 instrucciones, mucho más pequeñas de lo previsto para máquinas de flujo de datos completo. . [ cita necesaria ]

Temas de arquitectura de flujo de datos

Máquinas de flujo de datos estáticas y dinámicas.

Los diseños que utilizan direcciones de memoria convencionales como etiquetas de dependencia de datos se denominan máquinas de flujo de datos estáticas. Estas máquinas no permitían ejecutar múltiples instancias de las mismas rutinas simultáneamente porque las etiquetas simples no podían diferenciarlas.

Los diseños que utilizan memoria direccionable por contenido (CAM) se denominan máquinas de flujo de datos dinámicos. Utilizan etiquetas en la memoria para facilitar el paralelismo.

Compilador

Normalmente, en la arquitectura de flujo de control, los compiladores analizan el código fuente del programa en busca de dependencias de datos entre instrucciones para organizar mejor las secuencias de instrucciones en los archivos de salida binarios. Las instrucciones están organizadas secuencialmente pero la información de dependencia en sí no se registra en los binarios. Los binarios compilados para una máquina de flujo de datos contienen esta información de dependencia.

Un compilador de flujo de datos registra estas dependencias mediante la creación de etiquetas únicas para cada dependencia en lugar de utilizar nombres de variables. Al darle a cada dependencia una etiqueta única, permite que los segmentos de código no dependientes en el binario se ejecuten desordenados y en paralelo. El compilador detecta los bucles, las declaraciones de interrupción y diversas sintaxis de control de programación para el flujo de datos.

Programas

Los programas se cargan en el CAM de una computadora de flujo de datos dinámico. Cuando todos los operandos etiquetados de una instrucción están disponibles (es decir, la salida de instrucciones anteriores y/o la entrada del usuario), la instrucción se marca como lista para su ejecución por una unidad de ejecución .

Esto se conoce como activar o disparar la instrucción. Una vez que una unidad de ejecución completa una instrucción, sus datos de salida se envían (con su etiqueta) a la CAM. Cualquier instrucción que dependa de este dato particular (identificado por su valor de etiqueta) se marca como lista para su ejecución. De esta forma, las instrucciones posteriores se ejecutan en el orden adecuado, evitando condiciones de carrera . Este orden puede diferir del orden secuencial previsto por el programador humano, el orden programado.

Instrucciones

Una instrucción, junto con los operandos de datos requeridos, se transmite a una unidad de ejecución como un paquete, también llamado token de instrucción . De manera similar, los datos de salida se transmiten de regreso al CAM como un token de datos . La paquetización de instrucciones y resultados permite la ejecución paralela de instrucciones listas a gran escala.

Las redes de flujo de datos entregan los tokens de instrucción a las unidades de ejecución y devuelven los tokens de datos al CAM. A diferencia de la arquitectura convencional de von Neumann , los tokens de datos no se almacenan permanentemente en la memoria, sino que son mensajes transitorios que sólo existen cuando están en tránsito hacia el almacenamiento de instrucciones.

Ver también

Referencias

  1. ^ Veen, Arthur H. (diciembre de 1986). "Arquitectura de máquina de flujo de datos". Encuestas de Computación ACM . 18 (4): 365–396. doi :10.1145/27633.28055. S2CID  5467025 . Consultado el 5 de marzo de 2019 .
  2. ^ Maxfield, Max (24 de diciembre de 2020). "Saluda a la arquitectura de flujo de datos polimórfico de Deep Vision". Revista de Ingeniería Electrónica . Medios de enfoque tecnológico.
  3. ^ "Kinara (anteriormente Deep Vision)". Kinara . 2022 . Consultado el 11 de diciembre de 2022 .
  4. ^ "Saludo". Hola . Consultado el 11 de diciembre de 2022 .
  5. ^ Mentira, Sean (29 de agosto de 2022). Análisis profundo de Cerebras Architecture: primer vistazo al codiseño de HW/SW para el aprendizaje profundo. Cerebras (Reporte).
  6. ^ "Familia HX300 de NPU y conmutadores Ethernet programables para el mercado de acceso a fibra". ES-Genius (Presione soltar). 18 de junio de 2008. Archivado desde el original el 22 de julio de 2011.
  7. ^ Proyecto de investigación de Manchester Dataflow, informes de investigación: resúmenes, septiembre de 1997