Der PC in Zwanzig Jahren
Lange Zeit war es so, dass wenn man etwas über den PC in Zwanzig Jahren wissen wollte, man nur die Architektur der aktuellen Superrechner ansehen musste. Das passte auch in der Vergangenheit relativ gut. Hier einige Beispiele. Als PC-Gegenstück habe ich die x86-Architektur genommen. Es kann sein dass das eine oder andere Feature woanders zuerst erschien, aber die Architektur steckt eben in den aktuellen PCs:
- Pipelines: Als Weg die Befehlsverarbeitung zu beschleunigen, indem man die einzelnen Stufen parallelisiert. Dies wurde schon 1961 in der IBM 7030 Stretch eingeführt. 1982, also ziemlich genau 20 Jahre später, führte der 80286 eine Pipeline ein.
- Caches: Als Zwischenspeicher um die Auswirkungen der den langsamen Speicher zu umgehen. Eingeführt 1969 in einigen Modellen der IBM 360 Reihe. Die erste kommerzielle Implementation war in der IBM 360/85. In der x86 Reihe finden wir die Unterstützung des externen Caches 1985 bei der 386-CPU. Diese konnte noch ohne Cache auskommen. In den Prozessor integriert war der Cache 1989 in die 486-CPU. Auch hier: 20 Jahre zwischen IBM360 und 486.
- Befehlsbuffer: Älter als Caches sind Instruktionsbuffer. Sie bestehen im einfachsten Falle aus der Möglichkeit nur einige Worte im voraus zu lesen (Read Ahead). Das beherrschte schon die IBM 7030 Stretch. Die gleichen rudimentären Fähigkeiten hatte der 8086 mit seiner Instruction-Queue. Vollwertige Buffer, die jeweils rund um die aktuelle Position abpuffern und auch Sprünge vorwärts/rückwärts erlauben, führte die CDC 6600 1965 ein. In der x86 Reihe findet man ein Gegenstück dafür relativ spät 1989 beim 80486 mit seinem 32 Byte großen Instruction Buffer.
- Multiskalar: Mehrere Recheneinheiten, die man parallel mit Daten versorgen kann, hatte ebenfalls zum ersten Mal die CDC 6600 im Jahre 1965. im PC Bereich zog das Feature sehr viel später ein, vielleicht weil der typische PC damals noch unter DOs lief und da ist nur ein Prozess aktiv. Erst der Pentium war 1993 multisklar
- Fließkommarecheneinheiten: Supercomputer wurden für naturwissenschaftliche Anwendungen genutzt, da war wichtig dass man mit beliebigen Zahlen (auch sehr großen oder kleinen) rechnen konnte. Die CDC 6600 hatte erstmals dezidierte Fließkommarechenoperationen im Unterschied zu den vorher üblichen Berechnungen mit Ganzzahlen (die reichen auch für Kommabeträge z.B. bei den Finanzen, man muss nur für die Ausgabe das Komma immer um ein paar Stellen verschieben). Bei der x86 Architektur gab es das als Coprozessor 8087 erstmals 1983. Er war lange Zeit viel teurer als der Prozessor selbst. In den Prozessor zog es 1989 ein.
- Vektoroperationen: Erstmals mit der Cray 1 1976 eingeführt. Sie erlauben das Berechnen vieler werte ohne Zeitverzug. Im PC Bereich gab es die ersten Ansätze mit MMX beim Pentium 1995, doch beschränkt auf nur 8 oder 16 Bit Integereinheiten. Vergleichbar mit der Cray von 1976 war SSE2 des Pentium 4 im Jahre 2001. Allerdings arbeiten beide Architekturen unterschiedlich. Die Cray hatten Vektorregister die jeweils 64 Zahlen aufnahmen, die hintereinander durch die Rechenwerke geschleust wurden. AVX als die neueste Erweiterung bei der x86 Architektur hat 256 Bit breite Register die auch 4 Fließkommazahlen aufnehmen können und bei denen eine Operation auf alle 4 Zahlen angewandt wird. Vektoroperationen machen nur bei bestimmten Anwendungen Sinn. Vielleicht hinkt daher hier der PC-Bereich etwas hinterher.
Nicht nur in der Architektur, sondern auch in der Geschwindigkeit sind 20 Jahre ein guter Vergleichsmaßstab. So schnele wie eine CDC 600 war ungefähr ein 80836 – zwischen beiden liegen 20 Jahre. Die Pentium CPU erreichte 1995 die Performance der Cray 1. Seitdem ist es durch den langsameren Anstieg in den Achtzigern und Neunzigern bei den Supercomputern sogar besser geworden. Die letzte Cray erreichte 16 GFLOPS, das war im Jahre 1993, ein iCore 5 mit 4 Kernen und 3 GHz Takt erreicht bei Vektoroperationen 48 GFLOPS, wenn es um eine besonders sichtige Operation „Fused Add/Multiply“ geht, sogar 96 GFLOPS.
So gesehen müssen wir uns nur Supercomputer von heute anschauen, um zu wissen was uns in wenigen Jahrzehnten bevorsteht. Die bestehen heute aus Zehntausenden normaler Prozessoren mit Hundertausenden von Kernen, inzwischen auch durch Grafikkartenbeschleunigern ergänzt. Ich muss sagen, das ich an der Vision für die Zukunft in 20 Jahren bisher meine Zweifel hatte. Sicher wir haben die Gamer, die geben heute schon 100 bis 1000 Euro für eine Grafikkarte aus, deren leistungsfähige mehrere Tausend einzelne Recheneinheiten haben. Es gibt also schon heute eine Parallele zu den Supercomputern mit vielen Kernen. Was die Gamer aber gerne vergessen: Nur in 20% aller PC steckt eine Grafikkarte und ich würde wetten die Zahl der PC’s bei denen es eine High-End Grafikkarte ist beträgt nur wenige Prozent. Deiser Prozentsatz ist seit über einem Jahrzehnt konstant. Es erschien mir unverständlich warum dieser seit Jahren konstante Anteil nun plötzlich so wachsen sollte. Zudem sieht man es an der Prozessorentwicklung. Als Intel 2005 die Mehrkernprozessoren einführte, kündigte die Firma an, dass es nun alle zwei Jahre doppelt so viele Kerne geben würde. Seit 2005 gab es 5 Zweijahreszyklen so sollte man 2^5 x 2 Kerne = 64 Kerne heute haben. Stattdessen beträgt im Desktopsegment die Maximalzahl nur 6 Kerne. Lange zeit waren es nur 2 bis 4.
Doch für 2017 Jahre sind 12 oder 20 Kerne angekündigt und zwar für die Desktop (icore) Serie – Server haben heute schon bis zu 36 Kerne pro Chip. Dahinter steckt Intels Einsicht, dass sie die Core Mikroarchitektur kaum noch steigern können. Sie wurde 2006 eingeführt. Seitdem wurde sie nur marginal verbessert. Man bekam mehr Leistung vor allem indem man durch die Stromsparmechanismen wieder den Takt hochtreiben konnte. Doch Broadwell oder Skylake erreichen nicht die hohen Takte von Haswell, stattdessen gibt es bei Broadwell erst mal 6 Kerne in der iCore Serie und bei Skylake sind noch mehr angekündigt. Man betreibt seit einigen Jahren auch viel mehr Aufwand um die integrierte Grafikeinheiten aufzurüsten, die haben tatsächlich in jeder Genration doppelt so viele Recheneinheiten bekommen.
Es gibt natürlich einen Grund für die Dominanz von 2-4 Kernen. In der aktuellen ct‘ mit einem Prozessorratgeber lese ich (mal) wieder (zum wiederholten Male) von den faulen Programmierern die es nicht fertig bringen alle Kerne auszulasten. Ja so kann man schrieben wenn man als Journalist selbst nicht programmiert. Das Problem sitzt aber vor dem Monitor, nicht in der CPU. Ein Prozessor wartet bei einem PC, aber auch Tablett oder Smartphone die meiste Zeit auf die Aktion mit dem Anwender. Die ist nicht vorhersehbar, und meist nicht parallelisierbar. Wer einen Text eintippt der wird nur einen Prozessor beschäftigen. der muss dann die Buchstaben als Grafik ausgeben. Sicher es gibt etwas nebenher zu tun, wie Rechtschreibung prüfen oder die Seiten formatieren, doch das beschäftigt auch heute kaum einen Prozessor. Lediglich der Duden Korrektor kann viel Zeit beanspruchen, vor allem wenn man wie ich Bücher schreibt und er beim Laden alles durchkorrigiert. Doch gerade der ist so geschrieben dass er nur einen Thread benutzt (ein Negativbeispiel). Wenn man surft kann man eine Seite weitestgehend nur linear kodieren, das liegt an der Struktur von HTML, das keine festen Layouts kennt sondern sich an Bildschrimgröße und Skalierung anpasst. Aus demselben Grund ist JavaScript nur für einen Thread ausgerichtet, es macht wenig Sinn verschiedene dinge gleichzeitig zu ändern, wenn das Layout von Anfang an nicht feststeht sondern erst wenn alle Elemente bearbeitet sind, erstellt werden kann. Natürlich kann ein Browser im Hintergrund Seiten laden und aufbereiten, doch das ist mehr eine Notlösung, denn der Anwender wird nur einem von vielen Links folgen.
Übrig für Mehrkerncpus bleiben eine Handvoll von Vorzeigeanwendungen, die schon vom Design her multitaskingfähig sind wie Grafik (jeder Bildpunkt kann einzeln bearbeitet werden) Video (ein Bild wird in viele kleine 8×8 Pxielblöcke zerteilt die alle gleich verarbeitet werden) oder Spiele (jedes Objekt kann einzeln gerendert und eingefärbt werden).
Seit einigen Monaten habe ich diese Haltung „Es gibt keinen Grund noch mehr Kerne pro CPU einzubauen“ geändert. Der Grund ist, das es in 20 Jahren meiner Ansicht wohl nur noch wenige Pcs geben wird, wie sie heute da sind. Nein ich meine nicht, dass sie dann von Tabletts oder Smartphones ersetzt sind. Sie sind nur Geräte mit anderer Eingabe Methode, aber haben das technisch genauso das gleiche wie ein PC macht. Nein ich denke in der Zukunft wird viel mehr Power in den Geräten stecken, die heute gerade auf den Markt kommen. Das sind die Virtual Reality Brillen. Die funktionieren heute noch als Krückenlösung mit Smartphones als Display. Im Prinzip kann man damit das heute umsetzen, was wir vor 20 Jahren in Star Trek als „Holodeck“ gesehen haben – man kann sich in einer virtuellen Realität bewegen. Zusammen mit einem Handschuh, der auch Feedback gibt, wenn man was anfasst kann das sehr real sein. Das kann man für Spiele nutzen, aber auch um einen Spaziergang durch das antike Rom zu machen oder Pairs zu besuchen ohne hinzufliegen. Virtual reality ist nicht neu. Es gibt es schon seit Jahrzehnten. Doch man brauchte entweder umgebaute Räume wo die Bilder an die wand projiziert werden oder wenn es Brillen gab, so waren sie niedrigauflösend und grob. Mit mehr Computerpowert kann man dies wirklich lebensecht gestalten. Und es ist eine Aufgabe, die hervorragend parallelisierbar ist.
Das zweite ist die Erprobung von Fahrzeugen im Straßenverkehr. Da gibt es jetzt die ersten Projekte. Die Aufgabe ist ja nicht trivial. Man muss in Echtzeit die Bilder von Kameras, aber auch anderer Sensoren analysieren, Straßengrenzen, Abstände, Menschen und andere Objekte feststellen und das Fahrverhalten anpassen. Der Computer hat es hier schwerer, als der Mensch. Denn wir nehmen nie die ganze Szene wahr. Wir konzentrieren und auf einen kleinen Punkt in der Mitte des Blickfeldes. der kann wechseln, wenn wir in der Peripherie Veränderungen wahrnehmen oder durch Geräusche unserer Aufmerksamkeit abgelenkt wird, aber wir nehmen den größten Teil des Gesichtsfeldes nicht aktiv wahr. Jeder kennt das: Fußgänger nimmt man erst wahr wenn sie auf die Straße gehen, auch wenn man sie schon vorher sieht, wenn ihr Kopf über die parkenden Autos ragt. Hier könnte ein computerbasiertes System deutlich sicherer sein. Auch diese Aufgabe braucht viel Rechenpower.
In solchen Geräten könnten in Zukunft die meisten der leistungsstarken Prozessoren stecken. PC’s würde es auch in der Zukunft geben, vielleicht nicht mehr als Desktop sondern angeschlossen an eine solche Brille. Aber die stärksten Prozessorkerne mit vielen Untereinheiten werden nicht mehr im klassischen PC stecken.
Es gibt einige Softwares, da wird ganz bewusst verzichtet mehrere CPUs zu verwenden.
Ich habe Danvinci Resolve, eine Grading Software für Video. Die benutz höchstens zwei CPUs und Gpu, obwohl ich 24 im System hätte, die grafik karte ist leider nicht die neuste. Das Rendern kann man doch ganz leicht parallelisieren, jeder Core kümmert sich um ein Bild oder ein Bildbereich, wieso, das nicht gemacht wird, frage ich mich.
Bei der Red grading software wurde dues sogar bewusst weggelassen, damit der User die teuren Red Rocket Karte kaufen soll.
@Bernd Es gibt keine Broadwell Core i7 Prozessoren mit mehr als 4 Kernen und auch bei Skylake ist bisher das maximum 4 Kerne mit 8 Threads. Beide Architekturen sind übrigens bereits seit Herbst released.
Das immer mehr Kerne mit heutiger Software nicht mehr so viel bringen, hat ja auch Intel eingesehen. Deshalb bringen sie ja gerade die Consumer Prozessoren nur mit max. 4 Kernen raus. Die restlichen Kerne würden die meiste Zeit nur Storm verschwenden.
Was du aber denke ich in deiner Zukunftsanalyse vergessen hast, ist das immer mehr Funktionen die früher in Software passiert sind heutzutage in Hardware passieren. Beispiel H.264, HEVC de/encoding, AES verschlüsselung mit AES-NI, Zufallszahlengenerierung mit RdRand. Bei Mobilarchitekturen wie der Ax Serie von Apple oder der ARM Prozessoren wäre ohne Hardwareunterstützung durch verschiedenste Funktionseinheiten nie die Energieeffizienz und Leistung mit der langsamen ARM Architektur erreichbar. Diese sind in genau dem Bereich stark von dem du sagst er sei nicht parallelisierbar. Textverarbeitung und Websurfen. Moderne Browserengines wie V8 von Google optimieren Javascript mit Just-in-time-Kompilierung auch auf mehrere Threads. Klar dies sind alles Dinge die der der Facetube-Googleklicker von heute braucht.
Hier sehe ich Chancen durch den Kauf von Altera durch Intel. Altera war einer der beiden größten FPGA Hersteller. Intel möchte in der nächsten Prozessorengeneration FPGA Chips direkt in den Prozessor integrieren.
Dies würde es ermöglichen auch Spezialalgorithmen individuell in Logik „Hardware“ zu gießen und Software gesteuert wieder zu ändern. Da sehe ich noch enormes Performancepotential.
Und ja, auch die Software ist noch optimierbar, natürlich ist es leichter singlethread Software zu schreiben. Aber es gibt heute auch schon eine ganze Menge Frameworks die einem die Parallelisierung von Software vereinfachen, wenn nicht sogar abnehmen (Grand Central Dispatch). Ansonsten gibt es außerdem auch noch Programmiersprachen die mehr auf Multiprozessoroptimierung ausgelegt sind. (Erlang)
Aber da müssen sich die Programmierer (ich bin selbst einer davon) schon an die eigene Nase fassen. Unter keiner Spezies ist die Verbreitung von „Never Touch a running System“, „Das ham wa doch schon immer so gemacht“ und „Da könnte ja jeder kommen!“ so stark wie unter Programmierern. Außer vielleicht Beamten 😉
@Thierry Es stimmt nicht was du sagst. RED nutzt mind 8 Threads und versucht sogar die Berechnung auf die Grafikkarte auszulagern.
Der Xeon Phi paßt mit bis zu 61 Pentium-Kernen zu der theoretischen Vorhersage mit 64 Kernen. Bei einem Preis für den man schon mehrere Komplett-PCs gekommt, beschränkt sich der Einsatz aber auf spezielle Hochleistungs-Rechner.
@Andy
Ich habe die Red Software seit längerem nicht benutzt. Auf dem Mac habe ich Menumeters installiert, da ich die Cpu nutzung sehen. Ausser bei Lightwave kam uch nie auf 100%. Es istcein Mac Pro mit zweimal 6 kern xeon, die jeweils hyperthrwding haben, so dass nach 24 kerne aussieht.
@Andy, ich spreche von der Zukunft. Wenn von 2017 die Rede ist sollte das eigentlich klar sein.Mag sein, dass Intel seine Roadmap ändert. Irgendwo gabs auch mal einen Testbericht von einem icore i7 mit 6 Kernen.
Ja man kann heute schon viel in Software gießen. Aber ich sehe das anders. Wenn viele es brauchen wandert es in Mainstream Hardware als Funktionen des Chipsatzes oder der CPU wie das Kodieren und dekodieren von Videos.
Spezialfunktionen braucht nicht jeder und davon gibt es enorm viele. Ob dann die CPUS noch einen Bereich haben wo der Benutzer Beschleunigung für die Software einbauen kann die er braucht kann ich nicht sagen, aber ich denke eher nicht.
Die Möglichkeit Software in Hardware zu gießen gabs schon immer, früher musste man eben Eproms brennen. Es ist heute einfacher, aber die Benutzer wollen sich auch nicht so mit Technik auseianndersetzen. Für einen Mainstream Markt ist es wohl noch zu komplex.
@Bernd genau deshalb meine Aussage:
1. Was der Mainstream braucht wandert in ASIC-Hardware
2. Spezialanwendungen die trotzdem schnell sein sollen in FPGA-Hardware auf CPU. Die natürlich dynamisch und automatisch da reingeladen werden der Benutzer sollte sich um nichts kümmern müssen.
3. Hoch parallelisierbare Anwendungen auf Grafikkarte GPU
4. Steuerung, Kleinkram und Legacy Software macht CPU
HTML auf den meisten Webseiten eignet sich sehr wohl um parallel verarbeitet zu werden. Die aktuelle Seite hat mehr als 20 .js Dateien geladen die alle gleichzeitig geladen, geparst und validiert werden können. Dazu kommen doch die ganzen Images. Jedes Bild kann in einen eigenen Thread geladen werden. Auch wenn es am ende nur ein paar ms ausmacht und er aufwand eventuell sehr hoch ist, so ist es doch möglich.
Naja, das Aufsetzen und Beenden eines Threads braucht eine gewisse Zeit, so dass es sich für kurze Ufgaben nicht lohnt. Die Aufgabe sollte schon einige sekunden brauchen, damit es sich lohnt.
Moderne Intel-CPUs haben Dutzende von Kernen. Nur sind die meisten davon eben keine x86-Kerne, sondern Graphik-Kerne. Aktuelle i7 haben wohl 24 „execution units“ für die Graphik, aber nur vier x86-Kerne.
Diese Graphik-Kerne besitzen in Summe die Vielfache Leistung der x86-Kerne, und da sie auf Single-Thread-Optimierungen (out-of-order execution usw.) verzichten und mit geringerem Takt laufen. Zudem haben sie auch eine vielfach höhere Effizienz (Performace pro Watt). Programmierer, denen die x86-Leistung nicht reicht, kommen daher nicht umhin, die Graphik-Kerne zu benutzen. Deren Einsatz ist schon lange nicht mehr auf 3D-Graphik oder Numerik beschränkt – auch zahlreiche andere Compute-Aufgaben können auf der „Graphikkarte“ laufen, zum Beispiel auch Crypto-Algorithmen. Bei den aktuellen Supercomputern kommt praktisch die komplette Linpack-Leistung (= theoretischer Leistungs-Spitzenwert) von den GPUs, nicht mehr von den CPUs.
Die Umkehrung des Vorgenannten bedeutet: Wer heute Code parallelisiert, parallelisiert i.d.R. für die GPU, nicht für die CPU! Ergo wird es im Desktop-Bereich auch künftig so gut wie keine Anwendungen geben, die von vielen x86-Kernen profitieren können. Von daher wird die Zahl der GPU-Kerne weiter steigen – wie andere schon schreiben z.B. für immer aufwendigere 3D-Graphik bis hin zur virtuellen Realität – die Zahl der CPU-Kerne aber stagnieren.
Fazit: Die CPU der Zukunft besteht aus einer großen Zahl von vergleichsweise einfach gestrickten „Rechenwerken“, die zusammen für hohe Multi-Thread-Performance und hohe Effizienz stehen. Diesem zur Seite steht eine kleine Zahl von Kernen, die auf optimale Single-Thread-Performance getrimmt sind.
Mir fällt jetzt auch kein Grund ein, warum man das anders implementieren sollte.
Nur als Anregung für alle mit sich langweilenden CPU/GPU Kernen: Ich habe mir BOINC (http://boinc.berkeley.edu/) installiert und lasse Teile von verschiedenen, wissenschaftlichen Projekten mit der Software berechnen.
Das ganze funktioniert als Bildschirmschoner, so kommt das einen nie beim Arbeiten in die Quere. Es ist eine gute Möglichkeit die ganze tolle Technik die wir mittlerweile in jedem stinknormalen PC haben, sinnvoll auszulasten.