L'output FPGA può eseguire un PC multi-core?


20

Non capisco come FPGA possa essere utilizzato per accelerare un algoritmo. Attualmente sto eseguendo un algoritmo in tempo reale che richiede tempo su un laptop quadcore in modo che quattro calcoli possano essere eseguiti in parallelo.

Sono stato recentemente avvisato che FPGA potrebbe offrire prestazioni ancora migliori. Non capisco come funzioni. Qualcuno può spiegare come FPGA accelera un algoritmo e se dovrei passare a una soluzione FPGA Xilinx o Altera o continuare a eseguire i calcoli sul mio laptop quadcore.

Dettagli aggiuntivi: l'algoritmo gestisce 20 reti neurali artificiali utilizzando input immessi attraverso la trasformazione del pacchetto wavelet

Grazie a tutti per le ottime risposte.


1
Hai mai pensato di eseguire l'algoritmo su una CPU desktop (o server)? Di solito sono più veloci delle CPU dei laptop. (Per un fattore costante, ma ancora più veloce.)
ntoskrnl,

1
Pensa all'utilizzo della GPU per l'elaborazione della rete neurale. Le GPU hanno molte unità che possono moltiplicare i numeri in virgola mobile in parallelo.
Kamil,

@ntoskrnl Suppongo che abbia CPU i5 o superiore (4 core), quindi le prestazioni su desktop o server saranno solo proporzionali alla velocità di clock. Forse su Xeon può ottenere scarse prestazioni (20%?) Grazie all'enorme cache e alla migliore larghezza di banda della memoria, ma non è molto.
Kamil,

Quale CPU hai?
Kamil,

Interessante tempismo delle domande, abbiamo avuto una domanda simile su networkengineering.SE
Mike Pennington

Risposte:


23

Un mio collega ha analizzato questo punto e ha concluso che gli FPGA avrebbero sovraperformato un PC una volta che avessi avuto più di circa 100 attività indipendenti e integer che si sarebbero adattate all'FPGA. Per attività in virgola mobile GPGPU battere FPGA in tutto. Per il multithreading ristretto o il funzionamento SIMD, le CPU sono estremamente ottimizzate e funzionano a una velocità di clock superiore a quella normalmente raggiunta dagli FPGA.

Le altre avvertenze: i compiti devono essere indipendenti. Se ci sono dipendenze dei dati tra le attività, ciò limita il percorso critico del calcolo. Gli FPGA sono utili per la valutazione booleana e la matematica di interi, nonché interfacce hardware a bassa latenza, ma non per carichi di lavoro dipendenti dalla memoria o in virgola mobile.

Se devi mantenere il carico di lavoro in DRAM, questo sarà il collo di bottiglia anziché il processore.


3
Per decidere se DRAM è il limite, devi anche sapere che gli FPGA hanno molte piccole RAM distribuite (ad esempio 500 blocchi RAM indipendenti da 9kbit) che possono leggere / scrivere tutte nello stesso ciclo di clock.
maxy,

19

Un FPGA funziona in modo completamente diverso da un processore.

Per un processore scrivi software che dice all'hardware cosa fare. Su un FPGA descrivi "come dovrebbe apparire l'hardware" internamente. È come se stessi realizzando un chip appositamente realizzato per il tuo algoritmo.

Questo accelera molte cose e può ridurre il consumo di energia. Ma ha i suoi svantaggi: lo sviluppo richiede molto più tempo ed è molto più complicato. Devi pensare in un modo completamente diverso e non puoi usare algoritmi che funzionano nel software in modo diretto.

Per le reti neurali artificiali l'FPGA è un'ottima scelta. Ci sono molte ricerche in corso in questo settore.


In realtà, lo sviluppo di FPGA è spesso fatto usando linguaggi come Verilog o VHDL che descrivono il comportamento piuttosto che l'implementazione, un fatto che a volte è utile ma a volte può complicare notevolmente la progettazione di una logica sequenziale asincrona. Se si specificassero implementazioni, i ritardi di propagazione sarebbero in qualche modo coerenti, ma nei linguaggi comportamentali non è nemmeno garantito che siano positivi . La cosa chiave con il design FPGA è che i linguaggi rendono molto semplice avere molte (potenzialmente centinaia o migliaia) di diverse parti del chip che eseguono comportamenti semplici contemporaneamente.
supercat

13

Dipende molto dall'algoritmo, ma il principio può essere spiegato abbastanza semplicemente.

Supponiamo che il tuo algoritmo debba sommare molti numeri a 8 bit. La tua CPU dovrà comunque recuperare ogni istruzione, ottenere gli operandi dalla RAM o dalla memoria cache, eseguire la somma, archiviare il risultato nella cache e continuare con l'operazione successiva. La pipeline aiuta, ma è possibile eseguire solo tante operazioni simultanee quanti sono i core.

Se si utilizza un FPGA, è possibile implementare un gran numero di semplici additivi che funzionano in parallelo, sgretolando forse migliaia di somme in parallelo. Sebbene una singola operazione possa richiedere più tempo, esiste un enorme grado di parallelismo.

Puoi anche usare una GPGPU per svolgere attività simili, poiché sono anche costituite da molti core più semplici.


GPGPU è un ottimo input per le reti neurali che usano!
Botnic,

Esistono anche ASIC di reti neurali. Intel ne produceva uno che implementava 16 neuroni negli anni '80.
Lior Bilia,

@LiorBilia bene non ne so nulla di loro :). Non ho mai lavorato con reti neurali, e molto poco con FPGA
clabacchio

La rete neurale del software @clabacchio è un programma che per lo più moltiplica e confronta operazioni su numeri in virgola mobile. Per lo più intendo ... 95% o più.
Kamil,

Una CPU convenzionale può fare un buon lavoro nel sommare un sacco di numeri a 8 bit; su una macchina veloce il tempo di esecuzione sarebbe dominato dal costo del recupero dei dati dalla memoria (il 99% dei recuperi di codice verrebbe dalla cattura). Un esempio più interessante sarebbe lavorare con i dati codificati usando uno schema che richiede disposizioni o permutazioni di bit piuttosto "insolite". Ad esempio, se un pezzo di dati di campionamento video restituisce bit interleave per rosso, verde e blu, un FPGA potrebbe facilmente riorganizzare i bit; una CPU convenzionale avrebbe molti più problemi.
supercat

6

Esistono circa 3 livelli di specializzazione delle apparecchiature informatiche:

La CPU (come nel tuo laptop) è la più generica di tutte. Può fare tutto, ma questa versatilità ha un prezzo di bassa velocità e elevato consumo energetico. La CPU è programmata in movimento, le istruzioni provengono dalla RAM. I programmi per CPU sono veloci, economici e facili da scrivere e molto facili da cambiare.

FPGA (che significa Field Programmable Gate Array) è il livello intermedio. Come suggerisce il nome, può essere programmato "sul campo", cioè all'esterno di una fabbrica. FPGA di solito viene programmato una volta, questo processo può essere descritto come impostazione della sua struttura interna. Dopo questo processo si comporta come un piccolo computer specializzato per l'unica attività che hai scelto per esso. Ecco perché può andare meglio della CPU generica. La programmazione di FPGA è molto difficile e costosa e il debug è molto difficile.

ASIC (che significa Circuito integrato specifico per l'applicazione) è lo specialista finale. È un chip progettato e prodotto per una sola attività: un'attività che esegue in modo estremamente rapido ed efficiente. Non è possibile riprogrammare ASIC, lascia la fabbrica completamente definita ed è inutile quando il lavoro non è più necessario. Progettare ASIC è qualcosa che solo le grandi aziende possono permettersi e il loro debug è praticamente impossibile.

Se pensi ai "core", guardalo in questo modo: le CPU hanno 4, 6, forse 8 core più grandi che possono fare tutto. ASICS ha spesso migliaia di core, ma molto piccoli, capaci di una sola cosa.

Puoi guardare la community di mining bitcoin. Fanno gli hash SHA256.

  • Core CPU i7: 0,8-1,5 M hash / s
  • FPGA: 5-300 M hash / s
  • ASIC: hash / s 12000 M per un chip minuscolo, hash / s 2000000 M (sì, quel 2T) per un dispositivo a 160 chip

Certo, quei bambini ASIC costano quasi $ 2000 quando prodotti in serie, ma ti danno un'idea di come un tuttofare può competere con uno specialista.

L'unica domanda è: FPGA può offrirti più risparmi di quanti ne costi la progettazione? Ovviamente, invece di eseguirlo su UN laptop, puoi provare a eseguirlo su 20 PC.


L'hashing è un caso molto speciale; notare che le monete basate su Scrypt non sono (deliberatamente) molto accelerabili da hardware specializzato.
pjc50,

1
Il debug ASIC viene in genere gestito in simulazione prima della spedizione per la produzione. Quindi di solito sono 6 o più mesi dalle specifiche alla produzione. La diagnosi dei bug dopo la produzione è .. costosa ma non impossibile.
pjc50,

E mentre è difficile, in realtà può essere molto molto difficile, ci sono cose come la scansione dei confini, il test JTAG e le tecniche dirette che usano FIB ecc. Quindi è tutt'altro che impossibile eseguirne il debug, devi solo sapere cosa stai facendo . Ora un giorno ASIC si riferisce più a un flusso di progettazione (HDL, Synthesis, P&R) che in realtà si riferisce a un dispositivo reale dal momento che la maggior parte dei dispositivi sono ASIC, inclusi i processori ARM.
segnaposto

@ pjc50 Sì, quello era il mio punto - in casi speciali, la differenza di velocità è enorme. Ma scrypt asics sviluppa ancora CPU e GPU. Non di un fattore di milioni (come con sha), ma comunque ben oltre 100.
Agent_L

@placeholder sì, ma anche se trovi il bug, non è molto utile per tutti quei chip già prodotti. Intendevo "debug" come "rimuovere il bug" non solo "eccolo".
Agent_L

5

Sì, FPGA può superare la CPU moderna (come Intel i7) in alcune attività specifiche, ma ci sono metodi più facili ed economici per migliorare le prestazioni della rete neurale.

Più economico: intendo uno sforzo totale, non un costo IC FPGA, ma anche una memoria molto veloce per FPGA (ne avresti bisogno per la rete neurale) e l'intero processo di sviluppo.

  1. Usa SSE : ho visto implementazioni di reti neurali piuttosto semplici con prestazioni 2-3 volte migliori. Questa potrebbe essere una buona idea se non hai una GPU dedicata nel tuo laptop.

    Migliorare la velocità delle reti neurali su CPU di Vincent Vanhoucke e Andrew Senior

  2. Usa GPGPU (elaborazione per scopi generici su unità di elaborazione grafica) - Penso che puoi archiviare un aumento delle prestazioni 100-200x su GPU per laptop di classe media come GeForce 730M.

    Ecco l'implementazione della rete neurale (e il codice libero). Utilizza Nvidia CUDA.

    L'approccio GPGPU è molto scalabile, se a un certo punto ti rendi conto che hai bisogno di più potenza di calcolo, puoi semplicemente utilizzare un computer desktop con GPU più potente o persino Nvidia Tesla K80 con 4992 core (che è costoso).


1
Il problema qui è definire le prestazioni. Se intendiamo più velocemente allora sì, FPGA può essere più veloce del normale cpus. Tuttavia, gli FPGA non sono così flessibili come la CPU, sono progettati per eseguire efficacemente solo un'attività predefinita. Eseguire un altro compito significherebbe cambiare il suo cablaggio interno effettivamente implementando un altro
fpga
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.