Ist es möglich, aus vielen Computern einen schnelleren Computer zu erstellen?

7

Mein Beitrag unten wurde (ich denke ziemlich unfair) auf StackOverflow geschlossen, daher meine Neuveröffentlichung hier.

Ursprüngliche Frage: Wie kann ich mehrere Computer verwenden, um eine schnellere Umgebung zu erstellen? Ich habe ungefähr 12 Computer mit jeweils 4 GB und 2 GHz. Ich muss eine zeitaufwändige Datentransformation durchführen und möchte die kombinierte Leistung dieser Maschinen nutzen. Auf allen wird der Win2003-Server ausgeführt.

Grundsätzlich haben wir eine große Anzahl von Videodateien, die wir transformieren müssen, damit unsere Analysten ihre Analyse durchführen können. Das Problem wird durch die Tatsache kompliziert, dass ich Ihnen nicht mehr über das Projekt erzählen kann.

Ursprünglicher Beitrag: /programming/1126710/is-it-possible-to-create-a-faster-computer-from-many-computers

Gemeinschaft
quelle
Es ist möglich.
Syed Tayyab Ali

Antworten:

9

Was Sie fragen, ist heute der Kern einer wichtigen Frage im Computer. Einzelne Verarbeitungskerne werden nicht viel schneller, daher müssen Programmierer mit dem Schreiben von Code beginnen, der größere Probleme in kleinere Probleme aufteilt, die auf mehreren Computern parallel verarbeitet werden können.

Kurze Antwort für Sie: Wenn Ihre Verarbeitungssoftware es Ihnen ermöglicht, Jobs zu trennen und bereits parallel auszuführen, dann tun Sie dies. Wenn dies nicht der Fall ist, sprechen Sie mit den Personen, die es geschrieben haben, darüber, dass sie es so umrüsten, dass es paralleler funktioniert.

Die Mechanik, die Daten auf die einzelnen Computer zu übertragen, parallele Aufgaben zu starten, sicherzustellen, dass die Jobs tatsächlich abgeschlossen sind, und die Daten zurückzubringen, ist eine große Aufgabe der Cluster-Verwaltungssoftware, die in anderen Postern erwähnt wird. Es gibt einige nicht triviale Probleme, aber im Allgemeinen geht es bei Cluster-Management-Software um Jobplanung und Ressourcenverwaltung. Die Cluster-Management-Software erledigt die parallele Arbeit nicht - genau das muss Ihre "Verarbeitungssoftware" tun.

Es gibt keine "Magie", die Sie auf eine Gruppe mehrerer Computer werfen können, damit diese sich wie eine einzige schnellere Maschine verhalten. Sie werden nicht ohne Software auskommen, die darauf ausgelegt ist, mehrere Prozessoren von Anfang an zu nutzen.

Evan Anderson
quelle
5

Um die Verarbeitungsleistung mehrerer Computer zu kombinieren, möchten Sie eine Art Cluster-Software ausführen, die häufig als Computer- oder Computer-Cluster bezeichnet wird. Einige Beispiele für Anwendungen, die dies tun können, sind:

Dies sind jedoch komplizierte Softwareteile. Die Erstellung eines verwendbaren Hochleistungsclusters ist eine komplizierte und möglicherweise teure Aufgabe und sollte nicht leichtfertig ausgeführt werden. Sie benötigen außerdem spezielle Software, die auf einem Cluster ausgeführt werden kann, um Ihre Arbeit zu erledigen. Sie können nicht einfach eine Reihe von Windows-Computern miteinander verbinden, auf magische Weise einen Cluster erstellen und eine Reihe von Standard-Windows-Anwendungen darauf installieren.

Sam Cogan
quelle
2

Ein Cluster von Computern funktioniert gut, wenn Sie sagen können ...

Kann ich jemanden an jedem Computer sitzen lassen und einen Teil des Problems lösen, und wird das die Dinge beschleunigen? Mit anderen Worten, kann das Problem in Teile aufgeteilt werden, die grundsätzlich unabhängig sind?

Angesichts der Tatsache, dass Sie das Problem als "eine große Anzahl von zu transformierenden Videodateien" beschreiben, würde dies in einem Cluster funktionieren.

Microsoft hat Clustering-Software, von der ich nichts weiß. Es könnte der richtige Weg sein.

Wahrscheinlich einfacher wäre:

Weisen Sie einen Computer als Master zu. Der Rest sind Kunden.

Legen Sie alle Ihre Videodateien auf diesem Master in einem Ordner ab.

Erstellen Sie einen freigegebenen Ordner pro Client und lassen Sie jeden Client diesen freigegebenen Ordner bereitstellen.

Die Clients führen eine Windows-Skriptsprache aus (Perl würde funktionieren), die von Zeit zu Zeit aktiviert wird. Wenn sich etwas im freigegebenen Ordner befindet, benennen Sie es in work_yourfilenamehere um und führen Sie Ihre Transformation aus. Wenn es fertig ist, wird es in done_yourfilenamehere umbenannt. Wenn nicht, warten Sie einfach etwa 60 Sekunden.

Der Master-Computer führt ein Skript aus, das in jedem der freigegebenen Ordner angezeigt wird. Wenn sie nichts enthalten, legen Sie eine zu transformierende Datei ab. Wenn sie eine Datei mit dem Namen done_yourfilenamehere haben, verschieben Sie sie in den Ordner done. Schleife, bis nichts mehr im Master-Ordner übrig ist.

Grundsätzlich sollten alle Clients so beschäftigt wie möglich sein, wobei sich jeder Client die Zeit nimmt, die er zum Transformieren jeder Datei benötigt.

Bruce ONeel
quelle
0

Es ist möglich, aber der Aufbau eines Clusters erfordert eine Menge Arbeit. Ohne weitere Informationen ist es schwierig, mehr zu sagen

theotherreceive
quelle
Schlagen Sie vor, dass "ein Custer" irgendwie Software ausführen kann, die ansonsten für einen einzelnen Computer "magisch" parallel geschrieben wurde, ohne dass Änderungen an der Software vorgenommen wurden? Haben Sie schon einmal einen Cluster verwendet?
Evan Anderson
1
Nein, ich schlage vor, dass die Frage ohne weitere Informationen schwer zu beantworten ist.
Theotherreceive
Meinetwegen. Du warst hier schnell im Spiel und ich bekam ein bisschen das Gefühl eines "magischen Cluster-Pixie-Staubes" durch deine Antwort. Ich entschuldige mich dafür, dass ich wie ein Idiot davongekommen bin.
Evan Anderson
0

Die Antwort auf Ihre Frage hängt weitgehend ab von der Software ab, mit der Sie diese Videodateien "transformieren", und was dies bedeutet.

Adobe After Effects verfügt über eine Art Clustering-Modus, den sie als "Netzwerk-Rendering" bezeichnen. Dies ist jedoch keine ideale Lösung. (Als ich das letzte Mal nachgesehen habe, wurde Ihr Video in eine imaginäre Sequenz gerendert , die dann vermutlich für Ihre Verwendung zu einem Video neu kombiniert werden muss.)

Diese Grundidee besteht darin, den Film in Blöcke aufzuteilen und einen anderen PC für jeden Block zum Laufen zu bringen:

  • Es sollte einige Befehlszeilen-Videokodierungswerkzeuge geben, die Optionen zum Verarbeiten nur eines bestimmten Bildbereichs bieten. Dies könnte die Aufteilung automatisieren.

  • Jeder Block könnte in einen anderen freigegebenen Ordner kopiert werden (wieder ziemlich einfach zu automatisieren).

  • Jeder PC in Ihrer "Farm" sucht in einem dieser freigegebenen Ordner nach einem zu transformierenden Quellvideo. (Sehr einfach, vorausgesetzt, die Software, die die Transformation durchführt, hat eine Funktion zum "Überwachen eines Ordners", aber ein Batch-Datei- / Shell-Skript könnte wahrscheinlich dafür eingerichtet werden.)

Ohne die Art der Video- "Transformation", die von Ihnen verwendete Software oder den Grad der Skripterstellung / Programmierung zu kennen, ist es unmöglich, weitere Kommentare abzugeben.

Privatheit
quelle
0

Was Sie "erstellen", ist nicht "ein schnellerer Computer", sondern ein Cluster . Das ist nichts weiter als eine Gruppe von Computern, die zusammen verwendet werden.

IOW, Sie müssen ein Programm erstellen, das auf jedem Ihrer Computer ausgeführt wird und einen Teil des Problems ausführt.

In Ihrem speziellen Fall müssen Sie viele Dateien transformieren. Wenn jede Datei unabhängig von den anderen transformiert werden kann, ist es fast einfach: Verteilen Sie sie auf die Computer und legen Sie sie alle ab, um ihre eigenen Dateien zu transformieren.

Javier
quelle
0

Wie andere gesagt haben, hängt es davon ab, was Sie versuchen und wie einfach es ist, parallel auszuführen.

Amdahls Gesetz und Gustafsons Gesetz beschreiben das Ausmaß der Beschleunigung, wenn die Ausführung auf mehrere Prozessoren verteilt wird.

Reicher Verkäufer
quelle
0

Haben Sie an Hadoop gedacht? Mit Hadoop können Sie einen Stapeljob wie Ihren auf mehreren Computern ausführen.

http://hadoop.apache.org/

user39184
quelle