Esistono problemi / algoritmi famosi nell'informatica scientifica che non possono essere accelerati dalla parallelizzazione


27

Esistono problemi / algoritmi famosi nel calcolo scientifico che non possono essere accelerati dalla parallelizzazione? Mi sembra che leggendo libri su CUDA che la maggior parte delle cose possa essere.


La ricerca binaria non può essere accelerata (in modo significativo, ad esempio da un fattore), anche se si considera la gerarchia di memoria.


3
@Anycorn No, Gram-Schmidt classico dall'aspetto sinistro e Gram-Schmidt modificato dall'aspetto destro funzionano bene in parallelo. Esistono molti altri algoritmi QR paralleli tra cui il TSQR recentemente reso popolare.
Jed Brown,

@Raphael: Penso che sia possibile velocizzare la ricerca binaria tramite i processori log (n), n = #. Invece di dividere l'intervallo di ricerca in parti e verificare dove continuare, dividere l'intervallo in n parti. Forse ci sono modi più efficienti, non lo so.
miracle173,

Risposte:


32

La questione centrale è la lunghezza del percorso critico rispetto alla quantità totale della computazione T . Se C è proporzionale a T , il parallelismo offre nella migliore delle ipotesi un costante aumento di velocità. Se C è asintoticamente più piccolo di T , c'è spazio per più parallelismo all'aumentare della dimensione del problema. Per gli algoritmi in cui T è polinomiale nella dimensione di input N , il caso migliore è C log T perché è possibile calcolare pochissime quantità utili in meno del tempo logaritmico.CTCTCTTNClogT

Esempi

  • per una risoluzione tridiagonale usando l'algoritmo standard. Ogni operazione dipende dal completamento dell'operazione precedente, quindi non esiste alcuna possibilità di parallelismo. I problemi tridiagonali possono essere risolti in tempo logaritmico su un computer parallelo usando una risoluzione diretta di dissezione nidificata, decomposizione di domini multilivello o multigrid con funzioni di base costruite usando l'estensione armonica (questi tre algoritmi sono distinti in più dimensioni, ma possono coincidere esattamente in 1D).C=T
  • Una densa risoluzione triangolare inferiore con una matrice ha T = N = O ( m 2 ) , ma il percorso critico è solo C = m = m×mT=N=O(m2) , quindi un po 'di parallelismo può essere utile.C=m=T
  • Multigriglia e FMM entrambi hanno , con un percorso critico di lunghezza C = log- T .T=NC=logT
  • La propagazione esplicita dell'onda per un tempo su una mesh regolare del dominio ( 0 , 1 ) d richiede k = τ / Δ t τ N passi temporali 1 / d (per stabilità), quindi il percorso critico è almeno C = k . La quantità totale di lavoro è T = k N = τ N ( d + 1 ) / d . Il numero massimo utile di processori è P = Tτ(0,1)dk=τ/ΔtτN1/dC=kT=kN=τN(d+1)/d , il restante fattore N 1 / d non può essere recuperato dall'aumentato parallelismo.P=T/C=NN1/d

Complessità formale

La classe di complessità NC caratterizza quei problemi che possono essere risolti in modo efficiente in parallelo (cioè nel tempo pollogaritmico). Non è noto se , ma è ampiamente ipotizzato falso. Se questo è davvero il caso, allora P-complete caratterizza quei problemi che sono "intrinsecamente sequenziali" e che non possono essere accelerati in modo significativo dal parallelismo.NC=P


13

Per dare un aspetto teorico a questo, NC è definito come la classe di complessità che è risolvibile in tempo in un sistema con O ( n k ) processori paralleli. Non è ancora noto se P = N C (sebbene la maggior parte delle persone sospetti che non lo sia) in cui P è l'insieme di problemi risolvibili in tempi polinomiali. I problemi "più difficili" da parallelizzare sono noti come problemi P- completi, nel senso che ogni problema in P può essere ridotto a un problema P- completo tramiteO(logcn)O(nk)P=NCPPPPRiduzioni N C. Se si mostra che un singoloproblema P- completo è in N C , si dimostra che P = N C (sebbene sia probabilmente falso come menzionato sopra).NCPNCP=NC

Quindi qualsiasi problema che sia completo sarebbe intuitivamente difficile da parallelizzare (anche se sono ancora possibili grandi accelerazioni). Un problema P- completo per il quale non abbiamo nemmeno ottime accelerazioni di fattore costante è la Programmazione lineare (vedi questo commento sullo scambio OR).PP


9

Inizia con il brontolio della Legge di Amdahl . Fondamentalmente qualsiasi cosa con un gran numero di passaggi seriali trarrà beneficio insignificante dal parallelismo. Alcuni esempi includono l'analisi, regex e la maggior parte della compressione ad alto rapporto.

A parte questo, il problema chiave è spesso un collo di bottiglia nella larghezza di banda della memoria. In particolare con la maggior parte delle GPU, i tuoi flop teorici superano ampiamente la quantità di numeri in virgola mobile che puoi ottenere dai tuoi ALU, poiché tali algoritmi con bassa intensità aritmetica (flop / cache-miss) trascorreranno gran parte del tempo in attesa su RAM.

Infine, ogni volta che un pezzo di codice richiede la diramazione, è improbabile che ottenga buone prestazioni, poiché la logica di ALU supera in genere la logica.

In conclusione, un esempio davvero semplice di qualcosa che sarebbe difficile ottenere un guadagno di velocità da una GPU è semplicemente il conteggio del numero di zeri in una matrice di numeri interi, poiché potrebbe essere necessario ramificarsi spesso, al massimo eseguire 1 operazione (incremento di uno) nel caso in cui trovi uno zero ed esegui almeno un recupero di memoria per operazione.

Un esempio privo del problema della ramificazione è il calcolo di un vettore che è la somma cumulativa di un altro vettore. ([1,2,1] -> [1,3,4])

Non so se questi contano come "famosi" ma c'è sicuramente un gran numero di problemi che il calcolo parallelo non ti aiuterà.


3
L '"esempio gratuito di ramificazione" che hai fornito è il prefisso-somma, che in realtà ha un buon algoritmo parallelo: http.developer.nvidia.com/GPUGems3/gpugems3_ch39.html Il calcolo del numero di zeri dovrebbe essere efficiente per ragioni simili. Non c'è modo di aggirare l'intensità aritmetica, però ...
Max Hutchinson,

Freddo. Mi correggo su quello.
martedì

8

Il (famoso) metodo di marcia rapida per risolvere l'equazione di Eikonal non può essere accelerato dalla parallelizzazione. Esistono altri metodi (ad esempio metodi di scansione rapida) per risolvere l'equazione di Eikonal che sono più suscettibili alla parallelizzazione, ma anche qui il potenziale di speedup (parallelo) è limitato.

Il problema con l'equazione di Eikonal è che il flusso di informazioni dipende dalla soluzione stessa. A grandi linee, le informazioni fluiscono lungo le caratteristiche (cioè i raggi luminosi nell'ottica), ma le caratteristiche dipendono dalla soluzione stessa. E il flusso di informazioni per l'equazione di Eikonal discretizzata è ancora peggio, richiedendo ulteriori approssimazioni (come implicitamente presenti nei metodi di sweep veloce) se si desidera uno speedup parallelo.

Per vedere le difficoltà della parallelizzazione, immagina un bel labirinto come in alcuni degli esempi sulla pagina web di Sethian . Il numero di celle sul percorso più breve attraverso il labirinto (probabilmente) è un limite inferiore per il numero minimo di passaggi / iterazioni di qualsiasi algoritmo (parallelo) che risolve il problema corrispondente.

(Scrivo "(probabilmente) è", perché i limiti inferiori sono notoriamente difficili da dimostrare e spesso richiedono alcune ipotesi ragionevoli sulle operazioni utilizzate da un algoritmo.)


Bel esempio, ma non credo che il tuo limite inferiore sia stato rivendicato. In particolare, i metodi multigrid possono essere utilizzati per risolvere l'equazione eikonale. Come nel caso del multigrid per Helmholtz ad alta frequenza, le sfide riguardano principalmente la progettazione di spazi adeguati adeguati. Nel caso di un labirinto, una strategia di aggregazione dei grafici dovrebbe essere efficace, con la rappresentazione grossolana determinata risolvendo problemi locali (quindi indipendenti) per segmenti del labirinto.
Jed Brown,

In generale, quando i metodi multigrid funzionano bene, significa che la granularità del problema è inferiore alla descrizione, e una "quantità di risposta corretta" sproporzionata proviene dalla fase di risoluzione del corso. Solo un'osservazione, ma il limite inferiore su quel genere di cose è complicato!
meawoppl,

@JedBrown Da una prospettiva pratica, il multigrid per Helmholtz ad alta frequenza è piuttosto impegnativo, contrariamente a quanto sembra implicare il tuo commento. E usare multigrid per l'equazione eikonale è "non comune", per non dire altro. Ma vedo la tua obiezione "teorica" ​​contro il limite inferiore suggerito: gli offset del tempo da vari punti all'interno del labirinto possono essere calcolati prima che il tempo per raggiungere questi punti sia noto e aggiunti in parallelo dopo che le informazioni mancanti sono disponibili. Ma in pratica, i solutori eikonali paralleli per scopi generali sono felici se in realtà si avvicinano al limite.
Thomas Klimpel,

Non intendevo implicare che fosse facile, gli spazi grossolani del raggio d'onda sono davvero molto tecnici. Tuttavia, penso che concordiamo sul fatto che esiste già un'opportunità di parallelismo nelle regioni aperte, mentre in stretti "labirinti" (che espongono pochissimo parallelismo con metodi standard), il problema dell'upscaling è più trattabile.
Jed Brown,

@JedBrown Slide 39 di www2.ts.ctw.utwente.nl/venner/PRESENTATIONS/MSc_Verburg.pdf (dal 2010) dice cose come "Estendi il solutore dal 2D al 3D" e "Adatta il metodo ai problemi con onde d' onda fortemente variabili". Quindi il multigrid a raggi d'onda può essere promettente, ma "non ancora maturo" sembra essere più appropriato di "molto tecnico" per descrivere i suoi problemi attuali. E non è proprio un solutore Helmholtz ad alta frequenza (perché è un risolutore "a onda intera"). Esistono altri solutori di Helmholtz multigrid "sufficientemente maturi" (solutori "full wave"), ma anche questi sono ancora "ricerche attive".
Thomas Klimpel,

1

Un'altra classe di problemi che sono difficili da parallelizzare nella pratica sono i problemi sensibili agli errori di arrotondamento, in cui la stabilità numerica viene raggiunta dalla serializzazione.

Consideriamo ad esempio il processo Gram – Schmidt e la sua modifica seriale. L'algoritmo funziona con i vettori, quindi è possibile utilizzare operazioni vettoriali parallele, ma ciò non si adatta bene. Se il numero di vettori è elevato e le dimensioni del vettore sono ridotte, l'uso di Gram – Schmidt classico parallelo e la reorthogonalization potrebbero essere stabili e più veloci del singolo Gram – Schmidt modificato, sebbene implichi un lavoro più volte maggiore.

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.