Lo Stream processing è un paradigma di programmazione parallela di tipo SIMD che permette ad alcune applicazioni di sfruttare semplicemente una forma limitata di elaborazione parallela. Le applicazioni utilizzano delle unità funzionali come FPU o GPU senza doversi preoccupare di gestirne la sincronizzazione o la comunicazione tra le unità funzionali, sgravando il programmatore da uno dei principali problemi della programmazione parallela.

Il paradigma dello stream processing semplifica lo sviluppo dell'hardware e del software limitando le operazioni che possono essere eseguite. Questo paradigma presume di avere i dati di elaborare organizzati in gruppi (stream) e che questi possano essere elaborati applicando ad essi una serie di operazioni. Configurazioni nelle quali una serie di operazioni devono essere applicate a tutti i dati sono comuni. Spesso le operazioni vengono elaborate tramite l'utilizzo di strutture a pipeline al fine di ridurre i tempi di elaborazioni e spesso vengono utilizzate delle cache on-chip al fine di ridurre gli accessi alla memoria centrale. Dato che queste strutture spesso eseguono una serie di operazioni note a priori su estesi insiemi di dati le pipeline e le cache on-chip si possono configurare al fine di ridurre/eliminare le latenze e i blocchi che normalmente si presentano nei microprocessori. Questo permette di realizzare unità con elevate prestazioni ma con delle cache d dimensioni modeste, assegnando la maggior parte dei transistor alle unità di elaborazione, cosa non possibili nei processori tradizionali che dovendo elaborare programmi strutturati in modo arbitrario necessitano di cache di grandi dimensioni e di strutture complesse per seguire il flusso del programma in esecuzione.

Durante gli anni 80 lo stream processing è stato estesamente studiato durante lo sviluppo della programmazione dataflow. Un esempio di questi studi è il linguaggio SISAL (Streams and Iteration in a Single Assignment Language).

Applicazioni

Il paradigma del stream processing parte dal presupposto di avere un elevata mole di dati da elaborare con operazioni regolare e quindi ben si adatta alle applicazioni che normalmente vengono svolte dalle GPU o dai DSP. Applicazioni più generiche o che accedono in modo disorganizzato ai dati (come per esempio i database) mal di adatterebbero a questo paradigma di programmazione. In sostanza viene sacrificata la flessibilità di elaborazione per la velocità dell'eleborazione.

Lo stream processing mostra le migliori prestazioni con applicazioni che mostrano l seguenti caratteristiche:

  • Elevata richiesta computazionale: Le operazioni aritmetico/logiche devono essere preponderanti rispetto alle operazioni di I/O dalla memoria.
  • Parallelismo dei dati: I dati devono poter essere elaborati in parallelo senza aver problemi di sincronizzazione o di dipendenza tra i dati.
  • Località dei dati: Questa è una particolare tipologia di località dei dati, comune nell'elaborazione dei segnali e nella gestione dei file multimediali. Questa località prevede che il dato vengano letti una o due volte durante l'elaborazione, i dati intermedi dipendono direttamente dalle elaborazioni e quindi vengono gestiti e ricavati direttamente dal flusso di elaborazione.

GPU

Le moderne schede grafiche si trovano a dover poter eseguire operazioni aritmetiche su dati generici. Le moderne schede grafiche devono poter eseguire operazioni di vertex, pixel o geometry shader, devono poter elaborare la fisica dei videogiochi e devono poter eseguire alcune operazioni legate alla gestione dell'intelligenza artificiale dei videogiochi. Data la varietà di operazioni da eseguire i produttori hanno deciso di abbandonare la realizzazioni di unità in grado di eseguire una sola tipologia di elaborazione in favore di unità più flessibili, in grado di eseguire operazioni generiche e quindi di poter essere configurate a seconda delle necessita al fine di fornire le prestazioni migliori. I produttori si sono orientati sullo sviluppo di GPU dotate di diversi stream processor che vengono configurati a seconda delle necessità.[1] Una panoramica sull'architettura unificata] Il paradigma dello stream processing ben si adatta allo sviluppo di applicazioni multimediali e alle applicazioni che devono svolgere le schede grafiche. Lo stream processing consente di realizzare con semplicità integrati con migliaia di unità di elaborazione[2] quando microprocessori sviluppati con tecnologia simile sono in grado di contenere meno di dieci unità di elaborazione. La possibilità di programma le GPU ha consentito lo sviluppo anche di applicazioni che utilizzano l'elevata potenza di calcolo delle schede grafiche per eseguire operazioni aritmetiche o logiche non direttamente legate alla gestione di dati multimediali.

Note

Collegamenti esterni