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


Mein Post unten war (ich denke eher unfair) geschlossen auf StackOverflow daher mein Reposting hier.

Ursprüngliche Frage: Wie kann ich mehrere Computer verwenden, um eine schnellere Umgebung zu erstellen? Ich habe ungefähr 12 Computer mit je 4 GB und 2 GHz. Ich muss einige zeitaufwändige Datentransformationen durchführen und möchte die kombinierte Leistung dieser Maschinen nutzen. Sie laufen alle Win2003 Server.

Im Grunde 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 dadurch erschwert, dass ich Ihnen nicht mehr über das Projekt erzählen kann.

Original Beitrag: https://stackoverflow.com/questions/1126710/isit-possible-create-a-faster-computer-from-many-computers


7
2017-07-14 18:04


Ursprung


Es ist möglich. - Syed Tayyab Ali


Antworten:


Worüber du fragst, ist der Kern einer großen Frage in der Computertechnik von heute. 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 parallel auf mehreren Computern verarbeitet werden können.

Kurze Antwort für Sie: Wenn Sie mit Ihrer Verarbeitungssoftware Jobs trennen und parallel ausführen können, dann tun Sie dies. Wenn dies nicht der Fall ist, dann rede mit den Leuten, die es geschrieben haben, dass sie es für eine parallelere Arbeitsweise umgestalten.

Die Mechanismen, die Daten an die einzelnen Computer zu senden, parallele Aufgaben zu starten, sicherzustellen, dass die Jobs tatsächlich fertiggestellt wurden, und die Daten zurück zu bringen, ist eine Menge von dem, was die Clusterverwaltungssoftware, die andere Poster erwähnen, tut. Dort sind einige nicht-triviale Probleme beteiligt, aber im Allgemeinen Cluster-Management-Software ist über Job-Planung und Ressourcen-Management. Die Cluster-Management-Software behandelt nicht die parallele Arbeit - das muss Ihre "Verarbeitungs-Software" tun.

Es gibt keine "Magie", die Sie auf eine Gruppe von mehreren Computern werfen können, damit sie sich wie eine einzige schnellere Maschine verhalten. Sie werden nicht rauskommen, ohne eine Software zu haben, die dafür ausgelegt ist, mehrere Prozessoren außerhalb des Tors zu nutzen.


9
2017-07-14 18:09





Um die Verarbeitungsleistung mehrerer Maschinen zu kombinieren, wird eine Art Cluster-Software benötigt, die oft als Compute- oder Computing-Cluster bezeichnet wird. Einige Beispiele für Anwendungen, die dies tun können, sind:

Dies sind jedoch komplizierte Bits von Software, die Schaffung eines brauchbaren Hochleistungs-Cluster ist eine komplizierte und potenziell teure Arbeit und sollte nicht leichtfertig durchgefü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 und auf magische Weise einen Cluster erstellen und einen Standard von Windows-Anwendungen darauf installieren.


5
2017-07-14 18:12





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

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

Wenn Sie das Problem als "eine große Anzahl von zu transformierenden Videodateien" beschreiben, würde dies auf einem Cluster funktionieren.

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

Wahrscheinlich wäre es einfacher:

Widmen Sie einen Computer als Master. Der ganze Rest sind Kunden.

Legen Sie alle Ihre Videodateien auf diesen Master in einem Ordner.

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

Die Clients führen einige Windows-Skriptsprachen aus (Perl würde funktionieren), die aufwachen Hin und wieder, und, wenn etwas im freigegebenen Ordner ist, benennt es es in work_yourfilenahere und führt Ihre Transformation aus. Wenn es fertig ist, benennt es es in done_yourfilenamehier um. Wenn nicht, warten Sie einfach 60 Sekunden oder so.

Der Master-Computer führt ein Skript aus, das in jedem freigegebenen Ordner nachschaut. Wenn sie nichts in sich haben, dann lege eine Datei zur Transformation an. Wenn sie eine Datei namens done_yourfilenehere haben, dann verschiebe sie in den done-Ordner. Schleife, bis nichts mehr im Master-Ordner übrig ist.

Grundsätzlich sollten alle Clients so beschäftigt wie möglich gehalten werden, wobei jeder Client die Zeit benötigt, die er benötigt, um jede Datei zu transformieren.


2
2017-07-14 19:28





Es ist möglich, aber beim Aufbau eines Clusters ist viel Arbeit erforderlich. Ohne weitere Informationen ist es schwierig, mehr zu sagen


0
2017-07-14 18:08



Schlagen Sie vor, dass "a custer" irgendwie Software, die sonst für einen einzelnen Computer geschrieben wurde, "auf magische Weise" parallel ohne Änderungen an der Software ausführen könnte? Haben Sie jemals zuvor einen Cluster verwendet? - Evan Anderson
Nein, ich schlage vor, dass die Frage ohne weitere Informationen schwer zu beantworten ist. - theotherreceive
Meinetwegen. Du warst schnell zum Spiel hier und ich bekam ein bisschen von einem "magischen Cluster Pixie Staub" Gefühl von deiner Antwort. Ich entschuldige mich dafür, dass ich wie ein Idiot abgesprungen bin. - Evan Anderson


Die Antwort auf Ihre Frage hängt davon ab weitgehend auf der Software, die Sie verwenden, um diese Videodateien zu "transformieren" und was damit verbunden ist.

Adobe After Effects hat eine Art Clustering-Modus, den sie "Netzwerk-Rendering" nennen, aber es ist keine ideale Lösung. (Das letzte Mal, als ich es überprüft habe, habe ich dein Video in ein stell dir eine Sequenz vor, die dann vermutlich zu einem Video zusammengefügt werden müssten)

Diese Grundidee besteht darin, den Film in Stücke aufzuteilen und einen anderen PC zu bekommen, der an jedem Stück arbeitet:

  • Es sollte einige Befehlszeilen-Videocodierungswerkzeuge geben, die Optionen haben, nur einen bestimmten Bereich von Frames zu verarbeiten; Dies könnte das Teilen automatisieren.

  • Jeder Chunk könnte in einen anderen freigegebenen Ordner kopiert werden (wiederum einfach zu automatisieren)

  • Jeder der PCs in Ihrer "Farm" würde sich einen dieser freigegebenen Ordner für ein zu transformierendes Quellvideo ansehen. (Sehr einfach vorausgesetzt, dass die Software, die die Umwandlung durchführt, eine Funktion hat, "einen Ordner zu beobachten", aber dafür könnte ein Batch-Datei / Shell-Skript eingerichtet werden)

Ohne die Art der Video "Transformation" zu kennen, welche Software Sie verwenden oder welche Stufe des Skripting / Programmierens Ihnen zur Verfügung steht, wird es unmöglich sein, weiter zu kommentieren.


0
2017-07-14 19:06





Was du "erstellst" ist nicht "ein schnellerer Computer", sondern ein Cluster. Das ist nicht mehr als eine Gruppe von Computern zusammen verwendet.

IOW, was Sie tun müssen, ist ein Programm zu erstellen, das auf jedem Ihrer Computer ausgeführt wird, und einen Teil des Problems durchführt.

In Ihrem speziellen Fall müssen Sie viele Dateien umwandeln. Wenn jede Datei unabhängig von den anderen transformiert werden kann, ist es fast einfach: verteilen Sie sie unter den Maschinen und stellen Sie sie alle, um ihre eigenen Dateien zu transformieren.


0
2017-07-14 19:18





Wie andere gesagt haben, hängt es davon ab, was Sie zu tun versuchen und wie einfach es ist, parallel zu arbeiten.

Amdahls Gesetz und Gustafsons Gesetz Beschreiben Sie die Beschleunigung, da die Ausführung auf mehrere Prozessoren verteilt ist.


0
2017-07-14 21:26





Hast du Hadoop in Betracht gezogen? Mit Hadoop können Sie einen Batch-Job wie den Ihren mit mehreren Maschinen ausführen.

http://hadoop.apache.org/


0
2017-10-07 04:50





Die Mehrheit der größten Computer auf dem Planeten sind große Cluster von vielen einzelnen Knoten, von denen jeder häufig ein Standardserver ist.

Sehen http://www.top500.org/insbesondere die Aufschlüsselung nach Architektur: http://www.top500.org/stats/list/33/archtype.


-1
2017-07-14 18:42