2016-04-11 13 views
1

Ich analysiere Agner Fog's "Optimizing subroutines in assembly language: An optimization guide for x86 platforms". Besonders versuche ich Kapitel 12.7 zu verstehen. Und es gibt ein Problem, das ich nicht verstehen kann. Der Autor schreibt:Muster der Decodieranweisung

Befehlsdecodierung im PM-Prozessor folgt dem 4-1-1-Muster. Das Muster von (fusionierten) μops für jeden Befehl in der Schleife in Beispiel 12.6b ist 2-2-2-2-2-1-1-1. Dies ist nicht optimal, und es wird 6 Takte dauern, um zu dekodieren. Das ist mehr als die Ruhestandszeit, also können wir daraus schließen, dass die Befehlsdecodierung der Flaschenhals in Beispiel 12.6b ist. Die gesamte Ausführung Zeit beträgt 6 Taktzyklen pro Iteration oder 3 Taktzyklen pro berechnetem Y [i] -Wert.

  1. Was bedeutet es, dass die Befehlsdecodierung folgt das 4-1-1-Muster und wie es wissen?
  2. Muster für Schleife ist 2-2-2-2-2-1-1-1. Ok, aber warum dauert es 6 Zyklen zu dekodieren, weiß ich nicht. Warum?

Antwort

3
  1. Frontend CPU können mehrere (Makro) Anweisungen in einem Taktzyklus dekodieren. Jeder Makrobefehl decodiert zu 1 oder mehreren Mikro-Ops (μops). Was das 4-1-1-Muster bedeutet, ist, dass der erste parallele Decodierer einen komplexen Befehl verarbeiten kann, der bis zu 4 μs dekodiert. Aber der zweite und der dritte parallele Decodierer können nur Befehle handhaben, die jeweils auf 1 μop dekodieren (wenn sie nicht zufrieden sind, verbrauchen sie den Befehl nicht).

  2. Die 5 Anweisungen, die auf 2 μops dekodieren, müssen vom ersten Dekodierer konsumiert werden, dann ermöglicht der Tail eine gewisse Parallelität.

    2 2 2 2 2 1 1 1 (Macro-instruction stream, μops per instruction) 
    ^ x x 
    4 1 1 (Decode cycle 0) 
    
    . 2 2 2 2 1 1 1 
    ^x x 
        4 1 1 (Decode cycle 1) 
    
    . . 2 2 2 1 1 1 
        ^x x 
        4 1 1 (Decode cycle 2) 
    
    . . . 2 2 1 1 1 
        ^x x 
         4 1 1 (Decode cycle 3) 
    
    . . . . 2 1 1 1 
         ^^^
         4 1 1 (Decode cycle 4) 
    
    . . . . . . . 1 
          ^x x 
           4 1 1 (Decode cycle 5) 
    
    . . . . . . . . (Instruction stream fully consumed) 
    
+0

Dank :) Wie Muster für patricular Prozessor wissen? – Gilgamesz

+1

Agners Guide sollte einige Informationen haben. Wenn nicht, suchen Sie nach Artikeln zur CPU-Architektur auf Ars Technica – Nayuki

+1

Für einige aktuelle Intel-Prozessoren (bisher Skylake und Haswell) - finden Sie eine detaillierte Untersuchung des Anweisungsholverhaltens [in dieser Antwort] (http://stackoverflow.com/a/39940932/149138). – BeeOnRope