Sind neue CPUs schneller?

Posted on Fr 10 Januar 2020 in Computer & Electronics

Moore's Law – so heißt eine alte Gesetzmäßigkeit, nach der sich die Komplexität handelsüblicher ICs so alle 12-24 Monate verdoppelt. Zwar hat Gordon Moore das nie auf die Geschwindigkeit von Prozessoren bezogen, aber im Netz wird es immer wieder so ausgelegt. Das scheint gut zum atemberaubenden Tempo zu passen, mit dem unsere Computer leistungsfähiger werden.

Und wer kennt das nicht? Kaum hat man sich einen neuen Computer gekauft schießen an allen Ecken neuere, tollere, schnellere Geräte wie Pilze aus dem Boden und man möchte den Kauf bereuen – hätte man nur noch 3 Monate gewartet... Aber das bringt nichts, denn das Gesetz scheint immer zu gelten, egal wie lang man wartet. Am besten liest man nach dem Kauf erstmal ein Jahr lang keine Computerzeitschriften oder online Berichte. Das verdirbt einem nur den Spaß.

Aber ist das wirklich so?

Wenn ich mal alle Marketingversprechen ignoriere kann ich mich ganz nüchtern fragen, wieviel besser ein neuer Computer gegenüber dem betagten Modell, das ich mein Eigen nenne, wirklich ist. Ich bin niemand, der jährlich seinen Computer erneuert. Meine Laptops waren schon immer Thinkpads und ich kaufe gewöhnlich das zweit- bis drittbeste Modell aus der Serie meiner Wahl – das scheint mir der Sweet-Spot bezüglich Preis-Leistung zu sein. Und dann rüste ich den neuen mit soviel RAM auf wie er handhaben kann und verpasse ihm eine schöne große Festplatte, damit ich nicht überlegen muss, welche Daten auf's Laptop kommen. Auf diese Weise halten meine Laptops dann auch lang. Der aktuelle (Thinkpad T440s) ist inzwischen sechs Jahre alt und läuft nach wie vor wie geschmiert.

Mit anderen Worten – die CPU scheint nicht zu langsam zu sein für meine heutigen Bedürfnisse. Überhaupt habe ich in der Vergangenheit nie ein Laptop in Rente geschickt, weil die CPU-Leistung zu knapp erschien. Eher waren es Dinge wie kein USB-3, kein GB-Ethernet, veraltetes Wifi, Speicheraufrüstungsgrenze erreicht, totes Display oder sowas. Auch ist das neue Laptop, das ich in der Firma habe, subjektiv nicht schneller, als der fast 10 Jahre alte Desktop Rechner ich zuvor benutzt hatte.

Was ist da los? Werden CPUs nicht mehr schneller?

Daten

Grau ist alle Theorie. Also lasst uns das mal empirisch angehen und ein paar Daten besorgen. Einer der wohl verbreitetsten Benchmarks ist PassMark. Leider ein Produkt das, wie so oft, nicht für LINUX erhältlich ist, weshalb ich es nicht nutze. Aber die haben eine frei zugängliche Datenbank von Benchmark-Ergebnissen, die man verwenden kann, um verschiedene Prozessoren zu vergleichen. Natürlich kann man trefflich streiten, ob diese Zahlen repräsentativ sind, ob der Benchmark die relevanten Dinge misst etc. bla bla. Für eine Groborientierung wird es reichen.

Zuerst habe ich mir also mal die große Kompletttabelle aller CPUs heruntergeladen und mit ein bisschen Python in auswertbare Form gebracht. Diese hab ich dann in R geladen und etwas gesäubert, um sie zu analysieren (z.B. hat der "Mobile AMD Athlon XP-M 1800+" eine Taktfrequenz von 1533MHz und nicht 15133 und eine CPU mit 6.3GHz in 2011 erschien mir auch fragwürdig...). So sieht das Ergebnis aus:

> str(dat)
'data.frame':   3011 obs. of  18 variables:
 $ CPU.Name        : chr  "686 Gen" "AMD A10 Micro-6700T APU" "AMD A10 PRO-7350B APU" "AMD A10 PRO-7800B APU" ...
 $ Price           : num  NA NA NA NA NA ...
 $ CPU.Mark        : int  288 1970 3152 4924 5380 3116 2605 2906 4214 2764 ...
 $ CPU.Value       : num  NA NA NA NA NA ...
 $ Thread.Mark     : int  NA 778 1012 1559 1601 1005 861 887 1358 913 ...
 $ Thread.Value    : num  NA NA NA NA NA ...
 $ TDP             : num  NA 5 19 65 95 35 25 35 65 25 ...
 $ Power.Perf.     : int  NA 394 165 75 56 89 104 83 64 110 ...
 $ Test.Date       : Date, format: "2009-02-01" "2015-05-01" "2014-06-01" ...
 $ Socket          : Factor w/ 173 levels "604","754","939",..: NA 110 98 95 95 105 97 97 94 97 ...
 $ Category        : Factor w/ 6 levels "Desktop","Desktop, Laptop",..: 6 3 3 1 1 3 3 3 1 3 ...
 $ Clock.Speed     : int  NA 1200 2100 3500 3700 2300 2000 2300 3400 2100 ...
 $ Turbo.Speed     : int  NA 2200 3300 3900 4000 3200 2800 3200 4000 2900 ...
 $ Rank            : int  2852 1821 1386 977 897 1400 1566 1468 1121 1519 ...
 $ Samples         : int  1 6 134 20 12 988 136 3 562 515 ...
 $ Cores           : int  1 4 4 2 2 2 2 4 2 4 ...
 $ Threads         : int  1 4 4 4 4 4 4 4 4 4 ...
 $ Threads.per.core: int  1 1 1 2 2 2 2 1 2 1 ...

Wir haben also Daten über mehr als 3000 verschiedene CPUs. Das ist gut. Test.Date ist das früheste Datum, zu dem eine CPU in der Liste aufgetaucht ist. Das ist zwar nicht das gleiche, wie das Erscheinungsjahr der CPU, sollte aber einigermaßen damit korrelieren. Also nehmen wir das als Zeitachse.

Taten

Frisch ans Werk – wir analysieren die Daten.

Jahrelang war die Headline aller Werbeanzeigen sowas wie "Superduper: noch mehr GHz!". Viel Taktfrequenz = viel schnell – das klang einleuchtend für den Kunden, der dabei dann auch schnell mal übersah, dass das beworbene Modell eine armselige RAM-Ausstattung hatte, oder ähnliches. Und so hat sich die Taktung [MHz] über die Jahre verändert:

Jeder Punkt repräsentiert eine CPU und die hellblaue Linie ist ein sog. LOESS-Smoother, der grob gesagt, die Mittelwerte im Zeitverlauf repräsentiert. Das graue Band in dem sie läuft ist das 95%-Konfidenzband. Man sieht deutlich, dass der Takt im Beobachtungszeitraum nicht dramatisch gestiegen ist. Das war früher anders – mein C64 hatte 1MHz Takt, der Atari ST schon 8MHz und mein erster PC war ein 80368er mit sowas wie 33MHz. Besagter Laptop läuft mit 2.1GHz. d.h. ich habe mich seit meiner Jugend um den Faktor 2100 gesteigert. Dagegen sieht obige Grafik sehr bescheiden aus. In den letzten 10 Jahren ist der mittlere Takt um ein paar Prozent gestiegen, aber überwältigend ist das nicht.

Und entsprechend wenig hat sich auch in puncto Wärmeproduktion getan. TDP = "Thermal Design Power" ist das Maß dafür und stagniert ebenfalls schon ewig. Nur bei den high-end CPUs sieht man neuere Modelle mit viel Kühlungsbedarf. Wirklich kühler sind sie im Mittel nicht geworden:

Die Wärmeabgabe ist hoch signifikant, aber nur mittelmäßig stark mit der CPU-Leistung korreliert:

> with(dat, cor.test(CPU.Mark, TDP, use="complete"))

        Pearson's product-moment correlation

data:  CPU.Mark and TDP
t = 40.95, df = 2703, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.5949467 0.6414889
sample estimates:
      cor
0.6187605

Aber irgendwas muss doch größer werden! Ja – z.B. der mittlere Preis (in $). Die Preisspanne von low-end bis Topmodell hat sich zwar über die Jahre nicht wirklich verändert, aber offenbar werden heute mehr CPUs im mittleren Preissegment hergestellt, als es früher der Fall war. Allerdings ist diese Interpretation mit Vorsicht zu genießen, denn es ist aus der Beschreibung nicht völlig klar, von wann der angegebene Preis stammt. Wäre es der Einführungspreis, oder der nach einer fixen Periode wäre die Welt in Ordnung, aber wenn es sich um den aktuellen bzw. letzen Preis handelt, dann ist klar, dass neuere CPUs teurer wegkommen, als ältere.

Während früher eine CPU eine CPU war, werden heute zunehmend Prozessoren mit zwei, vier oder noch mehr Kernen hergestellt. D.h. Eine CPU ist in Wirklichkeit mehrere, die parallel arbeiten können:

Ein weiterer Trick, besteht darin, auf einem Kern zwei sog. Threads quasi gleichzeitig laufen zu lassen. Das klappt deswegen, weil so ein CPU-Kern ja viele verschiedenen Elemente beherbergt, die nicht alle gleichzeitig gebraucht werden. Und so können mehrere Threads gleichzeitig laufen, falls sie gerade verschiedene Ressourcen benötigen. Das nennt sich Hyperthreading. Beide Effekte zusammen (Multi-Kern-CPUs und Hyperthreading) haben dazu geführt, dass im Laufe der Jahre die High-End CPUs immer mehr Threads parallel ausführen können. Das Gros der Prozessoren begnügt sich mit sowas wie 4 Kernen – dem normalen Anwender genügt das. Einkerner hingegen dürften nun als ausgestorben gelten.

Was bedeutet all das nun für die CPU-Performance anhand der Benchmark Ergebnisse? Sie ist natürlich gestiegen – aber nicht in dem Tempo, das Moore's Law erwarten ließe:

2015 lag der mittlere PassMark Score so bei etwas über 5000 Punkten und Ende 2019 sind es so ca. 15000. Nach der Gesetzmäßigkeit hätten wir erwartet, dass in 60 Monaten ein Faktor \(2^{60/18} = 9.85\) zustande kommt. Eine Verzehnfachung also. Davon sind wir weit entfernt. Und so erklärt sich auch, warum mein sechs Jahre altes Laptop sich im Vergleich zu aktuellen Geräten immer noch sehr brauchbar anfühlt.

Beschränkt man sich auf Desktop- bzw. Laptop-CPUs, bleibt die Verdreifachung sichtbar, jedoch auf unterschiedlichem Niveau:

Aber sehen wir nun immer effizientere CPUs, oder wurde die Leistungssteigerung im Wesentlichen durch mehr Parallelität erreicht? Diese Frage ist relevant, denn nur weil ein Prozessor theoretisch 32 Dinge gleichzeitig rechnen kann, heißt das noch lange nicht, dass diese Power auch beim Anwender ankommt, denn nicht alle Programme nutzen auch mehr als einen Kern. Teils, weil die Programmierer das schlicht nicht umgesetzt haben, manchmal aus Lizenzgründen (nur die Pro-Version unterstützt mehrere Kerne) aber auch weil sich nicht alle Probleme parallelisieren lassen. Wenn mein Algorithmus auf Ergebnisse der vorigen Iteration angewiesen ist, um weiter zu rechnen, dann nützt es nichts, dass ich theoretisch viel parallel machen kann. Diese Frage beantwortet der PassMark Score für einzelne Threads:

Auch hier sieht man technologischen Fortschritt, aber er fällt noch bescheidener aus, als die Gesamtperformance-Entwicklung: Knapp 1500 waren es im Mittel Anfang 2015 und heute dürfen wir ca. 2200 erwarten. Das ist keine Steigerung, die einem die Schuhe auszieht.

Fazit

Ich fühle mich bestätigt: Mein alter Thinkpad darf vorerst bleiben. CPUs werden zwar in der Tat im Laufe der Jahre schneller, aber ein Computer-Upgrade rechtfertigt das viel seltener, als die meisten Leute glauben.