Report
Transcrição
Report
Verwendung einer Sony PlayStation 3 als Workstation Alexander Jesner, David Forstenlechner und Lukas Grossar 1. April 2008 1 Vorbereitung 1.1 Ziel des Projektes Das Ziel des Projektes ist es, eine handelsübliche Sony PlayStation 3 entsprechend mit Linux aufzusetzen, um sie als Workstation nutzen zu können. Die PlayStation 3 ist aufgrund des verbauten Cell Prozessors, welcher 8 Kerne beherbergt, für parallelisierte Berechnungen bzw. Simulationen prädestiniert und wird unter anderem von Mag. Manfred Liebmann für seine Parallel Toolbox1 verwendet werden. 1.2 1.2.1 Verwendete Hardware Sony PlayStation 3 Wir haben uns für das zu Beginn des Projekts herausgekommene 40 GB Modell entschieden, da es um etwa e 100 günstiger ist als das 60 GB Modell und für unsere Verwendung keinerlei Nachteile birgt. Eines der Probleme, das uns schon zu Beginn des Projekts bewusst war, ist der sehr kleine Arbeitsspeicher von gerade einmal 256 MB XDR-DRAM was vor allem bei der Wahl des Window Managers für die Linux-Installation wenig Auswahl lässt. Leider gibt es auch keine Möglichkeit nachzurüsten, da der RAM fest verbaut ist. 1.2.2 Samsung SyncMaster 226BW Beim Monitor mussten wir auf mehrere Dinge achten: • muss einen DVI/HDMI Eingang besitzen und das HDCP Protokoll unterstützen • sollte preislich unter e 300 liegen • Problemloser Betrieb der PlayStation 3 muss möglich sein Laut einiger Test die wir im Internet gefunden haben war dieser Monitor eine gute Balance der Ansprüche, da ein Monitor mit höherer Auflösung unser Budget hoffnungslos gesprengt hätte. 1 http://paralleltoolbox.sourceforge.net/ 1 2 Installieren des alternativen Betriebssystems 2.1 Yellow Dog Linux 5.0.2 Wir haben uns zur Installation von Yellow Dog Linux (YDL) entschieden, da er Distributor Terra Soft Solutions 2 sich auf die Power Architektur spezialisiert hat und daher auch eine unproblematische Installation auf der PlayStation 3 garantiert. Die Installation mittels des von Terra Soft Solutions zur Verfügung gestellten HowTo verlief auch problemlos. Leider veröffentlichte IBM kurz darauf eine neue Version der Cell Broadband Engine SDK welche YDL 5.0.2 nicht mehr unterstützt. Daher entschieden wir uns infolgedessen für eine Installation von Fedora 7, was zwar mehr Installationsaufwand bedeutet, uns aber dafür im Nachhinein weniger Probleme bereiten sollte. 2.2 Fedora 7 Da die Cell Broadband Engine SDK seitens IBM nur auf Red Hat Enterprise Linux 5.1 und auf Fedora 7 unterstützt wird haben wir uns für eine Neuinstallation entschieden. Mittels eines sehr guten HowTos3 und der Cell Linux Addon CD 4 verlief auch diese Installation relativ unproblematisch – sie dauerte aber trotzdem mehrere Stunden. 2.2.1 FluxBox Nach den ersten grauenhaften Erfahrungen bezüglich der Geschwindigkeit des Gnome Window Managers entschieden wir uns für eine Installation des FluxBox5 Window Managers, was sich als sehr gute Entscheidung entpuppte, da die PlayStation damit gefühlt doppelt so schnell unterwegs ist. Hier wirft sich natürlich die Frage auf, warum die für ihre Grafik bekannte PlayStation beim Anzeigen von einfachen Fenstern Probleme machen sollte. Dies ist sehr schnell beantwortet: es gibt für Linux keine Driver um die Grafikkarte direkt ansprechen zu können. 3 Einrichten der Workstation 3.1 Installation der Cell SDK 3.0 Auch hier haben sich natürlich wieder ein paar Probleme eingeschlichen. Da das Installationsskript ein paar falsche URLs gespeichert hatte, mussten wir die entsprechenden Pakete händisch nachinstallieren. Prinzipiell verlief diese Installation aber problemlos. 2 http://www.terrasoftsolutions.com/ http://www.gnuradio.org/trac/wiki/PS3FC7Install 4 http://www.kernel.org/pub/linux/kernel/people/geoff/cell/ 5 http://fluxbox.sourceforge.net/ 3 2 4 Parallele Programmierung und der IBM Cell Broadband EngineTM (Cell BE) Prozessor 4.1 Motivation Eine der Hauptaufgaben der Computational Sciences ist die Entwicklung möglichst genauer Modelle naturwissenschaftlicher Vorgänge. Eine exakte analytische Lösung ist in vielen Fällen nicht möglich, numerische Methoden sind in diesen Fällen einsetzbar. In numerischen Modellen steht die Genauigkeit der Ergebnisse meist in direktem Verhältnis mit dem erforderlichen Rechenaufwand. Die Geschwindigkeit mit der die Modelle ausgeführt werden können bestimmt also wie lange die Forscher auf Ergebnisse warten müssen und wie genau diese Ergebnisse sein können. Als kreativer Vorgang wird das Entwickeln neuer Modelle von der Möglichkeit interaktiv zu Experimentieren gefördert (Ideal: “Work at the speed of thought!”). Neben der Optimierung des angewendeten Algorithmus ist die verfügbare Rechenleistung der Hardware entscheidend für die erreichbare Geschwindigkeit. Beispiele für Strategien um die erreichbare Rechenleistung zu erhöhen sind: • Höhere Taktraten der Prozessoren. Die Frequenz mit der Prozessoren Befehle ausführen steht im direkten Verhältnis mit der theoretisch erreichbaren Rechenleistung. Die reale Rechenleistung hängt auch von der Geschwindigkeit mit der Daten zur Berechnung an den Prozessor geliefert werden können ab. • Mehrere Recheneinheiten (Cores) auf einem Prozessor. Um höhere Rechenleistung zu erzielen versuchen Prozessorhersteller eine steigende Anzahl von Recheneinheiten auf einem einzelnen Chip unterzubringen. Damit vervielfacht sich die theoretisch erreichbare Rechenleistung. • Verteilte Berechnung (Cluster). Mehrere Rechner können durch spezielle Software und Protokolle in einem Netzwerk verbunden und ihre Rechenleistung kombiniert werden. In einem Clustern können auch Rechner mit mehreren Recheneinheiten enthalten sein, um die verfügbare Rechenleistung weiter zu erhöhen. Auch die Möglichkeit mehrere Datenpakete mit einem Befehl auszuführen (SIMD – Single Instruction, Multiple Data) sei hier erwähnt. 4.2 Multithreaded, parallele und verteilte Programmierung Im idealen Fall ist mit n Recheneinheiten eine n-fache Ausführungsgeschwindigkeit von Algorithmen zu erreichen6 . 6 In der Realität kann manchmal eine mehr als n-fache(super −lineare) Geschwindigkeitserhöhung gemessen werden. Das ist auf die Architektur moderner Prozessoren und Speichersysteme zurückzuführen, die die Bearbeitung kleinerer Datenpakete bevorzugt. 3 Konventionelle Programmiersprachen wie Java, C++ und Python sind imperative Programmiersprachen, die Befehle in einer sequentiellen Ordnung ausführen, und können damit nicht ohne weiteres auf mehrere Recheneinheiten verteilt werden. Um Geschwindigkeitsvorteile aus multiplen Recheneinheiten zu ziehen müssen Algorithmen speziell für die parallele Ausführung auf mehrere Recheneinheiten entworfen und programmiert werden. Einige Gesetze zur Bestimmung der erreichbaren Geschwindigkeitserhöhung werden im folgenden vorgestellt. 4.2.1 Amdahls Gesetz Für Algorithmen die zu 100% parallelisierbar sind ist die zu erwartende Geschwindigkeit wie erwähnt das n-fache, mit n als die Anzahl der Recheneinheiten. Um die Beschleunigung von Algorithmen die nicht zur Gänze parallelisierbar sind, und damit aus sequentiellen Teilen bestehen, abzuschätzen kann folgendes von Gene Amdahl 1967 definiertes Gesetz eingesetzt werden: S(N ) = 1 (1 − P ) + P N Abbildung 1: Amdahls Gesetz Mit P als dem Anteil des Algorithmus der parallelisiert werden kann und N der Anzahl der Recheneinheiten auf die der Algorithmus verteilt wird. Aus dem Amdahl Gesetz wird gefolgert dass die durch Parallelisierung erreichbare Beschleunigung durch den sequentiellen Anteil limitiert ist. Selbst bei 95% Parallelisierbarkeit des Algorithmus ist laut Amdahls Gesetz mit 50 Prozessoren nur eine 15-fache Beschleunigung zu erreichen, Amdahls Gesetz wurde lange Zeit als Argument gegen die Effizienz massiv paralleler Rechenmaschinen eingesetzt. 4.2.2 Gustafsons Gesetz Ende der 80er Jahre wurde Kritik an Amdahls Gesetz laut, als die Gruppe um John L. Gustafson mit massiv parallelen Rechnern deutlich bessere Ergebnisse erzielte als es laut Amdahls Gesetz möglich scheint. Gustavson definierte 1988 folgende Formel: 4 S(N ) = N − (1 − P ) ∗ (N − 1) Abbildung 2: Gustafsons Formel Im Gegensatz zu Amdahls Gesetz vermindert sich der Einfluss des nicht parallelisierbaren Teils mit der Anzahl der Prozessoren, die erreichbare Geschwindigkeit ist nicht nach oben begrenzt. 4.3 IBM Cell Broadband EngineTM (Cell BE) Der IBM Cell Chip ist eine Weiterentwicklung der PowerPC Architektur. Er besteht aus einer Recheneinheit mit höherem Funktionsumfang (PPE – PowerPC processing element) und 8 Recheneinheiten mit kleinerem Funktionsumfang (SPEs – synergistic processing elements). Abbildung 3: Cell Prozessor Architektur Die PPE ist ein regulärer PowerPC Kern, damit können Betriebssysteme wie Linux auf diesem Prozessor ohne aufwändige Anpassungen ausgeführt werden. 5 Die SPEs sind speziell auf Rechenleistung optimiert – jede von ihnen besitzt 256Kb sehr schnellen Cache Speicher für Daten und Code, spezielle Prozessor-Befehle zur gleichzeitigen Verarbeitung mehrerer Daten (SIMD) und 128 Register (jedes 128 Bit breit). Sie sind untereinander durch einen sehr schnellen Speicher-Bus verbunden der einen Strom von Daten zwischen den SPE effizient ermöglicht und den Cell Prozessor damit für die parallele Verarbeitung von Daten-Streams sehr schnell macht. Die PPE weist ihnen Code und Daten zu, insbesondere ist es den SPEs nicht möglich direkt auf den Hauptspeicher zuzugreifen, Daten werden in Paketen angefordert und asynchron durch DMA (direct memory access) in den Speicher geschrieben. Im idealen Fall erlaubt dieses Konzept den SPEs ohne Unterbrechung auf höchster Auslastung zu Rechnen. 4.3.1 Cell BE SDK Die Architektur des Cell Prozessors erfordert spezielle Tools und Implementierungstechniken um die SPEs anzusprechen. Die Cell BE SDK stellt diese Tools zur Verfügung. Neben angepassten C++ Compilern und Analyse-Tools bietet die SDK einige auf die SPEs optimierte Bibliotheken um die Umsetzung von Algorithmen zu erleichtern. An dieser Stelle sei auf die für IBM übliche, exzellente Dokumentation der SDK verwiesen. 4.4 Konkurrierende Prozessorarchitekturen Neben IBM verfolgen auch alle anderen grossen Prozessor-Hersteller die Strategie mehrere Recheneinheiten auf einem Chip unterzubringen. Einige der wichtigsten werden hier kurz besprochen. 4.4.1 Intel Larrabee Intels Antwort auf die enorme Rechenleistung von GPUs und Cell Prozessor ist derzeit in Entwicklung unter dem Namen „Larrabee“. Die ersten Publikationen weisen auf ein Prinzip ähnlich dem IBM Cell Prozessor hin, mit mehreren (16–24) vereinfachten x86 Kernen auf einem vom Hauptprozessor getrennten Chip. 4.4.2 Intel Multicore Prozessoren Intel Multicore Prozessoren integrieren mehrere Recheneinheiten ihrer erfolgreichen „Pentium“ Reihe auf einem Chip. Der Vorteil dieser Strategie besteht darin, dass bestehende Programme ohne Anpassungen auf diesen Recheneinheiten lauffähig sind. Durch die relativ hohe Komplexität der einzelnen Einheiten ist der Platzbedarf hoch, die Anzahl der möglichen Recheneinheiten die auf einen Chip passen dadurch limitiert. 6 4.4.3 Graphics Processing Units GPUs setzen auf eine massive Anzahl einfacher Recheneinheiten (bis zu 420 zur Zeit der Erstellung dieses Dokuments). Die theoretische Rechenleistung dieser Lösung ist sehr hoch – die Entwicklung von Algorithmen, die für GPUs optimiert sind, kann jedoch sehr aufwändig sein. 5 5.1 Zukunftsaussichten und Hoffnungen Verwendung der PlayStation 3 GPU Leider ist es noch immer nicht möglich, auf die integrierte nVidia RSX Grafikkarte zuzugreifen. Die Verwendung der GPU wird durch den Hypervisor, der zwischen das installierte Linux und die PlayStation 3 Hardware geschalten ist, verhindert. Es gab bereits ein paar seltene Erfolge, welche aber mit der Version 2.10 der PS3 Firmware wieder zunichte gemacht wurden. Sony schafft es bisher erfolgreich einen Zugriff zu verhindern, da sie sich durch eine 3D-Beschleunigung innerhalb des alternativen Betriebssystems einen starken Rückgang beim Spieleverkauf erwarten. 7