Il giusto compromesso tra parallelismo ed embedding

L'architettura multicore è la naturale evoluzione tecnologica che sta caratterizzando i DSP di ultima generazione. Il parallelismo è intrinseco alla natura dell'elaborazione su cui si fondano la maggior parte degli algoritmi di elaborazione numerica del segnale che devono essere eseguiti dai DSP in contesti applicativi prevalentemente embedded, sia in ambito consumer che in ambito industriale. La soluzione multicore, tra le tante possibili per implementare il parallelismo esecutivo, è la più facilmente ottenibile nell'immediato per soddisfare i requisiti di applicazioni ad alte prestazioni come la telefonia cellulare, le infrastrutture di telecomunicazione wireless e le comunicazioni a larga banda in generale. Tutti i principali produttori di DSP sono ormai impegnati nell'offrire soluzioni DSP multicore che implementano le varie strategie di parallelizzazione dell'esecuzione degli algoritmi DSP per pervenire alla minimizzazione delle problematiche di condivisione delle risorse e alla massimizzazione delle prestazioni tenendo bassa la frequenza di clock e i consumi di potenza elettrica.

Verso il parallelismo system-level
I DSP sono processori che devono eseguire algoritmi di elaborazione numerica dei segnali che implicano un'enorme quantità di operazioni aritmetiche in tempi ridottissimi. Questa natura intensamente computazionale dell'elaborazione numerica del segnale viene ulteriormente complicata dalla specificità delle applicazioni finali verso cui è destinata la tecnologia dell'elaborazione DSP. Le applicazioni finali hanno prevalentemente caratteristiche embedded e, soprattutto nelle applicazioni di ultima generazione, sono a elevato livello di embedding. Il parallelismo è sempre stato l'elemento distintivo dei processori DSP rispetto ai processori tradizionali (non di segnale) e svariati sono stati i tentativi di tradurre questa naturale propensione al parallelismo in soluzioni d'architettura computazionale prima e in soluzioni di integrazione di sistema poi. Le soluzioni proposte per implementare il parallelismo esecutivo dei DSP, mantenendo un soddisfacente livello di embedding, fino ad ora consistevano nell'implementazione di architetture di computing parallelo fondamentalmente di natura monocore. Le soluzioni di natura completamente parallela come gli array processor o parzialmente parallela come i pipeline array processor (processori sistolici) sono state proposte in varie fasi della storia dell'integrazione microelettronica, soprattutto nel momento della maturazione della tecnologia FPGA.
Queste soluzioni hanno consentito di accelerare moltissimo in termini di esecuzione degli algoritmi, consentendo di realizzare soluzioni single chip in applicazioni in banda video e radio.
Un'altra soluzione che ha puntato sul parallelismo esecutivo è stata basata sull'integrazione dell'architettura VLIW (Very Long Instruction Word) su singolo chip.
Questa soluzione, pur essendo apparentemente multiprocessore, di fatto, essendo orientata alla paralleliazzazione del flusso di calcolo degli algoritmi di elaborazione numerica del segnale, rimane fondamentalmente di natura single-core.
Poco hanno contribuito queste soluzioni per aumentare l'accelerazione a livello di sistema, proprio per la natura prevalentemente orientata all'algoritmo e scarsamente orientata al processo. Le applicazioni embedded di ultima generazione si sono connotate per un forte orientamento al trattamento di informazioni di natura multimediale. Ciò ha spinto i produttori di processori, in particolare quelli di processori DSP con una considerevole esperienza nella realizzazione di system-on-chip (SoC), alla realizzazione di soluzioni multicore. I multimedia processor, intesi a supportare soprattutto le esigenze degli sviluppatori che dovevano affrontare la sfida della comunicazione wireless 3G, hanno posto le basi per l'approccio multicore nella realizzazione dei DSP di nuova generazione: un processore RISC che supervisione una serie di DSP specializzati e dedicati a eseguire in maniera efficiente e indipendente algoritmi di elaborazione del segnale mono e bidimensionali ad altissima velocità. L'approccio multicore dei multimedia processor è stata la giusta risposta alla richiesta di maggiore integrazione e potenza di calcolo, così, dopo le prime esperienze di integrazione di un RISC con uno o due DSP, il numero di DSP integrati sullo stesso chip è considerevolmente aumentato.
Con l'aumento del numero dei DSP integrati sullo stesso chip aumentano comunque le problematiche di comunicazione tra RISC e DSP e di intercomunicazione tra i DSP, oltre alla creazione di nuove problematiche di scomposizione degli algoritmi e di sincronizzazione dei sottoprocessi di calcolo.

I vantaggi del multicore
Il vantaggio più ovvio del multicore è quello di offrire maggiore potenza di calcolo a parità di dimensioni occupate dal dispositivo. Il vantaggio meno ovvio, ma sicuramente più importante, è quello del superamento dei limiti intrinseci dell'integrazione.
Per i DSP monocore, l'aumento della velocità di elaborazione viene ottenuta aumentando la velocità del clock e contemporaneamente riducendo la geometria di integrazione. Questa soluzione ha un limite intrinseco nella geometria di integrazione, che come è ormai noto, non può scendere al di sotto dei 20 nanometri. Ciò significa che le velocità di clock non potranno essere portate molto oltre il GHz, come per gli attuali DSP.
Le prestazioni di un DSP monocore da 1 GHz possono essere ottenute da un DSP multicore che opera 500 MHz (dual-core), oppure che opera a 250 MHz (quad-core), ecc. In tal modo non è necessario spingere ai limiti la geometria di integrazione per aumentare la potenza di elaborazione dei DSP, ma è sufficiente aumentare il livello di granularità del multicore fino ad ottenere la potenza computazionale necessaria. Inoltre, mantenendo la stessa geometria d'integrazione del DSP monocore, il DSP multicore può raggiungere frequenze di clock equivalente molto elevate. Per esempio, un DSP quad-core con frequenza di core da 1 GHz ottiene una frequenza complessiva equivalente di 4 GHz. Per ottenere la stessa frequenza di clock, un DSP monocore dovrebbe adottare una geometria di integrazione “impossibile”.
Questo approccio, oltre a semplificare le problematiche di integrazione microelettronica, consente anche di risolvere problematiche importanti come per esempio quella del consumo di potenza elettrica.
Un altro vantaggio della soluzione multicore è quello di poter aumentare la potenza di calcolo senza dover ridefinire l'architettura del DSP, cioè senza dover creare un nuovo DSP. Con la soluzione multicore, per ottenere più potenza di calcolo è sufficiente incrementare il numero di core del DSP.
La redefinizione dell'architettura computazionale di un DSP implica la reimplementazione degli strumenti software di sviluppo e la ricodifica del software applicativo, con le conseguenti conseguenze sul ciclo di vita del software. Anche a livello hardware la ridefinizione dell'architettura computazionale del DSP può avere un impatto disastroso.
Il DSP multicore, indipendentemente dal numero di core di cui può essere dotato, è sempre software e hardware compatibile con le precedenti versioni con meno core.

Lo sviluppo di applicazioni distribuite e parallele

L'uso estensivo della tecnologia multicore ha fatto emergere le relative problematiche di progettazione e sviluppo delle applicazioni che utilizzano questo tipo di soluzione di computing. In particolare è emersa la necessità di disporre di strumenti di sviluppo adeguati a questa nuova architettura di computing per affrontare in maniera ottimale le opportunità offerte dai nuovi DSP multicore. Le piattaforme DSP multicore offrono l'implementazione hardware del modello di computing distribuito e parallelo, ma non il modello software. Il modello software richiede un livello superiore di astrazione che consente di implementare le due forme fondamentali di processing multicore: il processing distribuito e il processing parallelo.
Il processing distribuito è applicabile a problematiche che possono essere scomposte in task eseguibili indipendentemente su più processori, per esempio l'elaborazione dell'informazione multimedia in cui il processing audio può essere eseguito in parallelo rispetto al processing video. Il processing parallelo è applicabile a problemi che possono essere scomposti in task interdipendenti che scambiano dati sincronizzandosi in determinati momenti del ciclo di elaborazione, per esempio l'esecuzione parallela degli algoritmi di elaborazione video e audio.
In applicazioni di una certa complessità il processing distribuito e il processing parallelo possono coesistere e rappresentare la vera natura computazionale dell'applicazione a cui l'architettura multicore si adatta perfettamente.
Recentemente The Mathworks ha introdotto, nell'ambito dell'ambiente di sviluppo Matlab, il Distributed Computing Toolbox per supportare lo sviluppo di applicazioni su piattaforme di computing multicore. Questo toolbox mette a disposizione le funzioni che permettono di scomporre l'applicazione in task eseguibili indipendentemente. Il tool supporta anche una serie di metodi complementari per la prototipazione e lo sviluppo di applicazioni eseguibili in parallelo. Alla base di questa potenzialità di sviluppo resa disponibile dal toolbox vi sono i “for loops” e gli “array distribuiti”, oltre ai costrutti per il passaggio di messaggi. Questi costrutti consentono di implementare i controlli necessari a governare correttamente ed efficientemente il processo di esecuzione parallelo dell'applicazione. L'importanza di un ambiente di sviluppo orientato a supportare lo sviluppo di applicazioni distribuite e parallele è ovvio se si pensa alla complessità della problematica e a come invece questa può essere risolta da strumenti di sviluppo assistiti da calcolatore, come si può osservare in questo semplice esempio di trasformazione di un ciclo sequenziale in ciclo parallelo eseguito dalla funzione “parfor”.

LASCIA UN COMMENTO

Inserisci il tuo commento
Inserisci il tuo nome