2010-07-23 16 views
5

Ich mache diesen Sommer eine Recherche und arbeite an der Parallelisierung von bereits vorhandenem Code. Im Moment liegt der Schwerpunkt auf der Möglichkeit, den Code so zu verteilen, dass er effizienter auf dem Cluster ausgeführt wird. Die aktuelle Aufgabe besteht darin, einen Konzeptnachweis zu erstellen, der mehrere Prozesse erstellt, wobei jeder seinen eigenen Stapel zur Verfügung hat. Wenn der Prozess den Stapel verarbeitet hat, fragt er die beiden nächsten Prozesse ab, ob sie noch mehr Arbeit in ihrem Stapel haben.Implementieren des Lastenausgleichs mit Python

Ich habe Schwierigkeiten, dies in Python zu konzipieren, aber ich hoffte, dass jemand mich in die richtige Richtung weisen oder ein Beispiel haben könnte, das in mpi4py oder ParallelPython ähnlich ist. Auch wenn jemand von einem besseren oder einfacheren Modul weiß, wäre das toll zu wissen.

Danke.

Antwort

11

Hier ist eine einfache Möglichkeit, dies zu tun.

  1. Erstellen Sie eine gemeinsame gemeinsame Warteschlange der Arbeit zu tun. Diese Anwendung füllt diese Warteschlange mit Arbeit zu tun.

  2. Erstellen Sie eine Anwendung, die ein Element aus der Warteschlange erhält und die Arbeit erledigt.

Dies ist das Single-Producer-Multiple-Consumer-Design. Es funktioniert gut und kann Ihre Maschine mit parallelen Prozessen überschwemmen.

Um die integrierte Queue-Klasse zu verwenden, müssen Sie die Queue in eine Art Multi-Processing-API einbinden. http://docs.python.org/library/queue.html. Persönlich möchte ich einen kleinen HTTP-basierten Webserver erstellen, der die Warteschlange verarbeitet. Jede Anwendung führt eine GET, um das nächste Stück Arbeit zu holen.

Sie können Tools wie RabbitMQ verwenden, um eine sehr gute gemeinsame Warteschlange zu erstellen. http://nathanborror.com/posts/2009/may/20/working-django-and-rabbitmq/

Möglicherweise können Sie http://hjb.python-hosting.com/ verwenden, um JMS-Warteschlangen zu verwenden.

Sie benötigen eine kleine Anwendung zum Erstellen und Füllen der Warteschlange mit Arbeit.

Erstellen Sie so viele Kopien der Anwendung, wie Sie möchten. Beispiel:

for i in 1 2 3 4 5 6 7 8 9 10 
do 
    python myapp.py & 
done 

Dadurch werden 10 gleichzeitige Kopien Ihrer Anwendung ausgeführt. Alle 10 versuchen, Arbeit aus einer einzigen Warteschlange zu bekommen. Sie werden alle verfügbaren CPU-Ressourcen nutzen und das Betriebssystem plant sie für Sie.


Peer, Knoten-zu-Knoten-Synchronisierungs bedeutet Sie O (n * (n-1)/2) haben, Kommunikationswege zwischen allen Knoten.

Die "zwei benachbarten Knoten" bedeutet, dass Sie immer noch 2 * n Kommunikationswege haben und die Arbeit "irgendwie" unter den Knoten rinnen muss. Wenn die Knoten alle anfänglich mit Arbeit versehen sind, hat jemand viel geplant, um die Arbeitsbelastung auszugleichen. Wenn Sie so viel planen, warum bitten Sie die Knoten, sich überhaupt zu synchronisieren?

Wenn die Warteschlangen nicht sorgfältig aufeinander abgestimmt sind, kann jeder gerade Knoten langsam sein. Jeder ungerade Knoten könnte schnell sein.Die ungeraden Knoten beenden zuerst, prüfen auf Arbeit von zwei geraden Knoten, und diese Knoten sind (a) nicht fertig und (b) haben auch nicht mehr zu tun. Was jetzt? Die Hälfte der Knoten arbeitet, die andere ist inaktiv. Alles wegen der schlechten Planung in der anfänglichen Verteilung der Arbeit.

Master-Slave bedeutet, dass Sie n Kommunikationswege haben. Darüber hinaus erfolgt der Ausgleich automatisch, da alle unbelegten Knoten den gleichen Zugriff auf die Arbeit haben. Es gibt keine voreingenommene Anfangsverteilung, die zu einer schlechten Gesamtleistung führt.

+0

Danke, das den aktuellen Entwurf des Programms ähnlich ist, aber sie wollen, einen Knoten zu Knoten Struktur haben, anstatt eine Master-Slave-Struktur. Würde eine einzelne Warteschlange, auf die mehrmals von mehreren Prozessen aus zugegriffen wird, einen möglichen Engpass in einem Cluster verursachen? – patemotter

+0

@DistortedLojik: Einzelne Warteschlange sollte kein Problem sein, wenn jedes Arbeitspaket mikroskopisch klein ist. Es ist reiner Overhead, also möchten Sie, dass sich die Kosten für den Zugriff auf Warteschlangen über viele hochwertige Arbeiten amortisieren. –

Verwandte Themen