2012-12-27 7 views
6

Ho openMP e MPI a mia disposizione e mi chiedevo se qualcuno ha trovato una versione parallela di un algoritmo di riempimento flood (preferibilmente in c). In caso contrario, sarei interessato a schizzi su come farlo parallelizzare - è persino possibile dato il suo basato sulla ricorsione?Esiste un'implementazione di riempimento di inondazioni parallele?

Wikipedia ha un ottimo article se è necessario aggiornare la memoria su riempimenti di piena.

Molte grazie per il vostro aiuto.

risposta

4

Non c'è niente di "intrinsecamente" ricorsivo per il riempimento dell'inondazione, solo che per fare un po 'di lavoro, hai bisogno di alcune informazioni sulle celle "di frontiera" precedentemente scoperte. Se ci pensi in questo modo, è chiaro che il parallelismo è eminentemente possibile: anche con una singola coda, puoi usare quattro thread (uno per ogni direzione) e spostare solo la coda della coda quando la cella è stata esaminata da ciascuno filo. o equivalentemente, quattro code. pensando in questo modo, si potrebbe anche immaginare di suddividere lo spazio in più code, magari con intervalli di coordinate.

un problema di base è che la definizione del problema di solito include la condizione che nessuna cella viene mai rivisitata. questo implica che ogni lavoratore ha bisogno di una mappa aggiornata di quali celle sono state considerate (globalmente). le informazioni globali mutabili sono problematiche, in termini di prestazioni, anche se non è difficile pensare a modi per limitare la necessità di propagare gli aggiornamenti a livello globale ...