La arquitectura de flujo de datos es una arquitectura de computadora que contrasta directamente con la arquitectura tradicional de von Neumann o la arquitectura de flujo de control . Las arquitecturas de flujo de datos no tienen contador de programa , en concepto: la ejecución y ejecución de instrucciones se determina únicamente en función de la disponibilidad de argumentos de entrada para las instrucciones, [1] de modo que el orden de ejecución de las instrucciones es impredecible, es decir, el comportamiento no es determinista .
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 red , procesamiento de gráficos , telemetría y, más recientemente, en almacenamiento de datos e inteligencia artificial . [2] [3] También es muy relevante en muchas arquitecturas de software en la actualidad, incluidos los diseños de motores de base de datos y los marcos de computación paralelos . [ cita requerida ]
Las arquitecturas de flujo de datos síncronos se ajustan a la carga de trabajo que presentan 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 administrar tareas complejas como el equilibrio de carga del procesador, la sincronización y el acceso a recursos comunes. [4]
Mientras tanto, hay un choque de terminología, ya que el término flujo de datos se usa para una subárea de programación paralela: para 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 la arquitectura de computadoras en la década de 1970 y principios de la de 1980. Jack Dennis del MIT fue pionero en el campo de las arquitecturas de flujo de datos estáticos, mientras que la arquitectura Manchester Dataflow Machine [5] y MIT Tagged Token fueron proyectos importantes en el flujo de datos dinámico.
Sin embargo, la investigación nunca superó los problemas relacionados con:
- Transmitir tokens de datos de manera eficiente en un sistema masivamente paralelo.
- Despacho eficiente de tokens de instrucciones en un sistema masivamente paralelo.
- Creación de memoria direccionable por contenido (CAM) lo suficientemente grande como para contener todas las dependencias de un programa real.
Las instrucciones y sus dependencias de datos demostraron ser demasiado precisas para distribuirse de manera efectiva en una red grande. Es decir, el tiempo para que las instrucciones y los resultados etiquetados viajen a través de una gran red de conexión fue más largo que el tiempo para hacer 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 de von Neumann, sin embargo, dentro de la ventana, se permite completar las instrucciones en orden de dependencia de 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 de OOE a una pequeña cantidad de unidades de ejecución (2-6) y limita el tamaño de la ventana de ejecución al rango de 32 a 200 instrucciones, mucho más pequeño de lo previsto para las máquinas de flujo de datos completo. .
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áticos. Estas máquinas no permitían que se ejecutaran simultáneamente varias instancias de las mismas rutinas 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. Usan 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 con el fin de organizar mejor las secuencias de instrucciones en los archivos de salida binarios. Las instrucciones se organizan secuencialmente, pero la información de dependencia en sí no se registra en los archivos 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 creando etiquetas únicas para cada dependencia en lugar de usar nombres de variable. Al darle a cada dependencia una etiqueta única, permite que los segmentos de código no dependientes en el binario se ejecuten fuera de orden y en paralelo. El compilador detecta los bucles, las declaraciones de interrupción y varias 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 ser ejecutada 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) al CAM. Las instrucciones que dependen de este dato en particular (identificadas por su valor de etiqueta) se marcan como listas para su ejecución. De esta forma, las instrucciones posteriores se ejecutan en el orden correcto, 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 sus 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 vuelta 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 solo existen cuando están en tránsito hacia el almacenamiento de instrucciones.
Ver también
- Flujo de datos
- Computación paralela
- SISAL
- BMDFM : máquina de flujo de datos modular binaria
- Matriz sistólica
- Arquitectura activada por transporte
- Red en un chip (NoC)
- Sistema en un chip (SoC)
- Computación en memoria
Referencias
- ^ Veen, Arthur H. (diciembre de 1986). "Arquitectura de la máquina de flujo de datos" . Encuestas de computación ACM . 18 (4): 365–396. doi : 10.1145 / 27633.28055 . Consultado el 5 de marzo de 2019 .
- ^ "Visión profunda" . Visión profunda . 2021 . Consultado el 19 de abril de 2021 .
- ^ "Hailo" . Hailo . Consultado el 19 de abril de 2021 .
- ^ "Familia HX300 de NPU y conmutadores Ethernet programables para el mercado de acceso a fibra" . EN-Genius (Comunicado de prensa). 18 de junio de 2008. Archivado desde el original el 22 de julio de 2011.
- ^ Proyecto de investigación de flujo de datos de Manchester, Informes de investigación: resúmenes, septiembre de 1997