Wie teile ich CPU oder RAM?

21

Im Netzwerk teilen wir Dateien (Disk Driver) oder Datenbanken. Aber wie können wir CPU oder RAM über das Netzwerk gemeinsam nutzen?

MJH
quelle
3
Das Problem dabei ist, dass ein Netzwerk im Vergleich zu den Latenzen im Nanosekundenbereich zwischen CPU und RAM unglaublich langsam ist!
Phoshi
@Phoshi: Selbst mit den vom Netzwerk hinzugefügten Latenzen ist ein solches Setup möglicherweise schneller als ein festplattenbasierter Austausch.
Piskvor
@Piskvor: Aber wie jeder Ihnen sagen kann, ist der festplattenbasierte Austausch ein ziemlich massiver Leistungseinbruch!
Phoshi
@Phoshi: Ich stimme dem zu - in der Tat, und die optimale Lösung ist "mehr physischen Speicher hinzufügen". Ich sage nur, dass das Auslagern an ein schnelles Gerät (z. B. eine Ramdisk) über ein schnelles Netzwerk möglicherweise immer noch schneller ist als das Auslagern an eine physische Festplatte. Mit anderen Worten: Dies ist möglicherweise ein schnelleres Auslagerungsgerät als ein Auslagerungsgerät auf einem physischen Medium, obwohl es um viele Größenordnungen langsamer ist als der physische Arbeitsspeicher.
Piskvor
1
@Piskvor: Völlig plausibel, und selbst wenn man sich irrt, liegt es mit Sicherheit in der gleichen Größenordnung, wäre also im schlimmsten Fall nicht wesentlich schlechter. Ich nehme an, es ist wahrscheinlich nur billiger, mehr physischen Speicher vor Ort zu haben!
Phoshi

Antworten:

21

Dazu müssen die Programme, die auf die CPU / RAM-Ressourcen zugreifen, speziell für den Zugriff auf diese Ressourcen ausgelegt sein. Ein auf diese Weise eingerichtetes System wird als Cluster bezeichnet. Die gemeinsame Nutzung von Ressourcen erfolgt normalerweise über ein Protokoll namens MPI (Message Passing Interface). Es ist ein kostenloser Download und die Verwendung mit Linux kann zu einem leistungsstarken Cluster (möglicherweise sogar zu einem Supercomputer) bei minimalen Kosten führen. Es ist jedoch wiederum nutzlos, es sei denn, Sie verfügen über Programme, die speziell für die Nutzung von MPI entwickelt wurden. Es gibt einige gute Cluster-Tutorials. Wenn Sie immer noch interessiert sind, sollten Sie eines ausprobieren.

Bearbeiten:

Ich würde das Tutorial hier empfehlen , wenn Sie einen Cluster einrichten möchten. Ich habe einen Cluster erstellt, indem ich diesem Tutorial vor ungefähr einem Jahr gefolgt bin, und es hat ziemlich gut funktioniert. Das Tutorial ist ein bisschen alt, so dass einige Dateien möglicherweise nicht genau dort sind, wo sie laut Tutorial sind (manchmal werden Dateien in anderen / neueren Linux-Distributionen verschoben), aber wenn Sie mit Linux am wenigsten vertraut sind, sollte dies kein Problem sein. Das Tutorial verwendet eine ältere Version von MPI, aber ich habe die neueste Version verwendet und hatte keine Probleme, die nicht einfach zu lösen waren. Je nachdem, was Sie gerade tun, kann es tatsächlich ein Programm geben, das MPI nutzt. Ich weiß, dass es einige Videokodierungs- und Zahlenverarbeitungsprogramme gibt, die MPI nutzen und von universellen Quellen heruntergeladen werden können.

Ubiquibacon
quelle
Bitte nennen Sie mir einige Referenzen.
MJH
1
@MJH siehe meine bearbeitete Antwort.
Ubiquibacon
Danke. Aber dieses Tutorial funktioniert unter Linux, und ich verwende Windows. Außerdem muss die Anwendung unter MPI und ihren Einschränkungen schreiben.
MJH
3
@MJH Wenn Sie mit Windows arbeiten möchten, benötigen Sie nur eine MPI-Bibliothek, die mit Windows funktioniert, aber das Konzept ist dasselbe. MPICH funktioniert mit Windows, oder Sie können Ihren Windows-Cluster mit Windows HPC (mit integrierter MPI-Leitfähigkeit) erstellen, wenn Sie eine Münze fallen lassen müssen. Damit können Sie zwar Windows verwenden, Sie müssen jedoch weiterhin Programme verwenden, die für MPI geschrieben wurden. Daran führt derzeit kein Weg vorbei.
Ubiquibacon
2
Vielen Dank für diese Antwort - das empfohlene Tutorial hat anscheinend die Adresse in uiowa.edu/mihpclab/hpcSystsemTechnicalReport/… geändert. Prost!
Sdaau
9

Sie können RAM mithilfe von RAM-Datenträgern freigeben, dies sieht jedoch genauso aus wie die Freigabe von normalen Datenträgern, mit der Ausnahme, dass sich diese im RAM eines anderen Computers befinden. Es gibt keine direkte Möglichkeit für einen Computer, den RAM eines anderen Computers so zu verwenden, als wäre es sein eigener RAM. Es gibt jedoch einige Möglichkeiten, den RAM eines anderen Computers zu verwenden. Mehr dazu im nächsten Absatz.

CPU-Sharing ist möglich, es gibt jedoch keinen einheitlichen Standard. Sie können es nicht einfach freigeben und die benötigten Ressourcen von einem anderen Computer übernehmen lassen. Stattdessen benötigen Sie speziell entwickelte Anwendungen, die auf mehreren Computern gleichzeitig ausgeführt werden können. Dies wird oft als verteiltes Rechnen bezeichnet und wird von einigen Forschungsprojekten wie SETI @ Home, Einstein @ Home, Climateprediction.net und vielen anderen verwendet.

Grundsätzlich arbeiten Programme so, dass es einen zentralen Server gibt, der die zu erledigende Arbeit verteilt. Computer im Netzwerk laden Arbeitseinheiten vom Zentralcomputer herunter und verarbeiten sie. Danach empfängt der Zentralcomputer die Ergebnisse von den Kunden und führt sie zu einem zusammenhängenden Ergebnis zusammen. Auf diese Weise "teilen" Computer CPU- und RAM-Ressourcen über das Netzwerk. Der Nachteil dabei ist, dass Programme so erstellt werden müssen, dass sie über das Netzwerk funktionieren, und derzeit ist verteiltes Rechnen bei den üblichen Verwendungszwecken eines Computers nicht populär genug, sodass nur eine kleine Anzahl spezialisierter Programme dies unterstützt. Andererseits wird es üblicherweise für wissenschaftliche Zwecke verwendet, da es billiger ist, eine große Anzahl von Personalcomputern oder Playstations 3 zu erhalten, als Zugang zu einem Großrechner zu erhalten.

AndrejaKo
quelle
gibt es Software meiner Anwendung in meinem Netzwerk für Aktien ohne Notwendigkeit, Fremdnetz (zB i eine Datei machen will, dass mein PC dies in 7 Tagen machen, aber ich teile diese bis zu 1 Tag meines Netzwerk und Rendering - Reduktion?.?
MJH
@MJH Leider habe ich noch keine Programme gehört, die dazu rendern könnten.
AndrejaKo
1
ramdisks zu teilen ist irgendwie sinnlos, nicht wahr? Sie erhalten die Volatilität von RAM, mit der Langsamkeit des an das Netzwerk angeschlossenen Speichers
Journeyman Geek
1
@AndrejaKo Für direktes Video-Transcodieren habe ich auch nichts gehört (aber bei manchen, die googeln, habe ich ein oder zwei Projekte in Alpha / Beta gefunden, die das tun). Doch für 3D - Rendering, ich habe nicht ein 3D - Rendering - Programm seit den 90er Jahren gesehen , die nicht der Fall ist Unterstützung Netzwerk - Rendering .
Scott Chamberlain
5

Gibt es eine Software, mit der ich meine Anwendung in meinem Netzwerk freigeben kann, ohne dass ein fremdes Netzwerk erforderlich ist? MJH 12. März 11 um 1:19

Sie sind auf ein XY-Problem gestoßen. Sie sollten nicht gefragt werden, wie CPU- und RAM-Computer gemeinsam genutzt werden können, sondern wie mehrere Computer verwendet werden können, um das Rendern bei der Verwendung von ZZZZZ zu beschleunigen.

Es hängt stark davon ab, welche Software Sie verwenden und was Sie rendern ( transkodieren Sie Videos oder rendern Sie ein 3D-Modell / Video?).

Die kostenlose 3D-Software Blender unterstützt verteiltes Rendern, bei dem mehrere Computer zusammenarbeiten, um eine Ausgabe zu generieren. Wenn Sie Video rendern, haben Sie mit dem Open-Source-Projekt MediaEncodingCluster ein schnelles Googeln gefunden , mit dem Sie Video- und Audiodateien auf mehreren Computern rendern können.

Scott Chamberlain
quelle
5

Das einzige Betriebssystem, das ich kenne, um CPU / RAM zu teilen, ist plan9. Dort kann man fast alles exportieren / mounten. Das heißt natürlich nicht, dass die Leistungen gut sind.

Heinrich Spindeln
quelle
0

Es wäre eine nette Funktion, CPU / RAM für Aufgaben über das Netzwerk zu teilen. Gegenwärtig sind wir immer noch ein bisschen an alte Vorstellungen gebunden, Programme in der Box zu belassen, in der die Dinge passieren, aber wir können mehreren CPUs auf demselben Computer den Zugriff auf dasselbe Codefragment ermöglichen. Wir haben (zumindest) eine Methode, die so etwas macht. Java auf Webseiten funktioniert sowohl mit dem Server als auch mit dem Client, aber es ist immer noch auf Server-Client-Weise gesperrt, um Dinge zu erledigen (wobei der Server die meisten Daten enthält). Was wir brauchen, um in der Lage zu sein, Maschinen Aufgaben auf die gleiche Weise zuzuweisen, wie wir es tun, wenn wir mehrere CPUs haben (außer Maschinen, auf denen Programm-Snip und Daten-Snip zugewiesen werden müssen). Dies belastet das Netzwerk jedoch stärker wenn die aufgaben selbst nicht einfach sind und zu neuen engpässen führen können, gefällt mir die idee, wo es geht. '

k9dog
quelle