Le enormi unità di elaborazione parallela di oggi sono in grado di eseguire in modo efficiente gli automi cellulari?


20

Mi chiedo se le unità di calcolo massicciamente parallele fornite nelle schede grafiche al giorno d'oggi (una che è programmabile in OpenCL , per esempio) siano abbastanza buone per simulare in modo efficiente automi cellulari 1D (o forse automi cellulari 2D?).

Se scegliamo qualsiasi griglia finita si adatterebbe alla memoria del chip, possiamo aspettarci che una transizione di un automa cellulare definito su questa griglia venga calcolata in un tempo (quasi) costante?

Suppongo che gli automi cellulari 2D richiederebbero più larghezza di banda per la comunicazione tra le diverse parti dei chip rispetto agli automi 1D.

Sarei anche interessato dalla stessa domanda nel caso della programmazione FPGA o dei chip personalizzati.


Forse sarebbe più rilevante confrontarlo con un chip "equivalente" che simula gli stessi automi cellulari nel solito modo. (memorizzando le celle in memoria nel solito modello Von Newmann)
jmad

Buona domanda. Non ho idea di quale tipo di algoritmi funzioni bene con le GPU, quindi non vedo l'ora di avere delle risposte.
Raffaello

1
Nonostante gli FPGA, i pro exp sono pro exp. Forse riferito qui e qui .

Risposte:


7

Ottima domanda Credo che la risposta sia sì.

L'evoluzione di un automa cellulare equivale essenzialmente all'esecuzione di un calcolo di stencil. Su alcune griglie 1D, 2D o 3D, i valori successivi di punti (o celle) vengono calcolati in base all'ultimo valore della vicinanza del punto. In una semplice CA 1D, questo quartiere potrebbe essere la cella e le due celle a sinistra e a destra. Ci sono molti esempi di calcoli di stencil eseguiti su GPU; La suite di benchmark SHOC di ORNL per OpenCL / CUDA contiene un esempio di stencil 2D, ad esempio.

L'idea di base è di fare in modo che ogni thread ottenga una copia locale del quartiere per diversi punti, quindi calcola i valori successivi per i punti determinati da quel quartiere. Utilizzando in modo appropriato la gerarchia di memoria in ad esempio CUDA (registri, condivisi, costanti, trame e memorie globali) e il modello di elaborazione SIMT (ad esempio, calcolando in modo appropriato la funzione di transizione senza introdurre un'eccessiva divergenza di curvatura), è possibile ottenere buone prestazioni.

Questa risposta sarebbe molto migliore se dovessi fare un esempio, ma sono troppo occupato per scrivere qualsiasi codice in questo momento ... Ma in teoria, penso che dovrebbe essere fattibile simulare in modo efficiente le CA su GPU modellandole dopo lo stencil calcoli. Molte considerazioni vanno nella stesura di un buon calcolo di stencil per le GPU.


5

Qualunque cosa tu faccia, calcolare il prossimo stato per un automa cellulare richiede altrettanti calcoli quante sono le cellule nell'automa. Pertanto, per ottenere un tempo costante, sono necessari tanti core di elaborazione quante sono le celle.

Il numero di questi nella GPU è attualmente al massimo di poche migliaia, mentre il calcolo dello stato successivo è così semplice che mi aspetto che il risultato sia legato all'IO, ovvero è possibile ottenere un'ottima approssimazione del tempo necessario semplicemente considerando spostamento dei dati necessario (e se non è una buona approssimazione, l'implementazione ha un'inefficienza o l'architettura non è adatta, ma sarebbe molto sorprendente).

Per FPGA, la domanda è più difficile e probabilmente dipenderà dal mix di unità di memoria e di calcolo disponibili. Se non sono troppo lontano, non avrai abbastanza memoria per tenere occupate tutte le unità e se fai affidamento sulla memoria esterna, sei nella stessa sede della GPU, la larghezza di banda della memoria sarà il fattore limitante e non lo farei essere sorpreso se la conclusione è che non vi è alcun vantaggio rispetto alla GPU. (Nota che mentre ho lavorato con FPGA, è stato anni fa, ora potrebbero esserci modelli FPGA con il giusto mix).

ASIC offre maggiore flessibilità. Puoi facilmente avere un'implementazione simile a sistolica (ma con il flusso di dati bidirezionale, alcuni sistolici sono generalmente limitati al flusso di dati unidirezionale), ogni cella fisica è una logica: un po 'di memoria e la logica necessaria per calcolare il suo stato successivo ed è disposta in modo che il suo vicino fisico sia logico. Ovviamente sei nel regno del tempo costante. A seconda di quali macro hai, potresti essere meglio essere un po 'meno ovvio e avere celle fisiche che raggruppano diverse logiche. L'obiettivo è massimizzare ciò che viene fatto in un chip, in altre parole per ridurre al minimo la comunicazione con l'esterno del chip non appena le esigenze di comunicazione sono proporzionali al numero di celle, la larghezza di banda sarà limitata. Sì, ciò significa che se devi esaminare tutte le celle per ogni passaggio, probabilmente non sei molto meglio che con la GPU. (La personalizzazione completa fornirebbe solo una migliore integrazione, ovvero più celle per chip).

Riepilogo: - se si desidera esaminare tutti gli stati intermedi, la GPU è l'approccio più efficace - in caso contrario, è necessario il volume per giustificare un ASIC per avere qualcosa di meglio, FPGA probabilmente non offrirà abbastanza vantaggio se essi avere qualche.


2

Mi chiedo se le unità di calcolo massicciamente parallele fornite nelle schede grafiche al giorno d'oggi siano abbastanza buone da simulare in modo efficiente automi cellulari 1D (o forse automi cellulari 2D?).

essendo molto generale, sì, il GPU computing è la migliore alternativa all'hardware standard disponibile per tutti.

Più in dettaglio; in teoria, secondo il modello PRAM, il costo per fase è effettivamente , lo sapete già. Tuttavia, la GPU differisce leggermente dalla PRAM poiché gli accessi alla memoria costano di più ed è diviso in diverse gerarchie (si dovrebbe considerare il modello PMH per un'analisi teorica più fine). Inoltre, i thread funzionano in gruppi o orditi , sono calcoli lockstep che procedono in modo SIMD. Il modello di programmazione della GPU funziona con il concetto di griglia (CUDA) o spazio di lavoron P n P O ( 1 )O(1)(OpenCL) che è praticamente una mappatura da 1 a 1 sullo spazio di calcolo degli automi cellulari. Questa è la funzione chiave per identificare e rendersi conto che le GPU sono compatibili con la CA. Dettagli tecnici: se la divergenza dell'ordito viene trattata correttamente (sostituendo i condizionali if-else con espressioni matematiche chiuse), gli accenni di memoria vengono coalizzati e ( numero di celle e numero di processori), allora si potrebbe dire che il calcolo la complessità è una specie di .nPnPO(1)

dal punto di vista FPGA e ASIC, so che esiste una ricerca sulla costruzione di una CA fisica come una griglia di porte logiche con stati, tutti collegati dai loro vicini; cioè array sistolici . L'idea sarebbe di non utilizzare più una memoria globale ma di fare affidamento sugli stati di ciascun nodo nella griglia. Una macchina di questo tipo sarebbe rivoluzionaria da allora potremmo smettere di parlare di un computer che simula una CA e iniziare a parlare di una CA in esecuzione come un computer (alcune CA sono in fase di completamento).

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.