Frage

Wenn Sie eine sehr rechenintensive parallele Anwendung schreiben mögen, welche Richtlinien würden Sie Ihre Objekte zu entwerfen verwenden (ob Klassen oder Strukturen, oder irgendetwas anderes), Ihr Potenzial zu maximieren, das Beste aus der Parallelität zu bekommen.

ich eine Anwendung denke, die interpretiert sagen / kompiliert eine baumartige grafische Darstellung von Objekten, die Sachen erfordern erstellen, es auf ein anderes Objekt vorbei zu verarbeiten, und so weiter, mit Baum wie Struktur.

Was soll man aus dem frühen Designprozess in Betracht ziehen?

War es hilfreich?

Lösung

Wenn Sie Sachen sind das Erstellen und dann übergeben Sie dann verarbeitet werden fast sicher können Sie Ihre Anwendung entwerfen, um die Verwendung von message passing und Objekt Isolation.

Der erste Schritt wird sein, Verantwortung zu identifizieren, das heißt, die Identifizierung, die werde, was handhaben. Jeder, der von einem Feld abgerundet ist.

Der zweite Schritt wird den Informationsfluss zwischen den Boxen werden definiert, das heißt, wenn ein X produziert ... wer verbraucht er?

Nach dass zwei Schritten werden Sie ein einfaches Diagramm mit Blättern haben Arbeiter und Pfeilen, die Nachrichten darstellen. Jeder Pfeil stellt eine Abhängigkeitsreihenfolge (das heißt, wenn ein Pfeil geht von A nach B muss dann A vor B ausgeführt werden).

Damit Sie in der Lage sein, leicht zu sehen, welche Aktionen parallel durchgeführt werden können und welche Aktionen sind in der Tat sequenzieller in einem grafischen leicht zu sehen, einfach Art und Weise zu zeigen.

Dann implementieren nur eine Rohr Struktur können Sie passieren Nachrichten zwischen Arbeitern , so dass jeder Arbeiter eine Pipeline von Arbeit hat.

Ein letzter Punkt: Wenn der ursprüngliche Entwurf fertig ist, ist es relativ einfach, es um Refactoring zu verbessern. Beispielsweise Knoten, die die gleiche Arbeit leisten kann Arbeit PIPES teilen, so dass 8 Syntaxanalysator aus dem „Lexic token“ Rohr verbrauchen oder ändern, so dass Arbeiter „stehlen“ kann die Arbeit von anderen Arbeitern Rohre usw.

Andere Tipps

Wenn Sie mit der Verwendung von viel unveränderlichen Datenstrukturen weg erhalten können, das wird Sie sparen viel Zeit, Typisierung und Kopfschmerzen.

Das Muster Jorge Córdoba oben beschrieben, ist nur ein Ansatz. Im Folgenden ist auf jeden Fall lesenswert:

http://www.amazon.com/Patterns-Parallel-Programming-Software / dp / 0321228111

Es hängt sehr stark von den Abhängigkeiten zwischen den Daten in Bezug auf den besten Weg, um Ihr Problem zu zersetzen. Zum Beispiel Muster wie Master-Worker und einziges Programm mehr Daten (SPMD) sind in der Regel sehr einfach Ansätze sein, wenn Ihr Problem selbst verleiht und Herangehensweise an sunch.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top