2016-04-11 32 views
1

解析中Agner Fog's "Optimizing subroutines in assembly language: An optimization guide for x86 platforms"です。 特に私は第12.7章を理解しようとしています。私が理解できない問題があります。著者は次のように書いています。デコード命令のパターン

命令プロセッサでの命令解読は4-1-1パターンに従います。例12.6bのループ内の各命令の(融合された) μopsのパターンは2-2-2-2-2-1-1-1です。これは最適ではなく、 であり、デコードに6クロックサイクルかかる。これは退役の時間を超えているので、 は、例12.6bの命令デコードがボトルネックであると結論づけることができます。合計実行時間は、反復ごとに6クロックサイクル、または計算されたY [i]値に対して3クロックサイクルです。

  1. それは命令デコードは4-1-1のパターンとどのようにそれを知っているし、次のことは何を意味するのでしょうか?
  2. パターンforループは2-2-2-2-2-1-1-1です。しかし、それはなぜ私は知らないデコードに6サイクルかかります。どうして?

答えて

3
  1. CPUのフロントエンドは、複数の(マクロ)1回のクロックサイクルで命令を復号することができます。各マクロ命令は、1つ以上のマイクロオペレーション(μOP)にデコードします。 4-1-1パターンが意味することは、第1の並列デコーダが4μopsまで復号化する複雑な命令を処理できることである。しかし、2番目と3番目のパラレル・デコーダは、それぞれ1μopにデコードする命令しか処理できません(満足できない場合、命令を消費しません)。

  2. 2μopにデコードする5つの命令は、最初のデコーダで消費されなければならず、テールはある程度の並列性を許します。

    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

感謝:) patricularプロセッサのためのパターンを知る方法 ? – Gilgamesz

+1

アグナーのガイドにはいくつかの情報が必要です。そうでない場合は、Ars TechnicaのCPUアーキテクチャ記事を検索してください。 – Nayuki

+1

最近のIntelプロセッサ(SkylakeとHaswellまで)については、命令のフェッチ動作の詳細な調査を見つけることができます[この回答で](http://stackoverflow.com/a/39940932/149138)。 – BeeOnRope