Come ridimensionare i risultati della complessità parallela a molti core costantemente?


20

Ho avuto problemi ad accettare la visione teorica della complessità di "risolto in modo efficiente dall'algoritmo parallelo" che è data dalla classe NC :

NC è la classe di problemi che possono essere risolti da un algoritmo parallelo nel tempo su processori con .p ( n ) O ( n k ) c , k NO(logcn)p(n)O(nk)c,kN

Possiamo assumere una carrozzina .

Il mio problema è che questo non sembra dire molto su macchine "reali", ovvero macchine con un numero limitato di processori. Ora mi è stato detto che "è noto" che possiamo "efficacemente" simulare un algoritmo di processore processori .p NO(nk)pN

Che cosa significa "efficientemente" qui? Questo folklore o esiste un teorema rigoroso che quantifica il sovraccarico causato dalla simulazione?

Temo che ciò accada è che ho un problema che ha un algoritmo sequenziale e anche un algoritmo parallelo "efficiente" che, quando simulato su processori , impiega anche il tempo (che è tutto ciò che ci si può aspettare da questo livello di granularità di analisi se l'algoritmo sequenziale è asintoticamente ottimale). In questo caso, non c'è alcuna accelerazione per quanto possiamo vedere; infatti, l'algoritmo parallelo simulato può essere più lento dell'algoritmo sequenziale. Cioè sto davvero cercando dichiarazioni più precise di -bounds (o una dichiarazione di assenza di tali risultati).p O ( n k )O(nk)pO(nk)O


Teorema di Brent?
cic

Intendi ? In tal caso, questo è (afaik) applicabile solo in determinate circostanze e inoltre non consente immediatamente di tradurre i tempi di esecuzione. O se lo fa, ti preghiamo di elaborare una risposta. Tp<Wp+D
Raffaello

NC risponde alla domanda "è possibile scambiare più hardware per meno tempo di esecuzione?" Potresti voler limitarti a hardware costante e questo è simile a limitarti a memoria costante, una migliore modellazione di alcuni problemi. Per un uso pratico, consultare gli adduttori lookhead, più hardware in modo che l'aggiunta di bit venga eseguita in . O ( N )NO(N)
AProgrammer

Risposte:


13

Se supponi che il numero di processori sia limitato da una costante, allora hai ragione che un problema con NC non significa molto in pratica. Poiché qualsiasi algoritmo su una carrozzina con k processori e t tempo parallelo può essere simulato con un singolo processore RAM a O ( kt ), il tempo parallelo e il tempo sequenziale possono differire solo per un fattore costante se k è una costante.

Tuttavia, se si presume che sia possibile preparare un computer con più processori man mano che le dimensioni dell'input aumentano, un problema in NC significa che finché è possibile preparare più processori, il tempo di esecuzione sarà "molto breve" o, più precisamente, pollogaritmico nella dimensione di input. Se pensi che questo assunto non sia realistico, confrontalo con il presupposto della memoria illimitata: i computer reali hanno solo una quantità limitata di spazio, ma nello studio degli algoritmi e della complessità, quasi sempre assumiamo che un dispositivo computazionale non abbia una costante superiore legato allo spazio. In pratica, ciò significa che possiamo preparare un computer con più memoria all'aumentare della dimensione dell'input, che è il modo in cui normalmente usiamo i computer nel mondo reale. NC modella una situazione analoga nel calcolo parallelo.


1
Okk/2k1n20
Raffaello

4
@Raphael: La domanda se un determinato problema appartiene o meno a NC non modella la tua domanda. Non sto dicendo che la tua domanda non sia interessante; Sto solo dicendo che NC non è la giusta classe di complessità per modellarla.
Tsuyoshi Ito,

Sono davvero felice di sentirlo; una persona afferma il contrario, però. Non necessariamente con NC ma con risultati teorici di complessità in generale. Com'è con le altre classi?
Raffaello

O(n)O(logn)

@JeffE: Questa non è una correzione. Ho solo scritto "preparare più processori" senza dare il suo significato rigoroso (perché pensavo che farlo avrebbe oscurato il punto).
Tsuyoshi Ito,

10

NC

p=1NC

Ma aspetta, c'è di più.

NC

PO(nϵ),0<ϵ<1NCnnn<lg3nn0.5×109NC

In una delle risposte, è stato osservato che "In pratica, ciò significa che possiamo preparare un computer con più memoria all'aumentare della dimensione dell'input, che è il modo in cui normalmente usiamo i computer nel mondo reale. NC modella una situazione analoga in calcolo parallelo ".

Sono parzialmente d'accordo con questo punto di vista. Acquistiamo un nuovo computer parallelo con più memoria quando un vecchio supercomputer viene messo fuori servizio anche perché i chip DRAM sono meno costosi in tempo e per bilanciare in qualche modo il computer parallelo rispetto ai suoi componenti principali (processori, memoria, interconnessione ecc.).

pnp

Pertanto, è sempre più importante progettare algoritmi paralleli scalabili in memoria, poiché sono pratici per problemi di grandi dimensioni.

n3n

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.