Seite 2 von 2

Verfasst: Dienstag 25. November 2008, 10:30
von sma
Man könnte das Prinzip von Erlang benutzen, wo sich prozesse asynchron Nachrichten schicken können. Alles was man dazu braucht, ist ein Process Handle und den bekommt der Vater, wenn er das Kind erzeugt. Jeder Prozess kennt außerdem sein eigenes Handle.

In Python z.B.

Code: Alles auswählen

child_pid = spawn(child_function)
send(child_pid, "hello from father", pid())
Zum Empfangen von Nachrichten sollte es dann aber noch ein neues Schlüsselwort geben, wenn das genauso wie bei Erlang funktionieren soll.

Eine andere Möglichkeit wäre, einem Thread bei der Erzeugung die zu teilenden Objekte explizit mitzugeben. Da wüsste man dann auch, dass dies threadsafe-Varianten von veränderbaren Datenstrukturen (sharedlist, shareddict, usw.) sein müssten.

Stefan

Verfasst: Samstag 14. März 2009, 15:12
von burli
So, ich hab das Thema nochmal ausgegraben weil es mich doch interessiert. Eine einfache Möglichkeit, verschiedene Prozesse auf mehrere Cores zu verteilen ist eigentlich banal. Man startet einfach die Prozesse mit Subprocess.

Ja, ich weiß. das ist die Brechstangenmethode, die ihre eigenen Probleme aufwirft, aber ein erster Versuch ist vielversprechend. Ich hab das Mandelbrot Programm aus einem anderen Thread mal auf einem Atom330 (Dual Core mit Hyper Threading) ausgeführt. Einzeln brauch das Programm (mit psyco) 22 Sekunden. Startet man zwei gleichzeitig ändert sich daran nicht viel. Startet man vier brauchen sie jedoch fast 40 Sekunden.

Die Kommunikation könnte man über einen TCP/IP Stack, XML-RPC oder ähnliches realisieren.

Nur um das klar zu stellen: es geht mir im Moment nicht um echte parallele Programmierung sondern um die Ausnutzung der vorhandenen Ressourcen in bestimmten Anwendungsfällen. Mit der Methode kann man nicht alle Probleme lösen. Aber man kann rechenintensivere Aufgaben auf mehrere Prozessoren bzw Kerne verteilen.

Verfasst: Samstag 14. März 2009, 17:05
von DasIch
@burli Die Kommunikation ist viel zu umständlich außerdem ist XMLRPC dumm.

Verfasst: Samstag 14. März 2009, 17:12
von lunar
burli hat geschrieben:Ja, ich weiß. das ist die Brechstangenmethode, die ihre eigenen Probleme aufwirft, aber ein erster Versuch ist vielversprechend. Ich hab das Mandelbrot Programm aus einem anderen Thread mal auf einem Atom330 (Dual Core mit Hyper Threading) ausgeführt. Einzeln brauch das Programm (mit psyco) 22 Sekunden. Startet man zwei gleichzeitig ändert sich daran nicht viel. Startet man vier brauchen sie jedoch fast 40 Sekunden.
Das einzige, was du damit "bewiesen" hast, ist die Tatsache, dass der Scheduler des Betriebssystems Prozesse auf verfügbare Prozessoren verteilt. Weder ist das besonders atemberaubend, noch hat das einen näheren Bezug zu Python.
Die Kommunikation könnte man über einen TCP/IP Stack, XML-RPC oder ähnliches realisieren.
Das wiederum hätte Bezug zu Python, wird aber nur mit Allgemeinplätzen abgedeckt. Das man TCP/IP für IPC nutzen kann, weiß jeder, interessant ist nur, wie man das vernünftig umsetzt. XMLRPC ist übrigens ein ziemlich ungeeignetes Format für IPC bei rechenintensiven Prozessen, weil es sehr viel Overhead erzeugt.

Verfasst: Samstag 14. März 2009, 17:13
von burli
Warum umständlich?

@Lunar: das ist mir schon klar. Es hat mit Python nicht direkt was zu tun. Mich hat einfach interessiert, wie es geht und vor allem wie gut.

Das XML-RPC nicht das geeignetste Format ist denke ich mir. Mit dem Teil habe ich mich noch nicht befasst und war nur eine Möglichkeit um die Idee zu demonstrieren

Verfasst: Samstag 14. März 2009, 17:26
von Flano
Was ist eigentlich von "Parallel Python" zu halten. Ist das echtes Multicore Prozessing?

http://www.parallelpython.com/

Gruss Flano

Verfasst: Samstag 14. März 2009, 17:33
von burli
Flano hat geschrieben:Was ist eigentlich von "Parallel Python" zu halten. Ist das echtes Multicore Prozessing?
Steht doch da
PP is a python module which provides mechanism for parallel execution of python code on SMP (systems with multiple processors or cores) and clusters (computers connected via network)
Ich kann mir vorstellen, das die im Wesentlichen das gleiche machen wie ich in meinem Versuch, nur das sie ein paar Kommunikations- und Steuerfunktionen eingebaut haben.

Verfasst: Samstag 14. März 2009, 18:12
von CM
Hoi,

kennt ihr PYRO?

Das ist vielleicht eine praktische Lösung für diese eher theoretische Diskussion. Zumindest mit einem Linux-Cluster habe ich da schon Gutes gehört - aber selber noch nicht ausprobiert.

Gruß,
Christian

PS Ich weiß, dass das hier Gesagte damit nicht ungültig wird - im Gegenteil. Muß man mich jetzt nicht drauf hinweisen ;-).