Prozessor Takt != Operationen (tabelle?)

Hallo Wissende,
wie viele wissen, sagt der takt eines Prozessors nur geringfügig etwas über seine „wahre“ Geschwindigkeit aus. Den je nach Architektur können verschieden viele Operationen in einem Takt ausgeführt werden.
Möglich sind auch das teile des Prozessors in einem anderen takt laufen als der Prozessor selbst.

Jetzt ist meine Frage, gibt es irgendwo einen vergleich welche Architektur wie viele Operationen pro takt ausführt? Ich rede nicht von normalen Benchmarks um herauszufinden welcher Prozessor der schnellste ist. Ich hätte einfach gern diesen Vergleich an Operationen.

Gibt es so eine Tabelle? Oder hat jemand einfach das wissen und würde eine grobe Übersicht erstellen?

Das wäre für mich wirklich gold wert, danke für eure zeit und mühe.

Moien

Jetzt ist meine Frage, gibt es irgendwo einen vergleich welche
Architektur wie viele Operationen pro takt ausführt?

Keine Chance. Das Problem sind die OpDecoder und die Out-of-order Engine. D.h. die Anzahl der Takte hängt nicht mehr nur von der einzelnen Operation ab sondern auch noch von den vor und nachher ablaufenden Operationen. Selbst wenn man die gleiche Operation ein paar tausend Mal hintereinander laufen läst ist das immernoch keine wirkliche Aussage über deren Laufzeit in einem normalen Programm.

Dann kommt noch ein Haufen Sondernbefehle dazu: SSE, MMX & Co erledigen die gleichen Aufgaben wie die normalen Befehle, nur halt in komprimierter Form…

Gibt es so eine Tabelle? Oder hat jemand einfach das wissen
und würde eine grobe Übersicht erstellen?

Ganz grob von langsam nach schnell:
float sin cos sqrt
float /
float *
int /
float + -
int *
int + -
bool

cu

Hey pumpkin,
es ist immer wieder toll auf dein wissen zurück zu greifen.

Leider habe ich mich wohl undeutlich ausgedrückt. Es ging mir gar nicht um die Schnelligkeit der Operationen an sich. Die konnte ich mir aus der logik her auch so ungefähr nach deiner liste anordnen.

Es ging mir um die verschiedenen Prozessor Architekturen und deren Verhältnis zu Operationen pro takt.

Ein P4 hat ja bekanntlich weniger Rechenleistung als ein C2D bei gleicher Taktfrequenz (und damit meine ich nicht einfach den zweiten kern)

aber evtl. bin ich auch auf dem Holzweg. Danke trotzdem

Ein P4 hat ja bekanntlich weniger Rechenleistung als ein C2D
bei gleicher Taktfrequenz (und damit meine ich nicht einfach
den zweiten kern)

Aber das liegt ja auch nicht allein an der maximalen Zahl gleichzeitig möglicher Instruktionen (die beim C2D wegen der 128bit SSE-Einheiten und der Macro-OP Fusion schon deutlich höher ist). Der C2D hat ja insgesamt eine andere Architektur: einen breiteren Datenbus, kürzere Pipeline und intelligentere Cache-Architektur, die die Rechenwerke auch viel besser auslastet. Es dürfte IMO im Einzelfall sehr schwer zu sagen sein, wie nun konkret eine höhere Leistung aus welchem Programmcode generiert wird, ein Prozessor ist da ein zu komplexes System.

Gruß, Jesse

1 Like

Moien

Es ging mir um die verschiedenen Prozessor Architekturen und
deren Verhältnis zu Operationen pro takt.

Da wirst du sehr viele Whitepaper lesen müssen und bist danach wahrscheinlich keinen Schritt weiter weil das meiste interessante Zeug Betriebsgeheimnis ist. Schon alleine die Auswirkungen eines Cache-miss oder einer falschen Branchprediction hauen unheimlich rein. Der P4 mag manche Ops in einem Takt gemacht haben (also Anzahl der Pipeline-stufen x 1 was auf eine Op pro Takt rausläuft) aber er hat in den ersten Versionen auch ziemlich übel auf falsche Branchprediction reagiert (die ganze Pipeline leer machen und neu ansetzen tut bei solch lagnen Pipelines richtig weh).

Dann sind die x86-Ops im Kern ja gar nicht mehr als x86-Op vorhanden. Es wird ja alles in mirco-Ops umgewandelt (teilweise mehrere micro-Ops pro x86-Befehl, teilweise mehrere x86-Befehle in einem micro-Op). Und die sind unter den Systemen wieder nicht vergleichbar.

Wenn es dann von x86 weg geht wird es noch komplexer. Power-Systeme haben z.B. spezielle Befehle die 80% der TCP/IP-Verwaltung in Hardware machen. Mit was willst du das beim x86 vergleichen?

Man kann eine durchschnittliche Op/takt-Rate mit etwas Aufwand aus den Spec-Benchmarks ablesen (sehen so aus: http://www.spec.org/cpu2006/results/res2006q3/cpu200… und sind recht gut beschrieben) Auch Mini-tests wie Wheatstone und Drystone Benchmarks sind da aufschlussreich.

aber evtl. bin ich auch auf dem Holzweg.

Komm von der Auswertung pro Befehl-XYZ runter und unterteil nur nach int, float und evtl. Speicher-Befehlen. Da sind die Unterschiede schon gewaltig genug.

cu

1 Like

Danke!
s.o