Facilitare la parallelizzazione

Si potrebbe affermare che il mondo delle applicazioni basate sui microprocessori viva oggi una situazione di squilibrio tra hardware e software: mentre da un lato l’impiego di dispositivi multicore è ormai un fatto scontato, dall’altro lato la produzione di codice “parallelo” è tuttora una difficile arte che richiede un forte impegno di tempo e introduce molte possibilità di errore. In attesa che l’industria Ict trovi un modo per risolvere il problema alla radice, una risposta alle esigenze dei programmatori giunge dalla società olandese Vector Fabrics, che ha messo a punto uno strumento per analizzare i programmi sequenziali (scritti per un singolo core di elaborazione) al fine di fornire indicazioni utili alla loro parallelizzazione. Il tool, battezzato vfAnalyst, si propone di facilitare l’esplorazione delle possibili scelte alternative che si presentano al programmatore, con due obiettivi: ridurre i tempi e i costi del lavoro di parallelizzazione; ottenere un codice parallelo più efficiente e più parco nell’uso delle risorse hardware, ad esempio la memoria necessaria per creare i Fifo utilizzati nella comunicazione tra thread diversi. Il tutto anche in riferimento alla parallelizzazione di codice “legacy”, cioè di vecchi programmi su cui il programmatore deve intervenire senza conoscerne i dettagli. Secondo Vector Fabrics, questi risultati non possono essere raggiunti con i normali “profiler”. Un altro aspetto innovativo della proposta consiste nel fatto che lo strumento viene offerti con la formula “software-as-a-service”; il prodotto, in altri termini, è accessibile tramite web e il suo impiego viene pagato sulla base di un abbonamento mensile. Attualmente il tool si rivolge ai programmi scritti in linguaggio Ansi C; sono previste future versioni per C++.

Il problema delle interdipendenze
Lo strumento vfAnalyst si basa su un notevole lavoro teorico volto a comprendere i problemi che rendono difficile la parallelizzazione del codice e a ideare un metodo che consenta di individuarli automaticamente per poi indicarli chiaramente al programmatore. In estrema sintesi, l’ostacolo fondamentale sulla strada della parallelizzazione è costituito dalle interdipendenze tra parti diverse dello stesso programma, in altri termini dal fatto che spesso il lavoro svolto da una certa parte del codice si basa su dati prodotti da un’altra parte del medesimo codice. L’esistenza di una relazione di questo tipo rende impossibile, evidentemente, svolgere in parallelo le due parti del programma, poiché occorre completare una delle due prima di poter passare all’altra. Creare una versione “parallela” di un programma “seriale” richiede quindi la chiara individuazione di tutte le interdipendenze (che spesso non sono affatto evidenti), la rimozione di quelle che sono eliminabili e quindi lo sviluppo di soluzioni che consentano di aggirare – per quanto possibile – le interdipendenze che devono necessariamente rimanere. Queste ultime devono però essere conservate integralmente anche nel codice parallelo, che altrimenti risulterebbe funzionalmente diverso dal codice originale. Lo strumento di Vector Fabrics analizza il codice C per individuare i vari tipi di interdipendenze: non solo quelle riguardanti l’attesa dei risultati di un calcolo, ma anche quelle legate all’uso dei “puntatori”, tipici del linguaggio C, e ai “loop” (anelli di operazioni ripetitive). Per quanto riguarda i puntatori, va sottolineato che queste interdipendenze devono essere analizzate in modo dinamico, ossia nel corso del funzionamento reale del programma; in questo caso, quindi, l’analisi del codice richiede una sorta di collaudo, che deve garantire una totale “copertura” delle possibili condizioni di funzionamento reale. Nel caso dei loop, inoltre, Vector Fabrics ha introdotto il concetto di “dependency distance”, una grandezza vettoriale che misura la distanza tra il momento in cui il programma produce un certo dato e quello in cui dovrà riutilizzarlo. Questi sono soltanto alcuni esempi della teoria che sta alla base del lavoro di analisi svolto da vfAnalyst; per gli approfondimento rimandiamo ai “white paper” preparati dalla società.

La visualizzazione dei risultati dell’analisi
Una volta individuate e classificate in modo automatico le interdipendenze, occorre un sistema per presentarle al programmatore in modo chiaro. A questo scopo Vector Fabrics ha ideato una particolare interfaccia grafica divisa in quattro finestre: profilo monodimensionale, profilo bidimensionale, finestra delle proprietà e finestra delle interdipendenze. Nella finestra del profilo bidimensionale si trova una rappresentazione tridimensionale (una prospettiva) composta di rettangoli che raffigurano i loop e le funzioni; le caratteristiche grafiche di questi elementi consentono di rappresentare visivamente l’annidamento (nesting) degli elementi del programma. Indubbiamente le particolari convenzioni grafiche ideate da Vector Fabrics richiedono una fase di apprendimento, ma il risultato finale – sostiene la società – può aiutare i programmatori a esplorare efficacemente lo spazio delle possibili alternative di parallelizzazione, riducendo sensibilmente i tempi e le possibilità di errore. Lo strumento, inoltre, può produrre rapporti in vari formati per consentire ai programmatori di dimostrare al committente la logica seguita nel lavoro di parallelizzazione.

Software-as-a-service
Come si è detto, vfAnalyst non viene venduto come un normale prodotto software; lo strumento risiede nell’infrastruttura di elaborazione EC2 (Elastic Computer Cloud) di Amazon ed è accessibile solo tramite web. Secondo Vector Fabrics questo sistema garantisce una capacità di elaborazione praticamente illimitata, un’abbondante banda di comunicazione e un’elevata sicurezza dei dati. Il sistema consente inoltre alla società di applicare una tariffazione “a consumo”: attualmente l’abbonamento mensile costa 85 euro. Nel corso del 2010 la società introdurrà anche un secondo strumento denominato vfSoftware, rivolto ai processori multicore basati su architettura x86. Il tool analizzerà l’utilizzazione delle risorse hardware (memoria, banda di I/O, velocità del processore ecc.), presentando le possibili opzioni su una curva costi/benefici. Oltre all’analisi, vfSoftware sarà in grado anche di implementare automaticamente le opzioni prescelte dal programmatore.

LASCIA UN COMMENTO

Inserisci il tuo commento
Inserisci il tuo nome