Aus Linux-Magazin 12/2013

Intels Tesla-Alternative

subbotina, 123RF

Mit der Beschleunigerkarte Xeon Phi geht Intel einen Sonderweg: Anstelle einer GPU rechnen auf dem Coprozessor zahlreiche CPU-Kerne, was die Programmierung erleichtert.

Im Bereich des Hochleistungsrechnens setzen in den letzten Jahren immer mehr Anwender auf GPU-Computing. Anstelle von CPUs rechnen dabei ein oder mehrere GPUs an einem umfangreichen Problem. Die zu bearbeitenden Daten kopiert ein Hostrechner in den Speicher der Grafikkarte, die sie prozessiert und wieder zurückschickt.

Davon profitieren vor allem Anwendungen, die immer gleiche Operationen auf eine große Datenmenge anwenden. Eine GPU spielt hier ihre Stärke aus, da sich ihre zahlreichen (zum Teil über 1000) Recheneinheiten jeweils ein Datenelement vornehmen. So verarbeiten GPUs Daten um Größenordnungen schneller und energieeffizienter als CPUs. Bestimmte Anwendungen erscheinen daher nur noch mit GPU-Unterstützung sinnvoll – das Minen von Bitcoins etwa.

Dieser Leistungsvorsprung hat seinen Preis beim zusätzlichen Entwicklungsaufwand. Das Programmiermodell und somit das Prozedere beim Erstellen von Programmen unterscheidet sich fundamental von dem für CPUs. Daher lassen sich bestehende Programme nicht direkt für GPUs migrieren, ihre Programmierer müssen sich umstellen. Open CL versucht zwar möglichst viele dieser Unterschiede vor den Entwicklern zu verbergen und zu abstrahieren, das gelingt jedoch nicht vollständig.

Unter anderem aus diesem Grund sucht Intel nach einem eigenen Weg und bietet hierfür seit Anfang des Jahres die Beschleunigerkarte Xeon Phi an, die auf x86-Technik basiert. Aufmerksamkeit erregte die Karte in den vergangenen Monaten vor allem deshalb, weil der zurzeit schnellste Supercomputer – der Tianhe-2 [1] – sie massiv einsetzt: 48000 Xeon-Phi-Karten sind darin verbaut. Damit toppt er den bis dahin schnellsten GPU-basierten Supercomputer, den Titan von Cray [2], indem er fast die doppelte Rohleistung bringt. Der Artikel stellt die Xeon-Phi-Karte vor und erklärt, was sie anders macht als die GPUs.

Von Single- zu Manycore

Im Jahr 2005 geriet Intel mit der Netburst-Mikroarchitektur in eine Sackgasse und begrub das Jahrzehnte alte Dogma, die Leistung im wesentlichen über Taktraten zu steigern. Seitdem erhöht die Firma die Leistung ihrer Chipsätze trotz nur moderat steigender Taktraten, indem sie die Mikroarchitektur verbessert und auf Multicore-Architekturen setzt.

Das aber verlangt von den Entwicklern ein Umdenken: Um von dem Mehr an Prozessorleistung zu profitieren, müssen sie ihre Programme erst an die Multicore-Systeme anpassen. Intels Tera-Scale-Programm trägt dem Rechnung, indem es neben zukünftigen Multicore- vor allem Manycore-Architekturen untersucht und Programmiermethoden sowie Modelle für diese entwickelt.

Polaris und SCC

Als erstes Resultat des Forschungsprogramms stellte Intel 2007 neue Hardware vor: den Teraflops Research Chip, auch Polaris genannt. Er besitzt 80 Kerne und erreicht eine Leistung von 19,4 Gigaflops pro Watt bei einer Gesamtleistung von 400 Gigaflops [3]. Ein Gigaflop entspricht dabei einer Gleitkommaberechnung pro Milliardstelsekunde. Zum Vergleich: Ein damals aktueller Core-2-Quad-Prozessor schaffte lediglich 0,9 Gigaflops pro Watt bei 85 Gigaflops.

Der Polaris war jedoch aufgrund seiner Architektur nur äußerst schwer zu programmieren und wurde nie als kommerzielles Produkt verfügbar – lediglich fünf Personen schrieben zu Forschungszwecken jemals Software für den Chip. Im nächsten Schritt entwickelte Intel den Singlechip Cloud Computer (SCC, Codename Rock Creek). Der Prozessor brachte 48 Kerne mit (24 Einheiten mit je zwei Kernen), die weitgehend identisch mit den Kernen der Pentium-S-Prozessoren waren und untereinander über ein Hochgeschwindigkeits-Verbindungsnetzwerk sowie vier DDR-3-Speicherkanäle kommunizierten. Anders als beim Polaris stellte Intel einige Hundert SCC her und verteilte sie auch an Forschungseinrichtungen weltweit.

Neben seinem Einsatz als Cluster auf einem Chip war insbesondere der Umgang mit Betriebssystemen speziell: Der SCC konnte auf jedem der 48 Kerne eine eigene Linux-Instanz booten. Der Einsatz als 48-Kern-Maschine unter einer Betriebssysteminstanz scheiterte vor allem daran, dass der SCC keine Cache-Kohärenz in Hardware sicherstellte, wie es aktuelle Prozessoren gewöhnlich tun. Änderungen im Cache eines Kerns landeten nicht automatisch in den Zwischenspeichern der anderen Kerne. Daher erforderte eine effiziente Nutzung ein anderes Programmierkonzept und weitreichende Anpassungen am Betriebssystem – oder gleich ein spezielles Betriebssystem.

Larrabees Erbe

Parallel zum Tera-Scale-Programm versuchte Intel seit 2007 unter dem Codename Larrabee eine eigene leistungsfähige GPU zu entwickeln, um in den Markt der diskreten Grafikkarten einzusteigen. Anders als im Bereich der GPUs üblich sollte Larrabee nicht aus vielen Spezialrecheneinheiten bestehen, sondern aus zahlreichen modifizierten Pentium-Prozessoren (P54C), die x86-Code ausführen.

Die erste Larrabee-Generation schaffte es nie zur Marktreife, weil sie vermutlich nicht mit der Konkurrenz von Nvidia und AMD/ATI mithalten konnte. Mit den Erfahrungen aus dem Tera-Scale-Programm entschloss sich Intel zwar das Larrabee-Projekt fortzusetzen, aber die Hardware in Form einer Beschleunigerkarte für den HPC-Bereich auf den Markt zu bringen, in Konkurrenz etwa zu den Tesla-Grafikprozessoren von Nvidia.

Unter der Bezeichnung Knights Ferry gingen zunächst Prototypen an Forschungseinrichtungen, um die Verwendbarkeit der Karte als Rechenbeschleuniger zu prüfen. Dies mündete in einer Beschleunigerkarte mit dem Codenamen Knights Corner, die seit Anfang 2013 als Xeon Phi kommerziell vertrieben wird.

Architektur

Die Xeon Phi ist als PCI-Express-Karte in mehreren Konfigurationen erhältlich, die sich in der Anzahl der Kerne (57, 60 oder 61), im Speicherausbau (6, 8 oder 16 GByte), in der Taktrate (1053, 1100 oder 1238 MHz) sowie im Kühlkonzept (aktiv oder passiv) unterscheiden [4].

Die grundsätzliche Architektur ist bei allen Karten gleich: Die CPU-Kerne basieren – wie bei Larrabee und dem SCC – auf denen der ersten Pentium-Generation (P54C). Intel hat sie aber um 64-Bit- und Floating-Point-Instruktionen (x87) sowie um eine Vektoreinheit mit 32 Registern (512 Bit Breite) erweitert. Mit Letzterer lassen sich bis zu 16 Single-Precision-Gleitkommazahlen oder 32-Bit-Integer parallel verarbeiten. Zusätzlich ist jeder Kern vierfach multithreaded, womit eine Xeon Phi der 7100er Reihe bei 61 Kernen bis zu 244 Threads zeitgleich ausführen kann.

Die Kerne stellen jeweils einen 64-KByte-L1-Cache und einen 512-KByte-L2-Cache bereit und sind durch einen Ringbus miteinander verbunden. Anders als bei den meisten Multicore-Prozessoren fehlt ein geteilter Cache zwischen den Kernen, dafür gibt es, im Gegensatz zum SCC, Hardware-seitige Cache-Kohärenz. Bis zu acht GDDR-5-Speicher-Controller verbinden den Speicher über je zwei Kanäle mit dem Ringbus (Abbildung 1), an dem auch das PCIe-Interface hängt.

Abbildung 1: Ein Ringbus verbindet die Kerne untereinander, ein weiterer bindet sie an das PCIe-Interface.

Abbildung 1: Ein Ringbus verbindet die Kerne untereinander, ein weiterer bindet sie an das PCIe-Interface.

Auf der Xeon-Phi-Beschleunigerkarte befindet sich neben dem Prozessor und dem Speicher auch Sensorik zum Überwachen von Temperatur und Stromverbrauch. Ein System Management Controller macht diese sowohl dem Xeon-Phi-Prozessor als auch dem Hostsystem zugänglich. Über den Controller lässt sich der Prozessor steuern, um so zum Beispiel einen Neustart der Karte zu erzwingen.

Weil die Karte ansonsten keine weiteren Ein- und Ausgabemöglichkeiten besitzt, müssen alle Daten über die PCIe-Schnittstelle und somit über den PCIe- und System-Management-Bus fließen. Physisch verfügt die Karte ungefähr über die Dimension (und den entsprechenden Kühlkörper) einer Hochleistungsgrafikkarte ohne Monitorausgänge und lässt sich am ehesten mit einer Nvidia-Tesla-Karte vergleichen.

Betriebssystem

Da die Xeon Phi über vollwertige CPU-Kerne und nicht nur über hochoptimierte Spezialrecheneinheiten verfügt, lässt sich auf ihr ein eigenes Betriebssystem betreiben. Intel nutzt diese Möglichkeit, um die Ressourcen der Karte zu verwalten und die Software-Entwicklung zu vereinfachen.

Beim Booten des Hostrechners taucht die Xeon Phi zunächst als gewöhnliches PCIe-Gerät auf, der Prozessor der Karte ist inaktiv. Um die Karte zu aktivieren, lädt der Nutzer nun ein Initrd-Image mit einkompilierter Busybox in ihren Speicher. Dabei hilft ihm der System Management Controller des Hostsystems.

Der eingesetzte Linux-Kernel unterscheidet sich nur wenig von einem gewöhnlichen x86-Kernel, seine Anpassungen sind etwa mit denen eines ARM-Image für eine andere ARM-Plattform vergleichbar. Ist das Image übertragen, wird der Prozessor gestartet und somit das Linux auf der Karte zum ersten Mal gebootet. Als Root-Dateisystem verwendet der Coprozessor entweder direkt die Initrd oder lädt ein Dateisystem vom Hostrechner in den Speicher der Karte oder holt es sich per NFS.

Datenaustausch

Da die Karte nur über die PCIe-Schnittstelle mit der Außenwelt kommuniziert, stellt sich die Frage, wie sie die Kommunikation mit dem Hostrechner und anderen Komponenten umsetzt. Prinzipiell erlaubt der PCIe-Bus, dass das Hostsystem Daten in den Speicher einer Erweiterungskarte schreibt. Umgekehrt dürfen Erweiterungskarten auch in den Speicher des Hostrechners schreiben. Dies wäre aber für den Anwendungsprogrammierer äußerst umständlich, da ein solcher Low-Level-Datentransfer meist nur auf Treiberebene stattfindet.

Aus diesem Grund stellt Intel das Symmetric Communications Interface (SCIF) zur Verfügung, eine Bibliothek, die eine einfach zu nutzende Schnittstelle für den Low-Level-Speichertransfer mitbringt. Es bildet die effizienteste Möglichkeit, Daten zwischen Hostrechner und Xeon Phi auszutauschen, sie kommt auch bei der oben beschriebenen Startmethode zum Übertragen des Root-Dateisystems in den Speicher der Karte zum Einsatz.

Netzwerk via Virtio

Intel hat noch weitere Mechanismen für den Datenaustausch implementiert. Den wichtigsten bindet die Karte in ein Netzwerk ein, da die Xeon-Phi-Plattform keinen eigenen Netzwerkzugang besitzt. Hierfür nutzt Intel unter anderem das Virtio-Framework [5]. Es stellt sowohl im Hostsystem als auch im Betriebssystem der Karte virtuelle Ethernet-Schnittstellen bereit. Statt über ein Kabel wandern die Daten über den PCIe-Bus. Linux als Host-Betriebssystem bindet dann in der bekannten Manier die virtuelle Ethernet-Schnittstelle an eine physische Schnittstelle und integriert sie ins lokale Netzwerk (Abbildung 2).

Abbildung 2: Mit Hilfe virtueller Ethernet-Schnittstellen lässt sich die Beschleunigerkarte in das lokale Netzwerk integrieren.

Abbildung 2: Mit Hilfe virtueller Ethernet-Schnittstellen lässt sich die Beschleunigerkarte in das lokale Netzwerk integrieren.

Nach dem gleichen Prinzip hat Intel eine virtuelle serielle Schnittstelle und ein virtuelles Blockgerät implementiert. Erstere soll das Bootlog, Debugmeldungen und ähnliche Statusinformationen an den Hostrechner übertragen. Das Blockgerät ist eigentlich dazu gedacht, dem Linux auf der Karte Auslagerungsspeicher (Swap) zur Verfügung zu stellen. Passt der Entwickler die von Intel gelieferten Initskripte aber entsprechend an, liefert es auch ein Root-Dateisystem und schafft so quasi eine vierte Option zum Starten der Karte.

Übersetzungsproblem

Xeon-Phi-Entwicklern dürften sich vor allem zwei Fragen stellen: Sind besondere Schritte zum Übersetzen des Quelltextes auf der Karte notwendig? Wie lassen sich ihre Ressourcen effizient nutzen?

Laut Intels Marketingaussagen dürfte sich das erste Problem nicht stellen, da die Xeon Phi ja aus x86-Kernen besteht. Die allerdings unterscheiden sich zum Teil signifikant von denen in herkömmlichen x86-Prozessoren. Das betrifft die Vektoreinheiten und die zugehörigen Register. Zudem fehlen den Kernen sämtliche Erweiterungen seit MMX. Somit können sie weder mit MMX-, SSE- oder AVX-Instruktionen umgehen, noch besitzen sie die mit diesen Instruktionssätzen eingeführten Register.

Das ist problematisch, weil sowohl Intel als auch AMD seit Einführung des MMX-Befehlssatzes empfehlen, diesen oder seine Nachfolger für Gleitkommazahlen-Berechnungen zu nutzen und zugleich die Berechnung über eine x87-Einheit nicht mehr unterstützen. Da die Beschleunigerkarte jedoch nur die x87-Befehle versteht, muss der Entwickler beim Übersetzen darauf Rücksicht nehmen.

Das ist einer der Gründe, warum sich etwa eine GNU-Toolchain nicht ohne Weiteres einsetzen lässt. Intel hat zwar sowohl ein Patch für den GNU Assembler als auch für den GNU GCC Compiler entwickelt, um Software für die Xeon-Phi-Karte zu übersetzen. Letzterer fehlt aber leider die Unterstützung für die Vektoreinheit, da hierfür beim Übersetzen weiter reichende Optimierungen notwendig wären. Um auch diese zu verwenden, muss der Entwickler derzeit zu einem proprietären Compiler von Intel greifen [6].

Um die Rechenleistung der Karte voll auszunutzen, stehen mehrere Möglichkeiten offen. Da es sich bei der Karte um ein eigenständiges System mit Linux als Betriebssystem handelt, das lediglich die Ressourcen des Hostrechners zur Ein- und Ausgabe benötigt, lassen sich auf ihr Programme wie auf jedem Rechner ausführen. Ein Programmierer kann also die üblichen Methoden wie etwa Posix-Threads oder Open MP nutzen, um parallelisierte Programme zu schreiben und auszuführen (Abbildung 3).

Abbildung 3: Die Beschleunigerkarte Xeon Phi funktioniert wie ein eigenständiges Linux-System, das allerdings ein paar Kerne mehr an Bord hat, wie dieser Ausschnitt der »htop«-Ausgabe zeigt.

Abbildung 3: Die Beschleunigerkarte Xeon Phi funktioniert wie ein eigenständiges Linux-System, das allerdings ein paar Kerne mehr an Bord hat, wie dieser Ausschnitt der »htop«-Ausgabe zeigt.

Allerdings sollte er dabei beachten, dass die Maschine für die Anzahl der Kerne relativ wenig Hauptspeicher besitzt. So stehen bei einer Karte der 5100er Reihe für jeden Thread im Schnitt 35 MByte Hauptspeicher bereit, auf aktuellen Serversystemen sind es pro Thread hingegen oft mehrere Hundert Megabyte. Wegen der beschränkten Speichergröße ergibt es Sinn, die Xeon Phi als Beschleunigereinheit im Zusammenspiel mit der Hostmaschine oder anderen Rechnern im Netzwerk zu betreiben.

Hierfür stehen mehrere Möglichkeiten bereit. Das angesprochene SCIF hilft dabei, auf komfortable Weise Daten zwischen der Karte und dem Hostrechner auszutauschen. Somit lassen sich bestimmte Teile der Berechnung auf die Xeon Phi auslagern. Noch komfortabler übergibt der Entwickler Berechnungen mit Hilfe des Message Passing Interfaces (MPI). Das ist machbar, weil die Xeon Phi im Netzwerk – grob vereinfacht gesagt – nur als weiterer Rechner mit sehr vielen Kernen auftaucht. Schlussendlich ist auch noch ein Open-CL-Compiler verfügbar, der Berechnungen auf die Karte auslagern kann.

Da es sich bei der Xeon Phi zum Teil um ein eigenständiges System handelt, ist aber auch der umgekehrte Weg gangbar: Arbeit lässt sich von der Karte auf den Hostrechner oder andere Rechner im Netzwerk übertragen. In Abbildung 4 sind die Möglichkeiten der Arbeitsverteilung dargestellt.

Abbildung 4: Da die Xeon-Phi-Karte ein eigenständiges System ist, kann sie Arbeit auch auf andere Rechner im Netzwerk verteilen.

Abbildung 4: Da die Xeon-Phi-Karte ein eigenständiges System ist, kann sie Arbeit auch auf andere Rechner im Netzwerk verteilen.

Xeon Phi versus GPU

Abschließend stellt sich die Frage, welche Daseinsberechtigung die Xeon-Phi-Karte eigentlich hat. Nüchtern betrachtet liefert eine Tesla-Karte der Kepler-Generation von Nvidia für unwesentlich mehr Geld etwa die dreifache Rohleistung in Flops, was die Xeon Phi beim Preis-Leistungs-Verhältnis haushoch unterlegen macht. Das Preisspektrum der Xeon-Phi-Varianten reicht aktuell von ungefähr 1300 Euro bis etwa 3000 Euro [7].

Bei genauerem Hinsehen sprechen aber zwei Punkte für die Karte: Erstens unterstützt sie mit MPI ein Programmiermodell, das bereits an die 20 Jahre auf dem Buckel hat, während Open CL zum Beispiel nur fünf Jahre alt ist. Hier ließe sich argumentieren, dass die Programmierer erfahrener sind und somit einfacher bessere Programme schreiben können. Zweitens verfügt die Xeon Phi nicht nur über hochspezialisierte Recheneinheiten für sehr eingeschränkte Arten von Berechnungen, sie ist durch ihre PC-nahe Architektur auch in der Lage, existierende Software mit deutlich geringeren Anpassungen auszuführen.

Ausblick

Intel hat bereits den Nachfolger der Xeon Phi angekündigt, der zurzeit unter dem Namen Knights Landing firmiert. Die neue Plattform soll um den AVX-512-Instruktionssatz erweitert werden, den wohl künftig auch herkömmliche Prozessoren von Intel mitbringen. AVX 512 soll zudem eine bessere Kompatibilität mit SSE und AVX bieten. Ob dies auch für die Xeon Phi gilt, wird sich erst zeigen müssen.

Weit interessanter ist, dass Intel Knights Landing nicht nur wie bisher als Erweiterungskarte anbieten will, sondern zusätzlich als eigenständige Plattform beziehungsweise als Prozessor. Dies wäre ein erster Schritt weg von einer Speziallösung für Hochleistungsrechner mit einem bestimmten Anwendungsprofil hin zu einer Lösung für allgemeine Server mit hochparallelen Anwendungen, zu denen etwa Webserver zählen.

Komponenten der Xeon-Phi-Technologie könnten so in Zukunft auch in den Desktopbereich einfließen, was den Xeon-Phi-Coprozessor wiederum zu einem Vorboten für die Rechner im Zeitalter von Manycore-Systemen macht.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 4 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Nach oben