Sistemi e tecnologie per il computing riconfigurabile

EMBEDDED –

Gli sviluppi della tecnologia microelettronica in termini di riprogrammabilità interna dei sistemi e la necessità di un approccio conservativo alla progettazione dei sistemi embedded, hanno portato all’attenzione dei progettisti la tecnologia del computing riconfigurabile.


La progettazione dei sistemi embedded, a differenza di quella basata su architetture di computing di uso generale, è soggetta a innumerevoli vincoli che rendono la piattaforma hardware e software necessaria per l'applicazione finale, strettamente legata all'applicazione stessa. Gli elevati sforzi di progettazione e di ingegnerizzazione si riflettono sui costi dell'applicazione finale e difficilmente tali costi possono essere spalmati su altre applicazioni, ottenendo un vantaggio di scala, in quanto sia l'hardware che il software risultano troppo “application specific”.

La disponibilità di logica programmabile ad elevata densità di integrazione, come le Fpga con densità superiori al miliardo di transitor, ha permesso ai progettisti di sistemi embedded di trasferire in modalità riconfigurabile gran parte delle funzionalità di sistema dedicate e di basare sull'elettronica general purpose, microcontrollori o processori Risc, la funzionalità di sistema non dedicata. Questo approccio alla progettazione embedded, cosiddetto conservativo, ha consentito di mettere in pratica il concetto di riusabilità delle piattaforme di computing embedded, oltre che a livello software, anche a livello hardware. Ovviamente, la soluzione Fpga offre la massima flessibilità in termini di riconfigurabilità dell'hardware e quindi dell'applicazione, ma oppone un costo in termini di conoscenze di sistema molto raffinate, spesso molto distanti dalla natura dell'applicazione embedded cui si mira, per esempio conoscenze in merito alle architetture di computing e alla loro realizzazione hardware.
La riconfigurabilità dell'architettura di computing non è comunque basata esclusivamente sulla tecnologia Fpga. In questi ultimi anni sono state messe in campo varie tecnologie di computing riconfigurabile, offrendo in tal modo al progettista di sistemi embedded un ventaglio di opportunità molto ampio, capace di soddisfare al meglio le esigenze di progettazione ai vari livelli di integrazione di sistema.

Tra i vari approcci al computing riconfigurabile, due sono stati considerati particolarmente significativi di attenzione da parte degli sviluppatori di sistemi embedded. Uno è quello che consente al progettista un elevato grado di libertà nel definire, a priori, il modello computazionale del processore che sarà utilizzato nell'applicazione (processori ad architettura riconfigurabile). L'altro è quello che consente di definire l'architettura di computing necessaria all'applicazione, partendo da processori elementari configurabili in schemi computazionali con un elevato grado di libertà (processori ad architettura granulare).
A fronte di queste soluzioni microelettroniche per il computing riconfigurabile sono conseguentemente proposti nuovi modelli di progettazione, in particolare il system-level design e il modello di programmazione system-C.

Implementare solo quello che serve

Da molto tempo la riconfigurabilità dell'hardware dei processori viene studiata e implementata in soluzioni microelettroniche che a volte sono diventate standard industriale, come per esempio le Fpga. Fino a quando le legge di Moore ha garantito uno sviluppo esponenziale della densità di integrazione, queste soluzioni non sono state prese in considerazione, in quanto era più semplice sfruttare la ridondanza delle risorse piuttosto che impegnarsi a cercare soluzioni che al contrario ottimizzassero l'uso delle risorse. Ora, come è ben noto, la legge di Moore non garantisce più questa crescita esponenziale e comunque sta rendendo sempre più evidente che l'incremento di densità di integrazione non porta necessariamente e direttamente all'incremento di potenza di elaborazione.

Nella grande maggioranza delle applicazioni basate su processori standard, una grande quantità di transistor vengono impegnati in funzionalità hardware che di fatto non vengono mai utilizzate. Basti pensare per esempio a quanta funzionalità hardware c'è in un computer desktop che viene scarsamente utilizzata, o addirittura risulta inutilizzata per l'intera vita del sistema stesso. Se questo aspetto è relativamente accettabile per sistemi desktop o laptop, non è invece accettabile per i sistemi palm-top. Con l'ormai consolidata tendenza alla implementazione palmtop, gli aspetti dimensionali e di consumo di potenza rendono sempre più svantaggioso l'utilizzo di hardware non riconfigurabile, volendo mantenere le prestazioni funzionali dei sistemi desktop.
L'idea di base che dà fondamento alla soluzione del computing riconfigurabile è quella di riutilizzare l'hardware di un sistema quando questo non è più utilizzato, consentendo in tal modo di ridurre dimensionalmente il sistema e allo stesso tempo di contenere i consumi di potenza elettrica.

La riconfigurabilità hardware dei sistemi può avvenire a vari livelli di funzionalità temporale del sistema.
Il primo livello è quello che potremmo definire “off-line”, cioè che avviene prima che il dispositivo inizi a funzionare. Si tratta di una riconfigurabilità di sistema a “grana grossa”, in quanto consente di riprogrammare interi sottosistemi hardware. A tale scopo la tecnologia Fpga sembra ormai essere la più efficace, in quanto, date le densità di integrazione attuali, consente di implementare sistemi molto complessi su singolo chip.
Un secondo livello riconfigurabilità è di natura “on-line”, cioè che si attua durante il funzionamento del sistema stesso. In questo secondo caso si distingue tra riconfigurabilità a grana media e riconfigurabilità a grana fine, sia relativamente alla dimensione del sottosistema da riconfigurare, sia relativamente alla scala temporale su cui viene attuata la riconfigurazione. A tale scopo, i processori ad architettura riconfigurabile possono soddisfare questo requisito relativamente alla caratterizzazione a scala a grana media, mentre le architetture di computing configurabili ad elevato livello di parallelismo esecutivo sono la migliore risposta a questa esigenza.

Riconfigurabilità intrinseca dei sistemi basata su Fpga

I dispositivi Fpga consistono fondamentalmente di una grande quantità di unità logiche e di una più o meno ampia memoria di configurazione. Il concetto di programmazione è simile a quello dei processori programmabili tramite il software, ma nel caso delle Fpga il software che risiede nella memoria è sostanzialmente un sistema software di cablaggio e interconnessione di unita hardware elementari, gli elementi logici. Il linguaggio di programmazione dell'hardware (Hdl), di basso (Vhdl, Verilog, ecc.) o di alto livello (System-C, C-to-System, ecc.), consente di interconnettere gli elementi logici in modo da ottenere una specifica funzionalità, per esempio un router, un modem, un encoder, ecc. utilizzando sempre lo stesso dispositivo e tutte le sue risorse (elementi logici e memoria disponibili).
L'utilizzo della tecnologia Fpga per realizzare in maniera ottimale ed economica parti di sistema di media e larga scala di integrazione, evitando di ricorrere alla tecnologia Asic è ormai una conoscenza consolidata da parte degli sviluppatori. Le potenzialità della riprogrammabilità della tecnologia Fpga sono invece meno evidenti allo sviluppatore di applicazioni finali, ma abbastanza evidenti per gli integratori di sistema.

Vari sono ormai i progetti industriali pilota nel campo del computing ad alte prestazioni che stanno sfruttando la peculiarità della programmabilità dell'hardware offerta dalla tecnologia Fpga per ottenere prestazioni di supercomputing a livello embedded. Il computer a elevate prestazioni Cray XD1 utilizza una Fpga (Xilinx Virtex-4) come application processor, sostitutivo di un tradizionale coprocessore (microprocessore) in quanto configurabile e ottimizzabile in funzione dell'algoritmo o processo computazionale da eseguire (per esempio capace di utilizzare dati di formato variabile, di eseguire in pieno parallelismo l'elaborazione, di essere configurato su misura ogni volta che esegue un nuovo processo di elaborazione).
Un altro esempio di utilizzo della Fpga per conseguire allo stesso tempo elevate prestazioni computazionali e flessibilità funzionale, è la nuova architettura di elaborazione ad elevato parallelismo esecutivo Mitrion Virtual Processor, anche in questo caso basato su una Fpga Xilinx Virtex-4. Della Fpga viene fruttata soprattutto la riconfigurabilità per ottenere un fattore di accelerazione computazionale da 10 a 100 volte superiore a quello che potrebbe offrire una equivalente Cpu programmabile via software, utilizzando però una frequenza di clock anche 10 volte inferiore.
Un campo applicativo, più strettamente embedded, ove la riconfigurabilità offerta dalla tecnologia Fpga è quella a preponderante componente di elaborazione di segnale. Le Fpga, grazie alla riconfigurabilità, permettono di eseguire gli algoritmi di elaborazione digitale del segnale, tipicamente caratterizzati da un elevato grado di parallelismo computazionale, con la massima efficienza esecutiva, indipendentemente dalla natura dell'algoritmo correntemente eseguito. A differenza dei processori Dsp, ottimizzati per l'esecuzione efficiente di algoritmi ad elevata regolarità computazionale (per esempio i filtri Fir), le Fpga sono ottimizzati per qualsiasi algoritmo di elaborazione del segnale, anche quelli a scarsa regolarità computazionale (per esempio i filtri IIR).

La riconfigurabilità diventa embedded

La riconfigurabilità del computing viene affrontata anche in maniera nativa a livello di processore. I processori cosiddetti riconfigurabili sono, in un certo senso, la versione integrata di un processore general purpose che utilizza una Fpga configurabile. Il processore riconfigurabile implementa una unità di elaborazione elentare replicata in centinaia o migliaia di esemplari organizzati sotto forma di array configurabili attarverso un sistema simile a quello delle Fpga (memory-based). La differenza sostanziale è che in questo caso le unità elementari da interconnettere nell'appropriato schema hardware non sono elemento logici (come per la Fpga), ma processori elementari.
Un esempio di processore riconfigurabile in forma nativa è il parallel processor array PC 102, capace di 42 GMac/sec. Questa prestazione è garantita dalla disponibilità su chip di 240 processori a 16-bit ad architettura Harvard (3-way LIW).

Un esempio di riconfigurabilità a grana media è il Reconfigurable Computing Fabric di Freescale, un'architettura di calcolo scalabile basata su 16 unità di elaborazione riconfigurabili per sviluppare una potenza computazionale di 24 GMac al secondo.
Il Rcf di Freescale è un System-on-Chip che integra sei moduli Rcf, quindi di fatto è un dispositivo multicore. Ogni modulo Rcf integra un array di 16 celle dotate ciascuna di una Mac (Moltiplicatore-Accumulatore), di un'Alu dati e di un correlatore dedicato. Questo array di celle è riconfigurabile, rendendo il dispositivo adattabile all'applicazione e scalabile.
Un processore Rcf, rispetto ad un processore Dsp, non solo è più veloce nell'esecuzione degli algoritmi di elaborazione del segnale, ma è anche più flessibile in quanto l'architettura di calcolo può essere configurata, via software, sulla base dell'architettura dell'algoritmo di calcolo.

Per esempio, l'implementazione di una Fast Fourier Transform su un Rcf consiste prevalentemente nel mappare l'architettura computazionale dell'algoritmo sull'array di celle che rende disponibile l'Rcf. In tal modo il parallelismo esecutivo dell'Rcf coincide con il parallelismo computazionale della Fft, mentre, come è noto, il parallelismo esecutivo di un Dsp non coincide con il parallelismo computazionale della Fft, con un ovvio calo di efficienza esecutiva a parità di parametri computazionali (velocità di clock, formato dell'aritmetica, risorse di memoria, ecc.).

Pubblica i tuoi commenti