Wie genau hängen die Taktraten von Computern mit den Betriebsgeschwindigkeiten zusammen?

Ich habe mich neulich darüber gewundert, als ich einem Freund von mir binär und hexadezimal erklärte und dies auftauchte. Die Frage geht ungefähr so:

Wie genau hängen die Ausführungsgeschwindigkeiten von Anweisungen mit den Taktraten in modernen Computern zusammen?

Angenommen, ein Computerprozessor verwendet ein Taktsignal von 1 MHz. Der Prozessor führt Operationen an der Flanke dieses Takts aus (an der negativen Flanke, wenn ich mich nicht irre), aber das bedeutet nicht, dass für jeden Taktzyklus eine vollständige Anweisung ausgeführt wird.

Um ein spezifischeres Beispiel zu haben: Wenn ein Intel x86-Prozessor einen MOV BX, 45- Befehl hat, gehe ich davon aus, dass es mehrere Taktzyklen dauern wird, um dies abzuschließen, da die Zahl 45 generiert und das BX-Register lokalisiert werden muss usw. Vielleicht könnte dies ein einzelner Taktzyklus sein, da es sich um einen sofortigen Wert handelt, der in ein Register verschoben wird, aber hoffentlich erklärt dies meine Frage. Vielleicht wäre ein JNE- Befehl ein besseres Beispiel.

Darüber hinaus gibt es den Abruf-Dekodier-Ausführungs-Zyklus, der das Verhältnis von Anweisungen pro Takt auf weniger als 1:1 reduzieren würde, ist das richtig? Bitte verzeihen Sie mir, wenn ich völlig falsch verstehe, wie dieses Zeug funktioniert. Ich interessiere mich sehr dafür und weiß, dass viele von Ihnen ziemlich viel darüber wissen. Bitte zögern Sie nicht, etwas Licht in meine Unwissenheit zu bringen :D

Vielen Dank

Chris

Die 1800-MHz-Quad-Core-CPU läuft auf meinem Laptop etwas schneller.
Wenn Sie sich mit Mikrocontrollern befassen, werden Sie die Beziehung bald verstehen.
Ihr unglückliches X86-Beispiel hat einen komplexen Taktzyklus (wie in der Antwort von @ pjc50 beschrieben). Einige einfache Mikrocontroller haben eine viel geringere Taktzykluskomplexität – viele erreichen fast Ihr 1:1-Verhältnis von Anweisungen pro Takt. Es gibt ein fehlendes Glied: Ein Master-Oszillator (manchmal von einem Quarz abgeleitet) erzeugt das Zyklus-Timing. Sie ist oft ein ganzzahliges Vielfaches oder Untervielfaches der Quarzfrequenz und variiert von Chip zu Chip. Sie müssen ein Datenblatt sorgfältig lesen.
Stellen Sie sich die Taktrate vor, wie schnell Sie Ziffern auf einem Taschenrechner drücken, und stellen Sie fest, dass Sie manchmal zwischen den Drücken auf ein Ergebnis warten müssen, wie 63!zum Beispiel ...

Antworten (1)

Ich gehe davon aus, dass es mehrere Taktzyklen dauern wird, um dies abzuschließen

Es ist ziemlich kompliziert, aber siehe: https://stackoverflow.com/questions/692718/how-many-cpu-cycles-are-needed-for-each-assembly-instruction

Für eine einfache Erklärung sind im Wesentlichen drei Faktoren zu berücksichtigen:

  • Zyklen pro Anweisung. Dies wird im Handbuch für den Prozessor pro Anweisung angegeben. Kann so niedrig wie 1 sein.
  • Anweisungen pro Zyklus. Dank des „superskalaren“ Designs und der Pipelines können Sie mehrere Anweisungen gleichzeitig verarbeiten und möglicherweise mehr als eine „ausgeben“.
  • Operationen pro Anweisung. Dank der SIMD-Befehlssätze kann ein Befehl in einem einzigen Zyklus mit ziemlich vielen Werten arbeiten.

Pipelines erschweren das Timing für "Verzweigungs"-Befehle wie JNE. Möglicherweise stellen Sie fest, dass es einen Zyklus dauert, um nicht zu verzweigen, und hundert Zyklen, um die Verzweigung zu nehmen – es sei denn, der Verzweigungsprädiktor hat richtig geraten, in diesem Fall sind diese Kosten umgekehrt.

Cache-Misses dauern auch ziemlich lange.