Rechenleistung bündeln?

7 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Hab diesen Troll da oben schon gemeldet der hat auf ne Frage von mir auch diesen Mist geantwortet. Also man kann die Leistung mittels Software Bridge bündeln. Allerdings müsstest du dich dann für eine Architektur entscheiden sofern überhaupt Software dafür verfügbar ist. Weil der Raspberry Pi 3 ja den Intsruktionssatz ARMv8 verwendet während deine Notebooks hundert pro den Instruktionssatz x86_64 (i386, i686, amd64) nutzen. Das sind zwei völlig unterschiedliche CPU Typen. Man könnte mit der Software ExaGear Desktop von Eltechs eine x86 Umgebung auf dem Raspberry Pi Emulieren. Das funktioniert mit ExaGear Desktop auch echt gut da fast 80% der vollen ARM Leistung für die x86 Emulation genutzt werden können während QEMU vor sich hin siecht. Allerdings ist ExaGear nicht Kostenlos. Dann könnte man ein auf x86 (i386, i686 / 32 Bit) basiertes Cluster System via Linux aufbauen. amd64 (64 Bit) würde da derzeit allerdings weg fallen da ExaGear dies noch nicht unterstützt. Es befindet sich bereits jedoch in Entwicklung. Umgekehrt könnte man auf den Notebooks eine ARM Plattform emulieren und dann ein ARMv7 oder v8 Cluster System erstellen. Für ARM gibt es selbst auf der raspbian distribution schon Software dafür. Allerdings muss man dann auch das passende gegenstück für die emulierten ARM umgebungen auf den Notebooks finden sofern überhaupt möglich. Sollte es tatsächlich mit irgend einer von beide CPU Architekturen klappen hängt die Gesammtleistung auch extrem von der Bandbreite zwischen den Geräten ab. Soviel dazu

mfG. Der OMNIDROID

Woher ich das weiß:eigene Erfahrung – Seit Kind auf interessiert an EDV's, Physik, Elektronik

Um Rechenleistung auf mehrere Computer zu verteilen muss auch die Anwendung dafür geeignet sein. Nicht jede Aufgabe lässt sich aufteilen. Schon mit mehreren CPUs oder oder CPU mit mehreren Kernen ist das nicht so einfach. Wenn Du z.B. ein Programm auf einem PC hast, das ein Fenster aufmachen will, so geht das nur auf dem selben PC, kann aber von einem andern Kern durchgeführt werden, wenn mehrere Kernen vorhanden sind. Wenn einer 1000 Spam-Mails verschicken will, kann er das auf mehrere PCs verteilen.

Bei der Simulation von z.B. Klimamodellen, wo sehr viel gerechnet werden muss, sind ganz spezielle Programmarchitekturen notwendig, um die Rechenleistung auf mehrere Geräte zu verteilen. Die Verteilung muss ja ganz präzise organisiert sein. So mal auf die Schnelle ein paar herumstehende PCs zusammenzuschalten, dürfte kaum machbar sein.  

Du solltest Dir im allerersten Schritt mal überlegen, wie Deine eigentliche "Rechenaufgabe" eventuell in Einzelschritte zerlegbar ist. Bzw. welche Teile der Aufgabenstellung parallelisiert berechenbar sind und welche sequenziell laufen müssen. Das ist quasi logische Vorarbeit komplett abseits der Technik.

Wenn Du dann Deine Aufgabenstellung zerlegt hast, kannst Du für die einzelnen Berechnungsschritte ein Schnittstellenkonzept ausarbeiten. Also Eingabeparameter, Ausgabeparameter festlegen.

Dann kannst Du Dir im nächsten Schritt überlegen, wie irgendeine zentrale Instanz dann die Schritte auf die verfügbare Hardware disponiert. Es gibt prinzipiell zwei Möglichkeiten:

- multifunktionale Knoten, die alle Arten von Teilberechnungen durchführen können

- monofunktionale Knoten, die auf genau eine Art der Teilberechnung ausgelegt werden

In beiden Fällen musst Du dann eine Clustersteuerung implementieren, die quasi die Einzelschritte sequenziell oder parallel auf die zur Verfügung stehenden Knoten delegiert (= Request via Netzwerkverbindung an Knoten durchreicht, Inputparameter einwirft, Ausgabedaten einsammelt) und dann dafür sorgt, dass alle Requests auf diese Art und Weise bearbeitet werden. D. h. die Clustersteuerung agiert als eine Kombination aus Queue Manager und Zustandsüberwachungs"automat". Kann man letztlich als finite state machine mit Queues dahinter implementieren.

Ich nutze für sowas gern RESTful APIs mit JSON in/JSON out und setze auf Linux als Betriebssystem. Wenn man dann in so einem Rechnerverbund auch noch Maschinen mit mehreren Prozessorkernen hat, kann man auf diesen Maschinen nochmals eine Mehrfachinstanzierung von virtuellen Rechenknoten vornehmen, so dass man z. B. bei 2 Quadcore- und 3 Octacore-Maschinen das ganze als einen logischen Cluster von (2*4)-1 + (3*8) - 1 Knoten annimmt. Ich lasse meist 1 Core pro Blech frei, damit die beteiligten Systeme nicht von vornherein auf Anschlag belastet werden.

Wie Du vielleicht merkst, braucht man für sowas etwas Programmiererfahrung und/oder ein bereits vorhandenes Framework. Persönlich setze ich auf "do-it-yourself" und habe mir über die Jahre eine Tool-Landschaft selbst zusammengebaut.

das geht nur wenn die software dafür ausgelegt ist.

alleine die laufzeit der daten ist um Ewigkeiten länger, für "normale" programme wäre die Laufzeit Erhöhung so massiv das es nicht praktikabel ist.

Das geht im Prinzip, aber nicht so schön wie du dir das vielleicht vorstellst.

Also wenn du Software hast, wo du den Datensatz direkt aufteilen kannst. Dann kann man das ja irgendwie selbst basteln der GNU Parallels oder sowas nehmen.

Für andere Fälle musst du was selbst schreiben. Es gibt da z.B. MPI, das ein komplett standardisiertes Interface bereitstellt, damit du zwischen den einzelnen Programminstanzen kommunizieren kannst. Geht auch über mehrere Architekturen.

Kannst ja mal durch die Folien verschiedener Projekte durchschauen (auch Bitcoin Mining dabei) und einen Einblick darüber kriegen,wie sowas gemacht werden kann http://theinf2.informatik.uni-jena.de/Lectures/Algorithm+Engineering.html