Frage

Ich habe mit einigen Freunden zusammengearbeitet, um einen matlab -genetischen Algorithmus in C ++ umzuwandeln, und er funktioniert derzeit in einer sequentiellen Reihenfolge. MATLAB ist kein Teil unseres aktuellen Codes mehr.

Wir möchten es auf einem Cluster verwenden, haben aber ein wenig trocken von Ressourcen. Wir haben einen Cluster an der Universität und es ist mit Steinen und OpenMPI ausgestattet, aber ich bin mir nicht sicher, wo ich damit anfangen soll, damit zu arbeiten.

Wir haben derzeit 2D- und 3D -Arrays mit den Daten eingerichtet, und wenn das System Crossover- oder Austausch zwischen den Modellen durchführt, wird es nur versucht, Teile des 2D- und 3D -Arrays auszutauschen. Was sind einige gute Möglichkeiten, um diese Strukturen über mehrere Knoten zu trennen?

War es hilfreich?

Lösung

Wenn Sie Matrixberechnungen durchführen, hängt die Berechnung in hohem Maße von der Berechnung selbst ab, ob es sogar eine gute Möglichkeit gibt, die Berechnungen aufzuteilern.

Ich würde das Golub- und Van -Darlehensbuch "Matrix Computations, 3. Aufl." Sehr empfehlen. Darin gibt es ein ganzes Kapitel, das parallelen Berechnungen gewidmet ist (Kap. 6).

OpenMPI ist eine gute Middleware für dieses Problem. Da Sie dies in C ++ tun, können Sie sich auch Nulomq ansehen. Die beiden haben unterschiedliche Semantik, und einer könnte Ihren Problemraum oder Ihre Fähigkeiten mehr bevorzugen als die andere.

Außerdem sollten Sie wissen, dass parallele Matrixberechnungen (normalerweise die Signalverarbeitung, aber viele andere Anwendungen) ein sehr, sehr aktives Forschungsbereich ist.

Andere Tipps

Fitnessberechnung:

Normalerweise müssen Sie nur eine Person wissen, um seine Fitness zu berechnen, sodass Sie einfach die Bevölkerung durcharbeiten können, indem Sie Einzelpersonen für jeden Kern ausschalten. Wenn die Fitness eines Individuums berechnet wurde, handeln Sie das Kern einer neuen Person.

Crossover:

Ein Klassifungs- und Erobereransatz könnte für dieses Problem gut geeignet sein. Teilen Sie Ihre Arrays in Blöcke, die von jedem CPU -Kern verarbeitet werden, und fügen Sie dann möglicherweise einen globalen Crossover -Schritt hinzu (eine Teilmenge von Paaren), um sicherzustellen, dass Sie die Möglichkeit haben, sich angemessen durch den mehrdimensionalen Raum zu bewegen.

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