2010-03-09 18 views
5

Ho recenty chiesto una domanda su algoritmi di programmazione parallela che è stato chiuso abbastanza veloce a causa della mia cattiva capacità di comunicare il mio intento:Algoritmo di programmazione parallela più utile?

https://stackoverflow.com/questions/2407631/what-is-the-most-useful-parallel-programming-algorithm-closed

Avevo anche recentemente chiesto un'altra domanda, in particolare:

Is MapReduce just a generalisation of another programming principle?

L'altra domanda riguardava specificamente la riduzione della mappa e per verificare se mapreduce fosse una versione più specifica di qualche altro concetto nella programmazione parallela. Questa domanda (su un utile algoritmo di programmazione parallela) riguarda più l'intera serie di algoritmi per la programmazione parallela. Dovrai scusarmi anche se sono abbastanza nuovo alla programmazione parallela, quindi forse MapReduce o qualcosa che è una forma più generale di mapreduce è l'unico "costrutto di programmazione parallela che è disponibile, nel qual caso mi scuso per la mia ignoranza.

+1

questo è imho soggettivo –

+0

Sono d'accordo @ Gabriele, grazie. Ho dimenticato di spuntare la casella "community wiki" – Zubair

+0

Direi "make -j " –

risposta

1

Ci sono probabilmente due costrutti di programmazione parallela "principale".

Mappa/Riduzione è uno. A un livello alto e ultra-generico, è solo una divisione e conquista parallele. Invia i singoli bit ai gestori paralleli e combina i risultati al loro arrivo.

L'altra struttura di programmazione parallela principale è la pipeline ... i pezzi di lavoro passano attraverso una serie di fasi, ognuna delle quali può essere eseguita in un thread parallelo.

Penso che praticamente qualsiasi algoritmo di parallelizzazione si riduca a uno di questi due. Naturalmente potrei sbagliarmi.

+0

Non è mapreduce proprio come l'algoritmo della pipeline, utilizzando due pipe, una per inviare il calcolo e una per ottenere la risposta ? – Zubair

+0

@Zubair: non proprio ... la mappa reduce invia le cose a più "pipe" in parallelo, mentre una pipeline invierà tutto alla stessa serie sequenziale di condotte. Quindi, mappa/riduci appare come A -> (B, C, D, E) -> F (B, C, D, E ottieni la richiesta in parallelo, e la loro risposta va direttamente a F), mentre una pipeline assomiglia A-> B-> C-> D-> E-> F - ogni elemento invia i suoi dati all'elemento successivo, quindi tutto ciò che arriva a F è già passato da A a E. IOW, in una pipeline, ogni passo prende l'output dal passaggio precedente. – kyoryu

+0

Grazie per il chiarimento. Se tutto in una pipeline deve essere processato in modo seriale, allora dov'è il parallelismo? – Zubair

Problemi correlati