Ich möchte einen Xeon Phi

Schon in meinen ersten Computerjahren, so Anfang / Mitte der achtziger faszinierten mich Supercomputer. Diese Rechenpower auf kleinstem Raum, die hochgezüchtete Elektronik, wie bei der Cray die superschnelle ECL Logik. Inzwischen haben Supercomputer viel Sex-Appeal verloren. Einige Tausend bis einige Zehntausend PC’s miteinander koppeln kann jeder, okay es sind keine PC’s, sondern Server aber im Prinzip Standard PC Technik. Anstatt einem kompakten Rechner wie der Cray 1, die man notfalls auch als Couch nutzen konnte, füllen heute Supercomputer ganze Hallen und verbrauchen Megawatt an Strom. Für den Earth-Simulator hat man sogar extra ein Gebäude, samt Kraftwerk nebenan, für die Stromversorgung gebaut.

Trotzdem ist es absolut gesehen ein kleiner Markt, verglichen mit den Zig-Millionen von Servern bei Internet Providern, Webhostern, in Firmen oder gar bei Google und Amazon. spezialisierte Hardware ist weitgehend ausgestorben, selbst Cray produziert seit Mitte der neunziger Jahre Rechner auf Basis von Standardprozessoren. Eigenes Know-How steckt natürlich noch drin und zwar in der Verbindung der Knoten und deren Kommunikation.

Trotzdem scheint dieser Markt so interessant zu sein, dass man Spezialhardware dafür entwickelt. Nvidea und ATI entwickeln eigene Grafikkarten die als GPU’s eingesetzt werden. Rein theoretisch haben die Grafikprozessoren (GPU) eine viel höher Rechenleistung als CPU’s. Einfach weil es derer viel mehr sind. Die Grabbeltischkarten haben schon 64 bis 128 Recheneinheiten, die nun für Supercomputer vorgesehenen von Nvidea und ATI haben 2496 bzw. 2048 Kerne. Der Unterschied zu den für Spiele gedachten Karten ist dann aber schon gegeben. Bei einem Spiel ist es notwendig Szenen zu berechnen. Da reicht die einfache Genauigkeit völlig aus, eventuell sogar nur das Rechnen mit Integerzahlen. Dagegen braucht man bei wissenschaftlichen Berechnungen double precision. Viel größere Umstellungen erforderten die Programme. Zum einen von dem Möglichkeiten der Kerne her sie zu programmieren – es geht ja nicht nur um Berechnungen sondern auch Programmstrukturen. Auch der Speicher musste erheblich vergrößert werden. Für den Einsatz als Grafikkarte sind das zwar nette „nice to have“ Features, doch wird alleine schon wegen der einheitlichen DirectX Schnittstelle. Spiele werden sicher nicht jedes Feature ausnutzen können, aber sich skalieren sie besser mit mehr Kernen als mit komplexeren Programmen.

So gesehen verwundert es dass Nvidea und ATI sich auch auf diesen Markt konzentrieren. Aber sie sind nicht die Einzigen. Auch Intel arbeitet seit 10 Jahren fast nur noch an der Verbesserung der Fließkommaperformance, vor allem aber über spezielle Erweiterungen. Da gab es zuerst MMX, bei der die Fließkommaeinheit mehrere Integerzahlen gleichzeitig manipulierte, dann SSE bei der das zuerst mit mehreren Single Precission Variablen klappte, nun über einige SSE Generationen weiter sind wir bei AVX mit 256 Bit Registern.

Nur: normale Programme nutzen das nicht. Zum einen sind Anwendungen die Fließkommabefehle massiv nutzen bei PC-Programmen dünn gesät, so viel zu Rechnen gibts nicht. Selbst bei Bildbearbeitung kommt man oft mit Integers aus, die üblichen Verdächten beschränken sich meist auf den berühmten „Gaussschen Verwischer“ und das Encodieren von Video. Bei den vielen Servern im Einsatz ist es fast noch wichtiger, dass die Datenrate stimmt. Entweder bei der Übertragung von Daten über das Netz oder von Festplatten. Viel gerechnet wird da nicht. Eine zweite Einschränkung ist, das Programme auf allen Rechnern laufen sollen, auch solchen ohne SSE(x) und auf allen Betriebssystemen (AVX benötigt z.b. Windows 7 oder 8 in der Windows Linie). Kein Hersteller der Welt baut CPU-Befehle ein die nur bei bestimmten Rechnern laufen, weil er sich dann schon denken kann wie viele Supportanfragen er beantworten kann.

Was dem Nutzer wohl mehr nutzt sind viele einfache Kerne oder noch besser mehr Takt. Nun dem letzten sind physikalische Grenzen gesetzt, aber das erste kann man noch steigern. Nun gibt es von Intel für das Hochleistungsrechnen (High-Perfromance Computing) den Xeon Phi – wie eine Grafikkarte auf einer Steckkarte mit eigenem Speicher. Doch es handelt sich um einen Prozessor aus 60 P54C Kernen – P54c, das ist das Pentium Design, das Intel wieder von der NASA zurückgekauft hatte, nachdem sie es vor einigen Jahren mal abtrat. Die NASA wollte daraus strahlengehärtete Prozessoren machen und das war keine schlechte Idee, denn das Pentium Design ist relativ schnörkellos, eine effektive Brücke zwischen x86 Codes und interner RISC Verarbeitung. Er hat eben nur eine FPU und eine ALU. Nicht wie heute mehrere pro Kern. Das vereinfacht die Programmierung und Auslastung und es gibt kein MMX, kein SSE und kein AVX. Trotzdem erreicht ein Xeon Phi (früherer Projektname: Larrabee) eine Spitzenleistung von 1,01 TFlops bei Double Precission.

Die Frage ist: Warum nicht das ganze für den Desktop? Warum muss ich für Erweiterungen zahlen die die CPU verteuern und mir nichts bringen? Ein Xeon Phi hat 5 Milliarden Transistoren bei 60 Kernen, also 80 Millionen pro Kern. Eine ICore I3/I5 also Mittelklasse CPU 497 Millionen Transistoren für 2-4 CPU Kerne, also im besseren Falle 124 Millionen pro CPU. Mir wären mehr einfache CPU Kerne lieber, also 3/6 anstatt mehr Funktionseinheiten die mir nichts nützen. Irgendwie bringt es Intel nicht so richtig hin. Entweder sie sparen am falschen Ende (Atom ohne Umsortierung der Befehle, was ihn drastisch verlangsamt) oder sie bauen was ein, das keiner braucht. Ich würde sogar noch weiter gehen – vielleicht braucht nicht jeder Kern eine GFPU. Vielleicht reicht auch für jeden zweiten eine.

Also Intel – baut eine Billgversion des Xeon Phi, als Desktop Prozessor.

14 thoughts on “Ich möchte einen Xeon Phi

  1. Auch der Speicher musste erheblich vergrößert werden. Für den Einsatz als Grafikkarte sind das zwar nette “nice to have” Features, doch wird alleine schon wegen der einheitlichen DirectX Schnittstelle.

    Ja was wird denn da? – Was ist das Problem bei der Schnittstelle? (Ausser, dass sie Microsoft-spezifisch ist. 😉 )

    Die NASA wollte daraus strahlengehärtete Prozessoren machen und das war keine schlechte Idee,

    Und haben sie es hinbekommen? – Oder wurde das Projekt wegen Geldmangel eingestampft?

    Ansonsten hätte ich auch nichts gegen einen kleinen NumberCruncher, aber irgendwie fallen mir dann doch nicht die richtigen Anwendungen dafür ein. Wetter oder Klimasimulationen sind nicht gerade mein Ding, virtuelle Crashtests auch nicht. Wären noch die Flugbahnen von Satelliten oder Raumsonden unter berücksichtigung aller gravitativen Störgrössen sowie dem Sonnenwind und was da sonst noch zu finden ist. Oder die Probleme der Wärmeentwicklung eines Raumflugkörpers beim Eintritt in eine Atmosphäre. Oder allgemein Reibungsprobleme im Hyperschallbereich. Also angewandte Thermodynamik.
    Was gäbe es noch?

  2. Naja, ich denke der Grund dafür ist recht einfach:

    Die Marketingabteilung weiß selber nie so recht was man denn noch groß entwickeln/anbieten könnte … es gibt nur sehr selten Leute die sowohl technischen Verstand haben als auch das Geschick fürs Marketing; die machen sich normal selbstständig … das Marketing nimmt sich deshalb die Designs der Ingenieure vor und pickt sich die Dinge raus die man eventuell gut verkaufen könnte (statt ihrer eigentlichen Aufgabe nachzukommen und die Entwicklung im Sinne des Kunden/Umsatzes zu lenken) … mit netten Kürzeln wie MMX etc pp, es wurden ja genug genannt …

    Und wenn man Ingenieure mit ihrem Design alleine lässt gibts das gleiche was man auch bei Software feststellen kann: Featureitis (und ich sage das als Ingenieur, wenn man sich später so anschaut was man da selber so vor sich hin entwickelt, dann wurds immer nur größer und komplizierter … man sieht dann nachher immer an der treibersoftware wie wenig die von der verbauten hardware nutzt, weils der Kunde ja gar ned braucht 😛 …

    Gibt kaum ein Produkt das von Menschen entwickelt wurde das nicht mit Features kommt die niemand _wirklich_ braucht … und wenns nicht so wäre säßen wir heute noch in einer Höhle und wären super zufrieden mit unserem sehr scharfen feuersteinmesser 🙂

    Manchmal ist halt doch ein neues Feature dabei das wirklich was taugt … wer weiß das schon vorher 🙂

  3. Die Schnittstelle ist einheitlich. Es gibt keine eigene Schnittstelle für Grafikkarten mit komplexen Programmen und welche für einfache …. Fürs Spielen reichen einfache Recheneinheiten mit kurzen Befehlssequenzen aus. Wenn man die GPU als Numbercruncher benutzen will ist das zu wenig. Dann braucht man auch eigene Treiber (CUDA etc.)

    Was die NASA angeht – k.a. vielleicht war es ihnen zu aufwendig oder sie haben sich auf den verfügbaren Chips wie dem RAD750 ausgeruht.

  4. Moin,

    ich hab durchaus viel zu rechnen, da Optimierung von industriellen Prozessen durch maschinelles Lernen in den letzten 7 Jahren zu meinen Hauptthemen gehörte. Aber:

    CUDA und Graphikprozessoren bringen mich nicht weiter, da deren Performance völlig zusammenbricht, wenn der Algorithmus nicht sequentiell sondern zufällig auf den Speicher zugreift. Zudem haben die Karten viel zu wenig RAM.

    Auch der Xeon Phi krankt an zu wenig RAM. Nur 8GB bietet ein Phi, und da die CPUs Pentium basiert sind, kann jeder Core nur auf maximal 4GB zugreifen. Mein Hauptserver zu hause hat 32GB und selbst das wird manchmal eng.

    Wenn ich mir einen Supercomputer für untern Schreibtisch wünschen könnte so wären mehr Memory-Lanes das wichtigste Feature. Wenn viele Cores aufs RAM zugreifen ist der Speicherbus der Flaschenhals.

    ciao,Michael

  5. Hm… jetzt bin ich gerade nicht auf dem laufenden, aber ist es nicht so, dass bei Parallelrechnern nicht jede CPU ihren eigenen Speicherbereich besitzt, in dem sie walten kann, wie es das Programm erfordert? – Und nur zu Zwecken wie Datensynchronisation oder austausch greifen die CPUs auf einen gemeinsamen Speicherbereich zu? – Falls das zu lang wird, reicht mir auch der Hinweis auf ein aktuelles Fachbuch zum Thema. Meine vorhandenen könnten da sehr wahrscheinlich inzwischen veraltet sein… 🙁

  6. Nur daß in der CPU mehrere Prozessorkerne sitzen, die alle über einen gemeinsamen Bus an den RAM angebunden sind. Durch den Prozessorcache wird dieses Problem zwar entschärft, aber nicht völlig beseitigt. Und wenn dann noch eine GPU mit auf dem Chip sitzt, hängt die auch noch an diesem Bus. Das ist wie ein großes Gedränge an der Tür.

  7. Zumindest bei den GPU (ich weiss nicht obs beim xeon phi auch so ist) sind Caches eher unüblich, weil die Aufgabe ja früher war Szenen neu zu berechnen, dafür musste das gesamte Ram je nach Geschwindigkeit bis zu 100-200 mal mit neuen Texturen / Bildern pro Sekunde gefüllt werden und Caches hätten nicht viel gebracht. Stattdessen realtiv wenig, aber sehr schnelles RAM.

    Beim nicht sequentiellen Zugriff oder einem der über die Cache Grenze rausgeht wirds auch beim PC langsamer. Man kann das einfach simulieren, einfach mal in zwei Schelfen 1 Millairde Additionen eines arrays machen:
    Fall 1: 1 Array von 1000 Elementen 1000000 mal durchrechnen (passt in den Cahce)
    Fall 2 ein Array mit 100.000.000 Elementen 10 mal durchrechnen (passt nicht rein)
    Fall 2 braucht deutlich länger als Fall 1

  8. Moin Hans,

    > jetzt bin ich gerade nicht auf dem laufenden, aber ist es nicht so, dass bei Parallelrechnern nicht jede CPU ihren eigenen Speicherbereich besitzt

    Bei der NUMA (Non-Unified-Modelling-Architecture) von AMD hat jeder Chip seine eigene zwei Memory-Lanes. Bei einem Dual Quadcore gibt es also fuer jeweils 4 Cores normal langsamen Speicher, und fuer die andern 4 noch langsameren Speicher. Linux kann damit umgehen, macht aber die Entwickler und Admins damit nicht glücklich. Stichwort: „Swap Insanity“

    Bei Graphikkarten ist die Speicherbreite erheblich größer als bei CPUs, d.h. in einem Takt werden mehr Bits übertragen, und zudem wird automatisch im nächsten Takt der darauf folgende Speicher übertragen. Wenn ich aber zufällig auf das RAM zugreife, braucht jeder Zugriff 100ns.

    Intel bietet schweineteuere CPUs mit 3 anstatt 2 Memory-Lanes, d.h. ich muss immer 3 Speicherbänke gleich bestücken. Für die 50% mehr Leistung kosten CPUs und Mainboards aber auch 500% mehr.

    Mein Wunsch wäre eine CPU mit 8, 16 oder 32 Memory-Lanes. Nachteil wäre, dass CPUs dann fest auf die Hauptplatine verlötet sind.

    ciao,Michael

  9. Die andere Möglichkeit wäre, statt immer mehr Prozessorkerne in einen Chip zu packen, den RAM mit draufzusetzen. Dann hätte jeder Prozessorkern seinen eigenen RAM, und muß sich die Geschwindigkeit nicht mit anderen teilen. Das dürfte wesentlich mehr bringen, als die Integriegung der GPU.

  10. Ah okay, jetzt bin ich wieder etwas auf dem laufenden. Was mir da durch den Kopf ging, war so eine Kombination aus symmetrischen und asymmetrischen Multiprozessorsystem, wobei der asymmetische Teil z.B. das Betriebssystem fährt, und die rechenintensiven Anwendungen im symmetrischen Teil laufen. Und wie Elendsoft schon andeutete, die einzelnen Prozessoren (Kerne) besizzen alle einen eigenen RAM-Bereich, der auch Schaltungstechnisch nur von einer CPU benutzt werden kann. Dazu gibt es einen gemeinsamen Speicher, auf den alle zugreifen können, wobei da noch ein Memorycontroller dazwischen sitzt, der den Zugriff steuert. Das wäre dann der NUMA-Teil, wobei die Abkürzung in der Wikipedia mit Non-Uniform Memory Access ausgeschriben wird. Aber das ist ja genau dass, was Michael K. die Probleme bereitet…

    Und den Rechentest, den Bernd vorgeschlagen hat, den werde ich nach liefern, denn da bin ich ja mal gespannt, was dabei so raus kommt.

  11. So, den Rechentest hab ich jetzt auch durchgeführt, allerdings ist dass Ergebnis jetzt auch nicht soo berauschend, weil man nämlich nicht sehen kann, wie es zustande gekommen ist. Zwar braucht die zweite Schleife wesentlich länger als die erste, aber das lässt sich auch schon daran erkennen, dass sie einhundert tausend mal mehr Elemente bearbeitet als die Erste. Um da mehr über die Prozessorauslastung heraus zu finden, müsste man tiefer in die Systemprogrammierung einsteigen, oder mit einem Profiler dran gehen. Ersteres ist mir dafür zuviel aufwand und beim letzteren weis ich im Augenblick nicht, ob ich so ein Programm habe. (Falls ja, ist immer noch die Frage, wie man damit umgeht… :-/ )

    Hier jedenfalls mal die ausgabe meines Programms:

    C:\Daten\Watcom>rechnzeit2
    Arrays initialisieren…fertig.
    Erste Berechnung…fertig.
    Rechenzeit: 0, bzw 0.000000 millisekunden
    Zweite Berechnung…fertig.
    Rechenzeit: 1, bzw 1810.000000 millisekunden
    Gesamte Rechenzeit: 1810.000000 millisekunden

    C:\Daten\Watcom>

    Und falles es noch jemanden interessiert, hier auch das Programm selbst, von Bernd’s Smarteditor nach HTML konvertiert:

    Version:0.9
    StartHTML:0000000105
    EndHTML:0000013728
    StartFragment:0000001100
    EndFragment:0000013712

    Source Datei : rechnzeit2.c generiert von Smart Editor

    /* Datei: rechnzeit2.c

    Überprüfung von Rechenzeit
    Aus einem Blog Kommentar von Bernd Leitenberger:
    "Beim nicht sequentiellen Zugriff oder einem der über die Cache Grenze
    rausgeht wirds auch beim PC langsamer. Man kann das einfach simulieren,
    einfach mal in zwei Schelfen 1 Millairde Additionen eines arrays machen:
    Fall 1: 1 Array von 1000 Elementen 1000000 mal durchrechnen (passt in den
    Cahce)
    Fall 2: ein Array mit 100.000.000 Elementen 10 mal durchrechnen (passt
    nicht rein)
    Fall 2 braucht deutlich länger als Fall 1"

    Das werden wir jetzt mit Zahlen belegen.

    Version 0.1
    */

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>

    main()
    { /* . . . */
    int A1[1000];
    static int A2[100000000];
    int i;
    clock_t StartTime1, StartTime2, EndTime1, EndTime2;
    double dt1, dt2;

    printf ("Arrays initialisieren...");
    for (i=0; i<1000; i )
    A1[i]=0, A2[i]=0;
    for ( ; i<100000000; i )
    A2[i]=0;
    printf ("fertig.\n");

    printf ("Erste Berechnung...");

    StartTime1 = clock();
    for (i=0; i<1000; i )
    A1[i]=A1[i] 99;
    EndTime1 = clock();
    printf ("fertig.\n");
    dt1 = difftime( EndTime1, StartTime1 );
    printf( "Rechenzeit: %lu, bzw lf sekunden\n",
    (EndTime1 - StartTime1) / CLOCKS_PER_SEC, dt1);

    printf ("Zweite Berechnung...");
    StartTime2 = clock();
    for ( i=0; i<100000000; i )
    A2[i]=A2[i] 101;
    EndTime2 = clock();
    printf ("fertig.\n");
    dt2 = difftime( EndTime2, StartTime2 );
    printf( "Rechenzeit: %lu, bzw lf sekunden\n",
    (EndTime2 - StartTime2) / CLOCKS_PER_SEC, dt2);

    printf ("Gesamte Rechenzeit: %lf sekunden\n", dt1 dt2);

    return 0;
    } /* von main */

  12. hm… so wie es aussieht, hätte ich mir die Formatierumg auch sparen können…
    Oder vielleicht als Zitat, also mit <blockquote> Zitat </blockquote> was von der Forensoftware ja unterstützt wird, wie ich jetzt heraus gefunden habe. Aber der Hit ist das auch nicht.

  13. Einen Bereich gibt es noch, in dem man nie genug Fließkommarechenleistung haben kann: Musik. Audio im Rechner wird üblicherweise in Single Precision Float gerechnet, teilweise auch in Double Precision. Deswegen haben Musiker üblicherweise auch recht aktuelle Rechner, was wiederum dazu führt, dass man problemlos als Mindestanforderungen Windows 7 und eine CPU mit SSE3 verlangen kann.

    P.S.: Den Kommentar hatte ich schon mal geschrieben, aber irgendwie ist er im Nirvana verschwunden.

Schreibe einen Kommentar zu Elendsoft Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.