Wie kann ich mein Perl-Skript nutzen mehrere Kerne für die Kind-Prozesse?
Ich arbeite auf einem mathematischen Modell, das die Daten generiert, die von XFOIL, ein beliebter Luft-und Raumfahrt-tool verwendet, um die Auftriebs-und widerstandsbeiwert auf Tragflächen.
Habe ich ein Perl-Skript, das Aufrufe XFOIL wiederholt mit unterschiedlichen Eingabe-Parameter, um die Daten zu erzeugen, die ich brauche. Ich brauche XFOIL zu laufen 5,600 Zeiten, in rund 100 Sekunden pro run, soabout 6.5 Tage.
Ich habe einen quad-core-Maschine, aber meine Erfahrung als Programmierer begrenzt ist, und ich eigentlich nur wissen, wie die grundlegenden Perl.
Möchte ich ausführen von vier Instanzen von XFOIL zu einer Zeit, die alle auf Ihre eigenen Kern. So etwas wie dieses:
while ( 1 ) {
for ( i = 1..4 ) {
if ( ! exists XFOIL_instance(i) ) {
start_new_XFOIL_instance(i, input_parameter_list);
}
}
}
Also das Programm ist die überprüfung (oder besser schlafen), bis Sie einen XFOIL Instanz frei, wenn wir eine neue Instanz starten mit den neuen input-parameter-Liste.
InformationsquelleAutor der Frage Dang Khoa | 2009-12-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Parallel::ForkManager. Es ist ein Modul, das eine einfache Schnittstelle bietet, für die Verzweigung aus Prozessen wie diesem.
Hier einige Beispiel-code:
Müssen Sie liefern Ihre eigene Implementierungen für die start_new_XFOIL_instance und die output_exists Funktionen, und Sie werden auch wollen definieren Sie Ihre eigenen Sätze von Parametern zu übergeben XFOIL.
InformationsquelleAutor der Antwort James Thompson
Diese sieht aus wie Sie verwenden können, gearman für dieses Projekt.
http://www.gearman.org
Gearman-job-Warteschlange. Teilen Sie Ihre Arbeit fließen in viele mini-Teile.
Ich würde empfehlen, mit amazon.com oder sogar Auktion-Server in der Lage, dieses Projekt zu vollenden.
Ausgaben 10cents pro-computing Stunde oder weniger deutlich spead up Ihr Projekt.
Ich würde gearman-lokal, stellen Sie sicher, dass Sie einen "perfekten" Lauf für 5-10 Ihres teiljobs vor der übergabe es ein amazon-compute-farm.
InformationsquelleAutor der Antwort Daniel
Perl-threads nutzen von mehreren Kernen und Prozessoren. Die wichtigsten pro-threads ist es ziemlich einfach, um Daten zwischen den threads und koordinieren Ihre Aktivitäten. Ein gespaltener Prozess kann nicht einfach zurückgeben von Daten an die Eltern noch koordinieren sich untereinander.
Die wichtigsten Nachteile von Perl-threads ist er relativ teuer in der Herstellung im Vergleich zu einer Gabel, Sie müssen kopieren das gesamte Programm und alle Ihre Daten, Sie müssen haben Sie zusammengestellt in Ihrem Perl; und Sie können buggy sein, der ältere der Perl, der buggier die Fäden. Wenn Ihre Arbeit ist teuer, die Schaffung Zeit sollte keine Rolle spielen.
Hier ist ein Beispiel, wie Sie könnte es tun, mit Gewinde. Es gibt viele Möglichkeiten, es zu tun, diese nutzt Thread::Queue zu erstellen, die eine große Liste mit arbeiten Sie Ihren worker-threads teilen können. Wenn die Warteschlange leer ist, werden die threads beenden. Die wichtigsten Vorteile sind, dass die leichter zu Steuern, wie viele threads aktiv sind, und Sie nicht haben, um eine neue, teure thread für jedes bit der Arbeit.
Diesem Beispiel schiebt die ganze Arbeit in der Warteschlange auf einmal, aber es gibt keinen Grund Sie können nicht der Warteschlange hinzufügen, wie Sie gehen. Wenn Sie waren zu tun, dass Sie verwenden würden
dequeue
stattdequeue_nb
die warten, um für mehr input.InformationsquelleAutor der Antwort Schwern
Haben Sie halten gnu parallel parallel.
Es ermöglicht Ihnen das ausführen mehrerer Instanzen installieren des Programms mit verschiedenen Eingaben und
füllen Sie Ihre CPU-Kernen, wie Sie beginnen zur Verfügung. Es ist oft eine sehr einfache und effiziente Weise zu erreichen Parallelisierung von einfachen Aufgaben.
InformationsquelleAutor der Antwort saudic
Diese ist schon ziemlich alt aber wenn jemand noch auf der Suche nach geeigneten Antworten auf diese Frage geben, möchten Sie vielleicht zu prüfen, Perl Many-Core-Engine (MCE -)
InformationsquelleAutor der Antwort ashraf