La arquitectura de flujo de datos es una arquitectura informática basada en flujo de datos que contrasta directamente con la arquitectura de von Neumann tradicional o la arquitectura de flujo de control . Las arquitecturas de flujo de datos no tienen contador de programas , en concepto: la capacidad de ejecución 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 el 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] , impulsado por 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 paralela . [ cita requerida ]
Las arquitecturas de flujo de datos sincrónico se ajustan para adaptarse a la carga de trabajo presentada por aplicaciones de rutas 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 los accesos a recursos comunes. [6]
Mientras tanto, existe un choque de terminología, ya que el término flujo de datos se utiliza para un 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 la arquitectura informática 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 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:
- Transmisión eficiente de tokens de datos en un sistema masivamente paralelo.
- Despachar tokens de instrucciones de forma eficiente en un sistema masivamente paralelo.
- Construir una memoria direccionable por contenido (CAM) lo suficientemente grande para contener todas las dependencias de un programa real.
Las instrucciones y sus dependencias de datos resultaron ser demasiado detalladas para distribuirlas de manera eficaz en una red grande. Es decir, el tiempo que tardaban las instrucciones y los resultados etiquetados en viajar a través de una red de conexión grande era mayor que el tiempo necesario para realizar muchos cálculos.
Sin embargo, 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 que las instrucciones se completen en el 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 OOE a una pequeña cantidad de unidades de ejecución (2-6) y limita los tamaños de la ventana de ejecución al rango de 32 a 200 instrucciones, mucho más pequeño de lo previsto para máquinas de flujo de datos completo. [ cita requerida ]
Temas de arquitectura de flujo de datos
Máquinas de flujo de datos estáticos y dinámicos
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 varias 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ámico. 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 binarios de salida. Las instrucciones se organizan de forma secuencial, pero la información de dependencia en sí no se registra en los archivos binarios. Los archivos 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 variables. 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 la CAM de una computadora con flujo de datos dinámico. Cuando todos los operandos etiquetados de una instrucción están disponibles (es decir, la salida de instrucciones anteriores o la entrada del usuario), una unidad de ejecución marca la instrucción como lista para su 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 en particular (identificado por su valor de etiqueta) se marca como lista para su ejecución. De esta manera, 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 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 a la 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 instrucciones a las unidades de ejecución y devuelven los tokens de datos al CAM. A diferencia de la arquitectura de von Neumann convencional , los tokens de datos no se almacenan de forma permanente en la memoria, sino que son mensajes transitorios que solo existen cuando están en tránsito hacia el almacenamiento de instrucciones.
Véase también
- Computación paralela
- SISAL
- Máquina de flujo de datos modular binario (BMDFM)
- Matriz sistólica
- Arquitectura activada por el 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". ACM Computing Surveys . 18 (4): 365–396. doi :10.1145/27633.28055. S2CID 5467025 . Consultado el 5 de marzo de 2019 .
- ^ 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 . Techfocus media.
- ^ "Kinara (anteriormente Deep Vision)". Kinara . 2022 . Consultado el 11 de diciembre de 2022 .
- ^ "Hola". Hola . Consultado el 11 de diciembre de 2022 .
- ^ Lie, Sean (29 de agosto de 2022). Análisis profundo de la arquitectura de Cerebras: primer vistazo al diseño conjunto de hardware y software para el aprendizaje profundo. Cerebras (informe).
- ^ "La familia HX300 de NPU y conmutadores Ethernet programables para el mercado de acceso por fibra". EN-Genius (nota 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