I progettisti di data center cercano di ricavare dai loro server sempre più prestazioni. Tipicamente, questi sistemi prevedono lo sviluppo di applicazioni realizzate da progettisti di "estrazione" software, i quali preferiscono ricorrere a piattaforme Cpu e Gpu multicore facili da programmare. Rispetto alle implementazioni totalmente hardware, tali architetture offrono però rapporti prestazioni/watt prossime ai limiti, se non del tutto sfavorevoli. Xilinx cambia le regole del gioco grazie a SDAccel, un ambiente di sviluppo che consente di tradurre e ottimizzare su Fpga il codice degli acceleratori. Il risultato? Consumi contenuti, velocità superiori e tempi di latenza ridotti. Per realizzare le applicazioni per grandi data center, in particolare gli acceleratori per funzioni legate alle ricerche su parole chiave, al riconoscimento di immagini, alla trascrizione vocale, alla crittografia o alla ricerca testuale, vengono tipicamente utilizzati Cpu multicore e acceleratori Gpu. Tali piattaforme sono estremamente generiche e prevedono uno stile di programmazione - legato al mondo software – che porta a configurare progetti con consumi elevati, prestazioni limitate e tempi di latenza inconciliabili con i requisiti dei moderni datacenter. Nonostante siano semplici da programmare e offrano un terreno ideale per i progettisti con scarsa dimestichezza con le problematiche hardware, Cpu e Gpu presentano dei problemi significativi anche in termini di scalabilità e riconfiigurabilità, soprattutto quando gli sviluppatori di server per data center devono utilizzare come acceleratori delle semplici schede PCIe. Benché questi supporti possano essere configurati per fare girare delle schede grafiche ad alta potenza, gli utilizzatori hanno pur sempre l'esigenza di contenere i consumi al di sotto dei 25W per ridurre al minimo l'impronta energetica dell'installazione.
Piattaforme basate su Fpga
Una soluzione a questo problema è il ricorso alle piattaforme basate su Fpga. Rispetto a Cpu e Gpu, gli Fpga offrono un incremento del rapporto prestazioni/potenza, tempi di latenza ridotti e un livello d'integrazione delle funzioni di I/O nettamente superiore. Questi dati sono il frutto di recenti studi condotti congiuntamente da Xilinx e dall'università svizzera ETF Zurich, i quali hanno dimostrato che l'accelerazione basata su Fpga può garantire un livello di prestazioni-per-Watt fino a 25 volte superiore a fronte di una latenze da 50 a 75 volte migliore rispetto alle implementazioni Cpu/Gpu, fornendo inoltre un'eccellente integrazione di I/O (Pci, interfacce Sdram Ddr4, Ethernet ad alta velocità eccetera). In altre parole, gli Fpga possono rappresentare una soluzione single-chip ideale per l'accelerazione delle applicazioni hardware a basso consumo. A tutto questo si aggiungono le caratteristiche di riconfigurabilità in tempo reale tipiche degli Fpga, le quali offrono un'importante opportunità per ridurre ulteriormente il budget energetico e d'ingombro del data center. A tale proposito è interessante segnalare alcuni numeri presentati da Baidu, leader cinese dei servizi web, all'Hot Chips Symposium 2014 tenutosi recentemente a San Jose. Secondo Baidu, gli Fpga mid-range possono raggiungere 375 Gflops e dissipare solo 10-20 W, consentendo così di sviluppare acceleratori più performanti rispetto a Cpu o Gpu e distribuibili in tutti i tipi di server per supportare i sistemi Dnn (Deep neural network) oggi utilizzati per una varietà di applicazioni, tra le quali il riconoscimento vocale, la ricerca di immagini, riconoscimento del volto, le ricerche di pagine web e l'elaborazione del linguaggio naturale.
Ambiente di sviluppo Xilinx SDAccel
Assodati gli innegabili vantaggi a livello puramente hardware offerti dagli Fpga nelle applicazioni di accelerazione rimane il problema più grande: la programmazione. Gli sviluppatori di applicazioni per data center sono normalmente degli ingegneri software che raramente hanno familiarità con i flussi Rtl "hardware-centrici" tipici del percorso Fpga tradizionale. Tutto ciò che questi ingegneri desiderano è un elevato livello di prestazioni/watt, un ambiente di sviluppo completo e software-centrico e un progetto facilmente aggiornabile. Una soluzione capace di conciliare le esigenze dei due mondi viene dal nuovo ambiente di sviluppo SDAccel di Xilinx. SDAccel offre agli sviluppatori di applicazioni per data center una soluzione che consente di fruttare tutta la potenza e le doti di riconfigurabilità degli Fpga ma anche tutte la semplicità di programmazione tipica delle piattaforme Gpu/Cpu standard. L'ambiente include un veloce compilatore di ottimizzazione architetturale che permette di sfruttare nel modo più efficiente possibile le risorse on-chip dell'Fpga. Il tool coniuga un flusso di sviluppo familiare alla maggior parte dei programmatori software con un ambiente integrato Eclipse-based per lo sviluppo, la profilazione e il debugging del codice, mettendo a disposizione un ambiente di lavoro simile a quello delle piattaforme standard. SDAccel permette di definire degli acceleratori riconfigurabili dinamicamente e ottimizzati per diverse applicazioni legate ai data center: tali acceleratori possono essere attivati e disattivati in tempo reale all'interno di un ambiente runtime Cpu/Gpu-like. Le applicazioni possono contare sulla possibilità di creare nell'Fpga più kernel durante la fase di esecuzione senza interrompere l'interfacciamento tra la Cpu del server e l'Fpga stesso, garantendo un supporto di accelerazione applicativo non-stop.
Primo compilatore per C, C ++ e OpenCL architetturalmente ottimizzato
Il compilatore architetturalmente ottimizzato di SDAccel consente agli sviluppatori software di ottimizzare e compilare circuiterie a bassa latenza necessarie per le applicazioni di streaming e datapath. Il compilatore è stato concepito per gli Fpga ad alte prestazioni di Xilinx e supporta codice sorgente in qualsiasi combinazione tra OpenCL, C, C ++ e kernel. Esso garantisce un miglioramento di prestazioni pari a un ordine di grandezza rispetto alle Cpu di fascia alta, a fronte di un decimo dell'energia di una tipica Gpu. L'ambiente mantiene la compatibilità di codice e offre un modello di programmazione software di tipo tradizionale che facilita la migrazione delle applicazioni e riduce i costi. Secondo i parametri di riferimento dei partner Xilinx, il compilatore SDAccel permette di raggiungere livelli di prestazioni e di efficienza tre volte superiori alle soluzioni Fpga concorrenti. I progetti generati automaticamente dal compilatore SDAccel possono inoltre offrire prestazioni superiori rispetto al codice RTL codificato a mano, assicurano in alcuni casi un incremento del 20%. Essendo architetturalmente ottimizzato, il compilatore SDAccel applica automaticamente al codice sorgente una serie di razionalizzazioni di base e avanzate. Alcune di queste ottimizzazioni automatiche migliorano notevolmente l'efficienza globale delle applicazioni. Ad esempio, invece di limitarsi ad agire sulle singole funzioni, il pipelining dell'intero flusso dati attuato dal compilatore SDAccel permette di agire su più funzioni; similmente, l'ottimizzazione delle risorse di memoria permette di migliorare notevolmente l'efficienza operativa, consentendo di integrare più funzioni in un singolo Fpga.
Primo ambiente di sviluppo su Fpga di tipo Cpu/Gpu-Like
È importante ribadire come SDAccel sia il primo ambiente di sviluppo software per piattaforme Fpga che consente di programmare in modo simile a quello utilizzato per Cpu/Gpu. Grazie a questo approccio, gli sviluppatori con poca o nessuna esperienza in tema di Fpga hanno l'opportunità utilizzare un flusso di lavoro familiare per ottimizzare le loro applicazioni e parallelamente di sfruttare una piattaforma hardware totalmente programmabile. L'Ide del sistema offre dei template di codifica e una serie di librerie software precostituite che consentendo la compilazione, il debug, il profiling e l'emulazione Fpga su piattaforme x86. Quando il codice è pronto per la distribuzione, il sistema implementa l'algoritmo su delle opportune piattaforme Cots Fpga per data-center provvedendo anche all'inserimento automatico degli strumenti di controllo. Consentendo il riutilizzo del codice OpenCL, C e C ++ nell'ambito di un flusso di lavoro familiare, SDAccel offre agli sviluppatori Cpu/Gpu la possibilità di migrare facilmente le applicazioni su una piattaforma Fpga. Per SDAccel sono disponibili grandi quantità di codice e di librerie in formato C e C++. La capacità di lavorare in OpenCL, C o C++ rappresenta un grande vantaggio per gli sviluppatori che desiderano sfruttare codice diverso dalla base esistente, che mirano a utilizzare librerie di terze parti, o anche che vogliono continuare a sviluppare con un mix di OpenCL, C e C ++. L'ambiente di sviluppo SDAccel è supportato da un IDE basato su Eclipse, da una serie di librerie Fpga ottimizzate basate su C e da alcune schede commerciali già pronte per essere utilizzate nei data center. Le schede di accelerazione per data center sono attualmente offerte da Convey Computer, Alpha Data Parallel Systems, e Pico Computing. Nel corso del 2015 saranno disponibili prodotti Cots di altri partner. Le librerie SDAccel includono elementi OpenCL, Dsp, blocchi video, funzioni di algebra lineare per implementazioni a bassa potenza e ad alte prestazioni. Per le eventuali funzioni di accelerazione specifiche, Auviz Systems - membro Xilinx Alliance - offre delle librerie ottimizzate OpenCV e BLAS compatibili SDAccel.
Il flusso
Gli sviluppatori di applicazioni possono iniziare a utilizzare SDAccel nello spazio di emulazione x86 per ottenere del codice funzionante. Quando gli algoritmi sono ultimati è possibile profilare il codice per trovare le eventuali sezioni che potrebbero trarre beneficio da un'accelerazione. A questo punto è possibile isolare queste sezioni e utilizzare delle simulazioni veloci per generare automaticamente e in modo accurato dei kernel di accelerazione. Le simulazioni veloci possono essere utilizzate per il debug e per ottimizzare la quantità dell'accelerazione mentre si lavora a livello architettonico. L'applicazione collaudata è così pronta per essere trasportata sul sistema host/Fpga. L'ambiente di sviluppo SDAccel supporta tutte queste attività da un unico cruscotto. Le librerie SDAccel contribuiscono in modo sostanziale a mantenere un approccio di sviluppo simile a quello del mondo Cpu/Gpu. Esse includono librerie di matematica di base e librerie a più alta produttività, quali Blas, OpenCV e Dsp. Le librerie sono scritte in C++ (e non in Rtl), in modo che possano essere utilizzate direttamente durante tutte le fasi di sviluppo e debugging. All'inizio di un progetto, lo sviluppo sarà effettuato sulla Cpu host. Essendo scritte in C++, le librerie SDAccel devono semplicemente essere compilate insieme al codice applicativo della Cpu target (creando di un prototipo virtuale), consentendo di effettuare tutte le attività di test, debug e profiling iniziale direttamente sull'host. Durante questa fase, non è necessaria alcun Fpga. Una volta effettuato il debug e la profilazione iniziale dell''applicazione, le funzioni critiche che necessitano di un accelerazione hardware possono essere compilate per una co-simulazione con le funzioni accelerate eseguite su un simulatore di Rtl basato su Cpu. A questo punto, il team di sviluppo software è in grado di valutare le prestazioni risultanti e verificare che l'applicazione soddisfi gli obiettivi prestazionali. La simulazione Rtl offre un quadro molto accurato delle prestazioni attese dall'accelerazione hardware su Fpga: questa capacità offre al team di sviluppo una stima precisa, garantendo che la configurazione Fpga riproduca esattamente il comportamento e i risultati del codice applicativo sorgente. Le funzioni accelerate vengono quindi essere trasferite su Fpga per ricavare l'applicazione accelerata finale, pronta per la distribuzione. Invece di creare una configurazione Fpga generica, nel momento della compilazione il compilatore SDAccel prende in considerazione degli Fpga specifici (compresa la versione di velocità) consentendo di ottimizzare le funzioni accelerate in base alle risorse e alle temporizzazioni del dispositivo. In tale fase, le funzioni possono essere arricchite con funzioni di controllo senza alcuna penalizzazione in termini di prestazioni e con un minimo di hardware aggiuntivo. Un'ulteriore profilazione avanzata può avvenire all'interno dell'ambiente di sviluppo SDAccel per sfruttare più a fondo i vantaggi dell'hardware Fpga e per massimizzare pienamente l'accelerazione dell'applicazione. La profilazione a livello di Cpu identifica i colli di bottiglia delle applicazioni. La co-simulazione permetterà di determinare se i colli di bottiglia vengono eliminati accelerando delle funzioni specifiche. La profilazione delle funzioni accelerate a livello hardware eseguite su Fpga permette di effettuare delle ottimizzazioni supplementari e un'ulteriore messa a punto del codice applicativo e delle funzioni accelerate stesse. In ogni momento e in tutte le fasi, il compilatore SDAccel può arricchire facoltativamente con degli strumenti di monitoring il codice applicativo - comprese le funzioni accelerate. Questo significa che debugging e profiling possono procedere nello stesso modo e con gli stessi strumenti di sviluppo software indipendentemente dalla fase di sviluppo.
Run-time Cpu/Gpu-Like
Caso unico, SDAccel permette di sviluppare degli acceleratori riconfigurabili dinamici basati su Fpga che consentono l'aggiornamento in tempo reale del codice eseguito su Cpu/Gpu. La piattaforma permette al sistema di continuare a funzionare durante gli aggiornamenti del kernel grazie alle doti di riconfigurabilità dinamica degli Fpga, le quali consentono di caricare i nuovi kernel di accelerazione hardware tutelando le interfacce critiche di sistema e le funzioni quali memoria, Ethernet, PCIe e monitoring delle prestazioni. La riconfigurabilità in tempo reale del sistema è ideale per gestire gli aggiornamenti immediati della capacità di calcolo e dei carichi dei data center. Un esempio di applicazione in cui questa capacità può risultare strategica riguarda l'opportunità di gestire in modo dinamico e immediato il passaggio delle funzioni di una scheda dalla ricerca, alla transcodifica, all'elaborazione delle immagini. Tutto questo si traduce in un'ottimizzazione delle risorse attraverso il riutilizzo dell'hardware, vantaggio particolarmente significativo negli ambienti data center. In termini semplici, un progetto basato su SDAccel può accelerare un'applicazione offrendo l'opportunità di aggiornare rapidamente e in modo ottimizzato il sistema qualora si manifestassero nuove esigenze applicative. Gli sviluppatori hanno la facoltà di gestire ed eseguire sistemi basati su SDAccel proprio come farebbero con un sistema Cpu/Gpu. L'abbinamento tra SDAccel e le doti di riconfigurabilità dinamica dell'hardware rende anche possibile riutilizzare l'Fpga mentre l'applicazione è in esecuzione. Tale funzionalità consente agli sviluppatori di gestire molteplici accelerazioni kernel utilizzando la medesima scheda Fpga, semplicemente ridefinendo l'hardware necessario per ogni algoritmo senza limitare o interrompere il flusso dell'applicazione. Grazie a questa riconfigurabilità dinamica, SDAccel consente ai gestori dei data center di ottenere il massimo dal loro investimento in accelerazione hardware.
Vantaggi reali
Le prestazioni ottenibili con SDAccel sono testimoniate da benchmark reali. Ad esempio, in un test di compressione SDAccel ha prodotto degli acceleratori hardware oltre 3 volte più veloci e più piccoli rispetto agli acceleratori generati da un tool concorrente. Area e throughput sono comparabili o superiori a quelli di un'implementazioni Rtl ottimizzata a mano. Nel test di criptaggio, SDAccel ha prodotto degli acceleratori hardware oltre 1,2 volte più veloci e 4 volte più piccoli degli acceleratori generati da un tool concorrente. Meglio ancora, l'acceleratore generato automaticamente da SDAccel è del 20% più veloce di un acceleratore creato utilizzando una codifica Rtl manuale. SDAccel fornisce agli sviluppatori di applicazioni data center un ambiente di programmazione Cpu/Gpu-like che produce acceleratori hardware efficienti con livelli di prestazioni/watt di gran lunga superiori agli acceleratori che girano su server Cpu/Gpu. L'ambiente supporta il flusso di sviluppo software attraverso un unico cruscotto con prestazioni integrate di riconfigurabilità che permettono di massimizzare l'accelerazione hardware dei data center. In questo modo, SDAccel rappresenta una soluzione basata su Fpga unica e completa, facile da utilizzare e dotata delle capacità necessarie per generare automaticamente acceleratori hardware con prestazioni superiori.