Procesamiento de flujo


En informática , el procesamiento de flujo (también conocido como procesamiento de flujo de eventos, procesamiento de flujo de datos o procesamiento de flujo distribuido ) es un paradigma de programación que considera los flujos de datos , o secuencias de eventos en el tiempo, como los objetos centrales de entrada y salida de la computación . El procesamiento de flujo abarca la programación de flujo de datos , la programación reactiva y el procesamiento de datos distribuidos . [1] Los sistemas de procesamiento de flujo tienen como objetivo exponer el procesamiento paralelo de flujos de datos y se basan enalgoritmos de transmisión para una implementación eficiente. La pila de software para estos sistemas incluye componentes como modelos de programación y lenguajes de consulta , para expresar el cálculo; sistemas de gestión de corrientes , para distribución y programación ; y componentes de hardware para aceleración, incluidas unidades de punto flotante, unidades de procesamiento de gráficos y matrices de puertas programables en campo . [2]

El paradigma de procesamiento de flujo simplifica el software y el hardware paralelos al restringir el cálculo paralelo que se puede realizar. Dada una secuencia de datos (un flujo ), se aplica una serie de operaciones ( funciones del núcleo ) a cada elemento del flujo. Las funciones del kernel generalmente se canalizan y se intenta la reutilización óptima de la memoria local en el chip para minimizar la pérdida de ancho de banda asociada con la interacción de la memoria externa. La transmisión uniforme , en la que se aplica una función kernel a todos los elementos de la transmisión, es típica. Dado que las abstracciones del núcleo y del flujo exponen dependencias de datos, las herramientas del compilador pueden automatizar y optimizar por completo las tareas de administración en el chip. El hardware de procesamiento de flujo puede usar marcadores, por ejemplo, para iniciar un acceso directo a la memoria (DMA) cuando se conocen las dependencias. La eliminación de la administración manual de DMA reduce la complejidad del software, y la eliminación asociada de E/S en caché de hardware reduce la expansión del área de datos que debe estar involucrada con el servicio por parte de unidades computacionales especializadas, como unidades aritméticas lógicas .

Durante la década de 1980, se exploró el procesamiento de flujo dentro de la programación de flujo de datos . Un ejemplo es el lenguaje SISAL (Streams and Iteration in a Single Assignment Language).

El procesamiento de flujo es esencialmente un compromiso, impulsado por un modelo centrado en datos que funciona muy bien para aplicaciones tradicionales de tipo DSP o GPU (como procesamiento de imágenes, video y señales digitales ), pero menos para el procesamiento de propósito general con acceso a datos más aleatorio ( como bases de datos). Al sacrificar cierta flexibilidad en el modelo, las implicaciones permiten una ejecución más fácil, rápida y eficiente. Según el contexto, el diseño del procesador se puede ajustar para obtener la máxima eficiencia o una compensación por la flexibilidad.

El procesamiento de flujo es especialmente adecuado para aplicaciones que exhiben tres características de aplicación: [ cita requerida ]

Para cada registro, solo podemos leer desde la entrada, realizar operaciones en él y escribir en la salida. Está permitido tener múltiples entradas y múltiples salidas, pero nunca una pieza de memoria que sea legible y escribible.