2012-12-27 17 views
6

Ich habe OpenMP und MPI zur Verfügung, und fragte mich, ob jemand eine parallele Version von jedem Flood-Fill-Algorithmus (vorzugsweise in c) gefunden hat. Wenn nicht, würde ich mich für Skizzen interessieren, wie man es parallelisieren kann - ist es überhaupt möglich, da es auf Rekursion basiert?Gibt es eine parallele Flutfüllungsimplementierung?

Wikipedia hat eine ziemlich gute article, wenn Sie Ihren Speicher auf Flutfüllungen aktualisieren müssen.

Vielen Dank für Ihre Hilfe.

Antwort

4

Es gibt nichts "inhärent" rekursives über Flood-Fill, nur dass, um etwas Arbeit zu tun, Sie einige Informationen über zuvor entdeckte "Frontier" -Zellen benötigen. Wenn Sie so darüber nachdenken, ist es klar, dass Parallelität sehr gut möglich ist: sogar mit einer einzigen Warteschlange können Sie vier Threads verwenden (einen für jede Richtung) und nur den Anfang der Warteschlange verschieben, wenn die Zelle von jedem untersucht wurde Faden. oder äquivalent vier Warteschlangen. Wenn man auf diese Weise denkt, könnte man sich sogar vorstellen, den Raum in mehrere Warteschlangen aufzuteilen, die vielleicht mit Koordinatenbereichen belegt sind.

ein grundlegendes Problem ist, dass die Problemdefinition normalerweise die Bedingung enthält, dass keine Zelle jemals wieder besucht wird. Dies impliziert, dass jeder Arbeiter eine aktuelle Karte benötigt, welche Zellen (global) betrachtet wurden. veränderbare globale Informationen sind in Bezug auf die Leistung problematisch, obwohl es nicht schwer ist, über Möglichkeiten nachzudenken, die Notwendigkeit für das weltweite Verbreiten von Updates einzuschränken ...