рд╕реИрдВрдбреА рдмреНрд░рд┐рдЬ + рдкрд░ рдпреВрдУрдкреА рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░

рдЖрдзреБрдирд┐рдХ x86 рдЗрдВрдЯреЗрд▓ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ, рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ 2 рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдлреНрд░рдВрдЯ рдПрдВрдб рдФрд░ рдмреИрдХ рдПрдВрдбред

рдлреНрд░рдВрдЯ рдПрдВрдб рдореЗрдореЛрд░реА рд╕реЗ рдХреЛрдб рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдорд╛рдЗрдХреНрд░реЛ-рдСрдкрд░реЗрд╢рди рдореЗрдВ рдЗрд╕реЗ рдбрд┐рдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред

рдмреИрдХ рдПрдВрдб рдлреНрд░рдВрдЯ рдПрдВрдб рд╕реЗ рдорд╛рдЗрдХреНрд░реЛ-рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдЪреВрдВрдХрд┐ рдпреЗ рдорд╛рдЗрдХреНрд░реЛрдСрдкрд░реЗрд╢рди рдХрд░реНрдиреЗрд▓ рджреНрд╡рд╛рд░рд╛ рдХреНрд░рдо рд╕реЗ рдмрд╛рд╣рд░ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдмреИрдХ рдПрдВрдб рдпрд╣ рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрди рдорд╛рдЗрдХреНрд░реЛрдСрдкрд░реЗрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЙрд╕ рдХреНрд░рдо рд╕реЗ рд╕рдЦреНрддреА рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рдХреЛрдб рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВред

рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдлреНрд░рдВрдЯ рдПрдВрдбрд╛ рдХреЗ рдЕрдХреНрд╖рдо рдЙрдкрдпреЛрдЧ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдЗрдВрдЯреЗрд▓ рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рдкреАрдХ рдмреИрдВрдбрд╡рд┐рдбреНрде 4 рдорд╛рдЗрдХреНрд░реЛ рд╕рдВрдЪрд╛рд▓рди рдкреНрд░рддрд┐ рдЪрдХреНрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрдореЛрд░реА / рдПрд▓ 3-рдмрд╛рдЙрдВрдб рдХреЛрдб рдХреЗ рд▓рд┐рдП, рд╕реАрдкреАрдпреВ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдкреНрд░реЛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдирдИ рдмрд░реНрдл рдЭреАрд▓
, Ice Lake 4 5 . , , .

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдЕрдВрддрд░ рдХрд╛рдлреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХрдЯреМрддреА рдХреЗ рддрд╣рдд рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЗрд╢рди рдХреИрд╢ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╣реИред


рд▓реЗрдЦ рдХреА рд╕рд╛рдордЧреНрд░реА


  • рд╡рд╛рддрд╛рд╡рд░рдг
  • рдлреНрд░рдВрдЯ рдПрдВрдбрд╛ рдЗрдВрдЯреЗрд▓ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдЕрд╡рд▓реЛрдХрди
  • рдкреАрдХ рдмреИрдВрдбрд╡рд┐рдбреНрде рд╡рд┐рд╢реНрд▓реЗрд╖рдг cacheop рдХреИрд╢ -> IDQ
  • рдЙрджрд╛рд╣рд░рдг

рд╡рд╛рддрд╛рд╡рд░рдг


рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рд╕рднреА рдорд╛рдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ i7-8550U Kaby Lake, HT рд╕рдХреНрд╖рдо / Ubuntu 18.04/Linux Kernel 5.3.0-45-genericред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдРрд╕рд╛ рд╡рд╛рддрд╛рд╡рд░рдг рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ CPU рдореЙрдбрд▓ рдХрд╛ рдЕрдкрдирд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реЛрддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╕реИрдВрдбреА рдмреНрд░рд┐рдЬ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкреБрд░рд╛рдиреЗ рдорд╛рдЗрдХреНрд░реЛрдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП, рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХреБрдЫ рдШрдЯрдирд╛рдПрдВ рдмрд╕ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддреА рд╣реИрдВред

рдлреНрд░рдВрдЯ рдПрдВрдбрд╛ рдЗрдВрдЯреЗрд▓ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдЕрд╡рд▓реЛрдХрди


рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдЕрд╕реЗрдВрдмрд▓реА рд▓рд╛рдЗрди рд╕рдВрдЧрдарди рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЕрдиреБрдХреВрд▓рди рдкрд░ рдЗрдВрдЯреЗрд▓ рдХреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдЫреЛрдбрд╝реА рдЧрдИ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдЕрдиреНрдп рд╕рдореНрдорд╛рдирд┐рдд рд╕реНрд░реЛрддреЛрдВ, рдЬреИрд╕реЗ рдПрдЧреНрдирд░ рдлреЙрдЧ рдпрд╛ рдЯреНрд░реИрд╡рд┐рд╕ рдбрд╛рдЙрди рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрдВрдЯреЗрд▓ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╕реНрдХрд╛рдИрд▓реЗрдХ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдпреЛрдЬрдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:

рд╕реНрдХрд╛рдИрд▓реЗрдХ рдкрд╛рдЗрдкрд▓рд╛рдЗрди

рдЖрдЗрдП рдЗрд╕ рдпреЛрдЬрдирд╛ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ - рдлреНрд░рдВрдЯ рдПрдВрдбред



рд▓реАрдЧреЗрд╕реА рдбреЗрдХреЛрдб рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдорд╛рдЗрдХреНрд░реЛ-рдСрдкрд░реЗрд╢рдВрд╕ рдореЗрдВ рдХреЛрдб рдХреЛ рдбрд┐рдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдЗрд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдШрдЯрдХ рд╣реЛрддреЗ рд╣реИрдВ:

  1. рдирд┐рд░реНрджреЗрд╢ рдлрд╝реЗрдЪ рдпреВрдирд┐рдЯ - IFU
    • рдкреНрд░рдердо рд╕реНрддрд░ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рдХреИрд╢ - L1i
    • рдирд┐рд░реНрджреЗрд╢ рд▓реЙрдЧ рдЕрдиреБрд╡рд╛рдж рдкрддрд╛ рдХреИрд╢ - ITLB
    • рдкреНрд░рд╢рд┐рдХреНрд╖рдХ рдкреНрд░рд╛рдиреНрдд
    • рдкреВрд░реНрд╡ рдбрд┐рдХреЛрдбрд░ рдирд┐рд░реНрджреЗрд╢
  2. рдкреВрд░реНрд╡-рдбрд┐рдХреЛрдб рдХрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рдХрддрд╛рд░
  3. рдорд╛рдЗрдХреНрд░реЛ-рдСрдкрд░реЗрд╢рди рдкреНрд░реА-рдбрд┐рдХреЛрдбреЗрдб рдирд┐рд░реНрджреЗрд╢ рдбрд┐рдХреЛрдбрд░реНрд╕

рд▓рд┐рдЧреЗрд╕реА рдбрд┐рдХреЛрдб рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рдЧ рдкрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рдирд┐рд░реНрджреЗрд╢ рдлрд╝реЗрдЪ рдпреВрдирд┐рдЯред

рд╡рд╣ рдХреЛрдб рд▓реЛрдб рдХрд░рдиреЗ, рдкреНрд░реА-рдХреЛрдбрд┐рдВрдЧ (рдирд┐рд░реНрджреЗрд╢ рдХреА рд▓рдВрдмрд╛рдИ рдФрд░ "рдЬреИрд╕реЗ рдХрд┐ рдХреНрдпрд╛ рдирд┐рд░реНрджреЗрд╢ рдПрдХ рд╢рд╛рдЦрд╛ рд╣реИ" рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ) рдФрд░ рдХрддрд╛рд░ рдореЗрдВ рдкреВрд░реНрд╡-рдбрд┐рдХреЛрдб рдХрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред

рдкреНрд░рдердо рд╕реНрддрд░ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рдХреИрд╢ - L1i

рдХреЛрдб рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, IFU L1i, рдкреНрд░рдердо-рд╕реНрддрд░реАрдп рдЕрдиреБрджреЗрд╢ рдХреИрд╢ рдФрд░ L2 / LLC, рджреНрд╡рд┐рддреАрдп-рд╕реНрддрд░ рдХреИрд╢ рдФрд░ рд╢реАрд░реНрд╖-рд╕реНрддрд░ рдСрдлрдХреЛрд░ рдХреИрд╢, рдХреЛрдб рдФрд░ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдбрд╛рдЙрдирд▓реЛрдб 16 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рднреА 16 рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИред рдЬрдм рдЕрдЧрд▓реЗ 16-рдмрд╛рдЗрдЯ рдХрд╛ рдХреЛрдб рдСрд░реНрдбрд░ рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрд▓ 1 рдЖрдИ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░, рдпрджрд┐ рд╕рдВрдмрдВрдзрд┐рдд рд▓рд╛рдЗрди рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИ, рддреЛ рдПрд▓ 2 рдФрд░, рдПрд▓рдПрд▓рд╕реА рдФрд░ рдореЗрдореЛрд░реА рдореЗрдВ рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдЦреЛрдЬ рдХреА рдЬрд╛рддреА рд╣реИред Skylake LLC рд╕реЗ рдкрд╣рд▓реЗ, рдХреИрд╢ рд╕рдорд╛рд╡реЗрд╢реА рдерд╛ - L1 (i / d) рдФрд░ L2 рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЛ LLC рдореЗрдВ рд╕рдорд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рднреА рдХреЛрд░ рдореЗрдВ рд╕рднреА рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрд▓рдПрд▓рд╕реА "рдЬрд╛рдирддрд╛ рдерд╛" рдФрд░, рдПрд▓рдПрд▓рд╕реА рдкрд░реНрдЪреА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЬреНрдЮрд╛рдд рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдЕрдиреНрдп рдХреЛрд░ рдореЗрдВ рдХреИрд╢ рдореЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рд░рд╛рдЬреНрдп рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд▓рд╛рдЗрди рд╢рд╛рдорд┐рд▓ рдереА, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рд▓рд╛рдЗрди рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЛрд░ рд╕реЗ рд▓реЛрдб рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рд╕реНрдХрд╛рдИрд▓реЗрдХ рдПрд▓рдПрд▓рд╕реА рдПрдХ рдЧреИрд░-рд╕рдорд╛рд╡реЗрд╢реА L2- рдкреАрдбрд╝рд┐рдд рдХреИрд╢ рдмрди рдЧрдпрд╛, рд▓реЗрдХрд┐рди L2 рдХрд╛ рдЖрдХрд╛рд░ 4 рдЧреБрдирд╛ рдмрдврд╝ рдЧрдпрд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛рдХреНрдпрд╛ L2 L1i рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╕рдорд╛рд╡реЗрд╢реА рд╣реИред рдПрд▓ 2L1d рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╕рдорд╛рд╡реЗрд╢реА рдирд╣реАрдВ рд╣реИ ред

рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рддрд╛рд░реНрдХрд┐рдХ рдкрддреЛрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж - ITLB

рдХреИрд╢ рд╕реЗ рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рд▓рд╛рдЗрди рдХреЛ рдЦреЛрдЬрдирд╛ рд╣реЛрдЧрд╛ред рдлреЙрд░- nрдПрд╕реЛрд╕рд┐рдПрдЯрд┐рд╡ рдХреИрд╢ , рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреИрд╢ рдореЗрдВ nрдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд╣реЛ рд╕рдХрддреА рд╣реИред рдХреИрд╢ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рдкрджреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЖрдорддреМрд░ рдкрд░ рдкрддреЗ рдХреЗ рдХреБрдЫ рдирд┐рдЪрд▓реЗ рдЯреБрдХрдбрд╝реЗ)ред рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд▓рд╛рдЗрди рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдкрддреЗ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рдПрдХ рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдмрд╛рдХреА рдкрддрд╛)ред рдХрд┐рд╕ рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ: рднреМрддрд┐рдХ рдпрд╛ рддрд╛рд░реНрдХрд┐рдХ - рдХреИрд╢ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рднреМрддрд┐рдХ рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдкрддреЗ рдХреЗ рдЕрдиреБрд╡рд╛рдж рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдкрддреЗ рдХреЗ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП, рдПрдХ рдЯреАрдПрд▓рдмреА рдмрдлрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкреЗрдЬ рд╡реЙрдХ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдХреИрд╢ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдмрд╛рдж рдХреЗ рдХреЙрд▓ рдкрд░ рддрд╛рд░реНрдХрд┐рдХ рдкрддреЗ рд╕реЗ рднреМрддрд┐рдХ рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рджреЗрд░реА рдХреЛ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рдЯреАрдПрд▓рдмреА рдмрдлрд░ рд╣реИ, рдЬреЛ рдбреЗрдЯрд╛ рдЯреАрдПрд▓рдмреА рд╕реЗ рдЕрд▓рдЧ рд╕реНрдерд┐рдд рд╣реИред рд╕реАрдкреАрдпреВ рдХреЛрд░ рдореЗрдВ рдХреЛрдб рдФрд░ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рджреВрд╕рд░реЗ рд╕реНрддрд░ рдХрд╛ рдЯреАрдПрд▓рдмреА рдХреЙрдорди рд╣реИ - рдПрд╕рдЯреАрдПрд▓рдмреАред рдХреНрдпрд╛ рдПрд╕рдЯреАрдПрд▓рдмреА рдореЗрд░реЗ рд▓рд┐рдП рдЕрдЬреНрдЮрд╛рдд рд╣реИ (рдбреА / рдЖрдИ рдЯреАрдПрд▓рдмреА рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╕рдорд╛рд╡реЗрд╢реА рдкреАрдбрд╝рд┐рдд рдХреИрд╢ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреА рдЕрдлрд╡рд╛рд╣)ред рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдкреНрд░реАрдлреИрдЪ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛prefetcht1рдЖрдк L2 рдореЗрдВ рдХреЛрдб рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдВрдмрдВрдзрд┐рдд TLB рд░рд┐рдХреЙрд░реНрдб рдХреЗрд╡рд▓ DTLB рдореЗрдВ рдЦреАрдВрдЪ рд▓рд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ STLB рд╕рдорд╛рд╡реЗрд╢реА рдирд╣реАрдВ рд╣реИ, рддреЛ рдЬрдм рдЖрдк рдХреИрд╢ рдореЗрдВ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЗрд╕ рд▓рд╛рдЗрди рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ ITLB рдорд┐рд╕ -> STLB рдорд┐рд╕ -> рдкреЗрдЬ рд╡реЙрдХ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрд░реНрдиреЗрд▓ рдПрдХ рд╕рдЯреНрдЯрд╛ рдкреЗрдЬ рдЪрд▓рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ) рдЯреАрдПрд▓рдмреА рдорд┐рд╕)ред рдЗрдВрдЯреЗрд▓ рдкреНрд░рд▓реЗрдЦрди рдХреЛрдб рдХреЗ рд▓рд┐рдП SW рдкреНрд░реАрдлрд╝реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИ, Intel рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдореИрдиреБрдЕрд▓ / 2.5.5.4:
рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░-рдирд┐рдпрдВрддреНрд░рд┐рдд рдкреНрд░реАрдлрд╝реИрдЪ рдкреНрд░реАрдлрд╝реИрдЪрд┐рдВрдЧ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░реАрдлрд╝реЗрдЯрд┐рдВрдЧ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЯреНрд░реИрд╡рд┐рд╕ рдбреА рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░реАрдлреИрдЪ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡реА (рдФрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ) рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕ рдмрд╛рдд рдХреЗ рд▓рд┐рдП рдЖрд╢реНрд╡рд╕реНрдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рдЕрд▓рдЧ рд╕реЗ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдкреНрд░рд╢рд┐рдХреНрд╖рдХ рдкреНрд░рд╛рдиреНрдд

рдХреИрд╢ рдореЗрдВ рд▓реЛрдбрд┐рдВрдЧ рдбреЗрдЯрд╛ (L1d / i, L2, рдЖрджрд┐) рдЕрди-рдХреИрд╢реНрдб рдореЗрдореЛрд░реА рд▓реЛрдХреЗрд╢рди рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╕рдордп рд╣реЛрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рддрд╣рдд рд╣реБрдЖ рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдореЗрдВ рдХреИрд╢ рдмреИрдВрдбрд╡рд┐рдбреНрде рдХрд╛ рдПрдХ рдЕрдХреНрд╖рдо рдЙрдкрдпреЛрдЧ рдорд┐рд▓реЗрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрд▓ 1 рдбреА рдХреЗ рд▓рд┐рдП рд╕реИрдВрдбреА рдмреНрд░рд┐рдЬ рдкрд░ - 2 рдкрдврд╝рдиреЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди, 1 рдкреНрд░рддрд┐ рдЪрдХреНрд░ 16 рдмрд╛рдЗрдЯреНрд╕ рд▓рд┐рдЦрддреЗ рд╣реИрдВ; рдПрд▓ 1 рдЖрдИ рдХреЗ рд▓рд┐рдП - 16 рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ 1 рд░реАрдб рдСрдкрд░реЗрд╢рди, рд▓рд┐рдЦрдиреЗ рдХреЗ рдереНрд░реВрдкреБрдЯ рдХреЛ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдЧреНрдирд░ рдлреЙрдЧ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ рдерд╛ред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкреНрд░реАрдлрд╝реИрдХреНрдЯрд░ рд╣реИрдВ рдЬреЛ рдореЗрдореЛрд░реА рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рдкреИрдЯрд░реНрди рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдб рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреИрд╢ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдЗрдВрдЯреЗрд▓ рдкреНрд░рд▓реЗрдЦрди 4 рдкреНрд░реАрдлреИрдЪрд░реНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ: рдПрд▓ 1 рдбреА рдХреЗ рд▓рд┐рдП 2, рдПрд▓ 2 рдХреЗ рд▓рд┐рдП 2:

  1. рдПрд▓ 1 рдбреАрд╕реАрдпреВ - рдЙрдкрд╕рд░реНрдЧ рд╕реАрд░рд┐рдпрд▓ рдХреИрд╢ рд▓рд╛рдЗрдиреЗрдВред рдХреЗрд╡рд▓ рдЖрдЧреЗ рдкрдврд╝реЗрдВ
  2. L1 IP тАФ (. 0x5555555545a0, 0x5555555545b0, 0x5555555545c0, ...), , ,
  3. L2 Spatial тАФ L2 -, 128-. LLC
  4. L2 Streamer тАФ . L1 DCU ┬л┬╗. LLC

рдЗрдВрдЯреЗрд▓ рдкреНрд░рд▓реЗрдЦрди рдПрд▓ 1 рдЖрдИ рдкреНрд░реАрдлреЗрдХреНрдЯрд░ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рдм рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рд╢рд╛рдЦрд╛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдЗрдХрд╛рдИ (рдмреАрдкреАрдпреВ) рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЗрдВрдЯреЗрд▓ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдореИрдиреБрдЕрд▓ / 2.6.2:



рдПрдЧреНрдирд░ рдлреЙрдЧ рднреА рдХреЛрдИ рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рджреЗрдЦрддрд╛ рд╣реИред

рдПрд▓ 2 / рдПрд▓рдПрд▓рд╕реА рдореЗрдВ рдХреЛрдб рдкреНрд░реАрдлреЗрдЯрд┐рдВрдЧ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░реАрдорд░ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдиреБрдХреВрд▓рди рдореИрдиреБрдЕрд▓ / 2.5.5.4 рдбреЗрдЯрд╛ рдкреНрд░реАрдлреЗрдХреНрдЯрд┐рдВрдЧ:
рд╕реНрдЯреНрд░реАрдорд░ : рдпрд╣ рдкреНрд░реАрдлрд╝реИрдЪрд░ рдореЙрдирд┐рдЯрд░ рдХреЗ рдкрддреЗ рдХреЗ рдЖрд░реЛрд╣реА рдФрд░ рдЕрд╡рд░реЛрд╣реА рдХреНрд░рдо рдХреЗ рд▓рд┐рдП L1 рдХреИрд╢ рд╕реЗ рдЕрдиреБрд░реЛрдз рдкрдврд╝рддрд╛ рд╣реИред рдореЙрдирд┐рдЯрд░ рдХрд┐рдП рдЧрдП рд░реАрдб рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдореЗрдВ рд▓реЛрдб рдФрд░ рд╕реНрдЯреЛрд░ рдСрдкрд░реЗрд╢рдВрд╕ рджреНрд╡рд╛рд░рд╛ рдФрд░ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкреНрд░реАрдлрд╝реИрдЪрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рд╢реБрд░реВ рдХрд┐рдП рдЧрдП L1 DCache рдЕрдиреБрд░реЛрдз рдФрд░ рдХреЛрдб рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП L1 ICache рдЕрдиреБрд░реЛрдз рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рд╕реНрдерд╛рдирд┐рдХ рдкреНрд░реАрдлрд╝реЗрдЪрд░ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд░реНрддрдиреА рдирд╣реАрдВ рд╣реИ:
рд╕реНрдерд╛рдирд┐рдХ рдкреНрд░реАрдлрд╝реЗрдЪрд░: рдпрд╣ рдкреНрд░реАрдлрд╝реИрдЪрд░ рдПрд▓ 2 рдХреИрд╢ рдХреЗ рд▓рд┐рдП рд▓рд╛рдИ рдЧрдИ рдкреНрд░рддреНрдпреЗрдХ рдХреИрд╢ рд▓рд╛рдЗрди рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ 128-рдмрд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрдпреБрдХреНрдд рдмрдВрдХ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореЙрдбрд▓-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рдЬрд┐рд╕реНрдЯрд░MSR 0x1A4 рдореИрдиреБрдЕрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдЗрди рдкреНрд░реАрдлреИрдЪрд░реНрд╕ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

MSR 0x1A4 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
MSR L2 Spatial L1i. . , LLC. L2 Streamer 2.5 .

Linux msr , msr . $ sudo wrmsr -p 1 0x1a4 1 L2 Streamer 1.

рдкреВрд░реНрд╡-рдбрд┐рдХреЛрдбрд░ рдирд┐рд░реНрджреЗрд╢

рдЕрдЧрд▓реЗ 16-рдмрд╛рдЗрдЯ рдХреЛрдб рд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╡реЗ рдкреВрд░реНрд╡-рдбрд┐рдХреЛрдбрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рдЖрддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдп рдирд┐рд░реНрджреЗрд╢ рдХреА рд▓рдВрдмрд╛рдИ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реИ, рдЙрдкрд╕рд░реНрдЧреЛрдВ рдХреЛ рдбрд┐рдХреЛрдб рдХрд░рдирд╛ рдФрд░ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдирд┐рд░реНрджреЗрд╢ рдПрдХ рд╢рд╛рдЦрд╛ рд╣реИ (рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЕрднреА рднреА рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЧреБрдг рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд▓реЗрдЦрди рдЪреБрдк рд╣реИ)ред рдЗрдВрдЯреЗрд▓ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЕрдиреБрдХреВрд▓рди рдореИрдиреБрдЕрд▓ / 2.6.2.2:
The predecode unit accepts the sixteen bytes from the instruction cache or prefetch buffers and carries out the following tasks:

  • Determine the length of the instructions
  • Decode all prefixes associated with instructions
  • Mark various properties of instructions for the decoders (for example, тАЬis branch.тАЭ)

рдкреВрд░реНрд╡-рдбрд┐рдХреЛрдб рдХрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ред

IFU рд╕реЗ, рдирд┐рд░реНрджреЗрд╢ рдкреВрд░реНрд╡-рдПрдиреНрдХреЛрдбреЗрдб рдирд┐рд░реНрджреЗрд╢ рдХрддрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ рдХрддрд╛рд░ рдиреЗрд╣реЗрд▓рдо рдХреЗ рдмрд╛рдж рд╕реЗ рдкреНрд░рдХрдЯ рд╣реБрдИ рд╣реИ, рдЗрдВрдЯреЗрд▓ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░ 18 рдирд┐рд░реНрджреЗрд╢ рд╣реИред рдПрдЧреНрдирд░ рдлреЙрдЧ рдореЗрдВ рдпрд╣ рднреА рдЙрд▓реНрд▓реЗрдЦ рд╣реИ рдХрд┐ рдпрд╣ рдХрддрд╛рд░ 64 рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИред

Core2 рдореЗрдВ рднреА, рдЗрд╕ рдХрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓реВрдк рдХреИрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрджрд┐ рдЪрдХреНрд░ рд╕реЗ рд╕рднреА рдорд╛рдЗрдХреНрд░реЛрдСрдкрд░реЗрд╢рди рдХрддрд╛рд░ рдореЗрдВ рд╣реИрдВ, рддреЛ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд▓реЛрдбрд┐рдВрдЧ рдФрд░ рдкреНрд░реА-рдХреЛрдбрд┐рдВрдЧ рдХреА рд▓рд╛рдЧрдд рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реВрдк рд╕реНрдЯреНрд░реАрдо рдбрд┐рдЯреЗрдХреНрдЯрд░ (рдПрд▓рдПрд╕рдбреА) рдирд┐рд░реНрджреЗрд╢ рджреЗ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрддрд╛рд░ рдореЗрдВ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдмреАрдкреАрдпреВ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рджреЗрддрд╛ рдХрд┐ рдЪрдХреНрд░ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИред рдПрдЧреНрдирд░ рдлреЙрдЧ рдореЗрдВ рдХреЛрд░ 2 рдкрд░ рдПрд▓рдПрд╕рдбреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рдиреЛрдЯ рд╣реИрдВ:

  • 16 рдмрд╛рдЗрдЯреНрд╕ рдХреА 4 рд▓рд╛рдЗрдиреЛрдВ рд╕реЗ рдорд┐рд▓рдХрд░ рдмрдирддрд╛ рд╣реИ
  • рдкреНрд░рддрд┐ рдЪрдХреНрд░ рдХреЛрдб рдХреЗ 32 рдмрд╛рдЗрдЯ рддрдХ рдкреАрдХ рдереНрд░реВрдкреБрдЯ

рд╕реИрдВрдбреА рдмреНрд░рд┐рдЬ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдпрд╣ рд▓реВрдк рдХреИрд╢ рдкреНрд░реА-рдбрд┐рдХреЛрдбреЗрдб рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдХреНрдпреВ рд╕реЗ рд╡рд╛рдкрд╕ IDQ рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реИред

рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЗрд╢рди рдореЗрдВ рдкреВрд░реНрд╡-рдбрд┐рдХреЛрдб рдХрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдбрд┐рдХреЛрдбрд░реНрд╕ рдкреВрд░реНрд╡-рдбрд┐рдХреЛрдб рдХрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ

рдХреА рдХрддрд╛рд░ рд╕реЗ, рдХреЛрдб рдХреЛ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЗрд╢рди рдореЗрдВ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВ - рдХреБрд▓ 4 рд╣реИрдВред рдЗрдВрдЯреЗрд▓ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдбрд┐рдХреЛрдбрд░реНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ 4 рдорд╛рдЗрдХреНрд░реЛ-рдСрдкрд░реЗрд╢рди рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдбрд┐рдХреЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдмрд╛рдХреА рдПрдХ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЗрд╢рди (рдорд╛рдЗрдХреНрд░реЛ / рдореИрдХреНрд░реЛ рдлреНрдпреВрдЬреНрдб), рдЗрдВрдЯреЗрд▓ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдореИрдиреБрдЕрд▓ / 2.5.2.1 рд╕реЗ рдорд┐рд▓рдХрд░ рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдбрд┐рдХреЛрдб рдХрд░рддрд╛ рд╣реИ:
There are four decoding units that decode instruction into micro-ops. The first can decode all IA-32 and Intel 64 instructions up to four micro-ops in size. The remaining three decoding units handle single-micro-op instructions. All four decoding units support the common cases of single micro-op flows including micro-fusion and macro-fusion.

рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдорд╛рдЗрдХреНрд░реЛ-рдСрдкрд░реЗрд╢рдВрд╕ рдореЗрдВ рдбрд┐рдХреЛрдб рдХрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢ (рдЬреИрд╕реЗ рдХрд┐ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдИ рдЧрдИ рдореЗрдореЛрд░реА рдХреЗ рдХреБрдЫ рдЖрдХрд╛рд░реЛрдВ рдореЗрдВ libc рдореЗрдВ рдореЗрдореЗрдХрдкреА рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ movsb) рдорд╛рдЗрдХреНрд░реЛрдХреЛрдб рд╕реАрдХреНрд╡реЗрдВрд╕рд░ (MS ROM) рд╕реЗ рдЖрддреЗ рд╣реИрдВред рд╕реАрдХреНрд╡реЗрдВрд╕рд░ рдХрд╛ рд╢рд┐рдЦрд░ рдмреИрдВрдбрд╡рд┐рдбреНрде рдкреНрд░рддрд┐ рдЪрдХреНрд░ 4 рдорд╛рдЗрдХреНрд░реЛ-рдСрдкрд░реЗрд╢рди рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЕрд╕реЗрдВрдмрд▓реА рд▓рд╛рдЗрди рдЖрд░реЗрдЦ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓рд┐рдЧреЗрд╕реА рдбрд┐рдХреЛрдб рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕реНрдХрд╛рдЗрд▓реЗрдХ рдкрд░ рдкреНрд░рддрд┐ рдЪрдХреНрд░ 5 рдорд╛рдЗрдХреНрд░реЛ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдбрд┐рдХреЛрдб рдХрд░ рд╕рдХрддреА рд╣реИред рдмреНрд░реЙрдбрд╡реЗрд▓ рдФрд░ рдкреБрд░рд╛рдиреЗ рдкрд░, рд▓рд┐рдЧреЗрд╕реА рдбрд┐рдХреЛрдб рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреА рдЪреЛрдЯреА рдереНрд░реВрдкреБрдЯ рдкреНрд░рддрд┐ рдЪрдХреНрд░ 4 рдорд╛рдЗрдХреНрд░реЛ-рдСрдкрд░реЗрд╢рди рдереАред

рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЗрд╢рди рдХреИрд╢

рдирд┐рд░реНрджреЗрд╢ рдорд╛рдЗрдХреНрд░реЛрдкрд░реЗрд╢рди рдореЗрдВ рдбрд┐рдХреЛрдб рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд▓рд┐рдЧреЗрд╕реА рдбрд┐рдХреЛрдб рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕реЗ рд╡реЗ рд╡рд┐рд╢реЗрд╖ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЗрд╢рди рдХрддрд╛рд░ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ - рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдбрд┐рдХреЛрдб рдХреНрдпреВ (рдЖрдИрдбреАрдХреНрдпреВ), рд╕рд╛рде рд╣реА рддрдерд╛рдХрдерд┐рдд рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЗрд╢рди рдХреИрд╢ (рдбрд┐рдХреЛрдбреЗрдб рдЖрдИрд╕реАрдП, рдХреИрд╢)ред рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЗрд╢рди рдХреИрд╢ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕реИрдВрдбреА рдмреНрд░рд┐рдЬ рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдЗрдХреНрд░реЛрдПрдкрд░реЗрд╢рдВрд╕ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рди рдФрд░ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ IDQ - 6 рдкреНрд░рддрд┐ рдЪрдХреНрд░ рддрдХ рдорд╛рдЗрдХреНрд░реЛрдСрдкрд░реЗрд╢рди рджреЗрдиреЗ рдореЗрдВ рдереНрд░реВрдкреБрдЯ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИред IDQ рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, microoperations рдкреНрд░рддрд┐ рдЪрдХреНрд░ 4 microoperations рдХреЗ рд╢рд┐рдЦрд░ рдкреНрд░рд╡рд╛рд╣ рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдмреИрдХ рдПрдВрдб рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред

рдЗрдВрдЯреЗрд▓ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЗрд╢рди рдХреИрд╢ рдореЗрдВ 32 рд╕реЗрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрдЯ рдореЗрдВ 8 рд▓рд╛рдЗрдиреЗрдВ рд╣реЛрддреА рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рд▓рд╛рдЗрди 6 рдорд╛рдЗрдХреНрд░реЛ рдСрдкрд░реЗрд╢рдВрд╕ (рдорд╛рдЗрдХреНрд░реЛ / рдореИрдХреНрд░реЛ рдлреНрдпреВрдЬреНрдб) рддрдХ рдХреИрд╢ рдХрд░ рд╕рдХрддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХреБрд▓ рдХреИрд╢ 32 * 8 * 6 = 1536 рдорд╛рдЗрдХреНрд░реЛ рдСрдкрд░реЗрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред ред рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЗрд╢рди рдХреИрд╢рд┐рдВрдЧ 32 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рджрд╛рдиреЗ рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рд╡рд┐рднрд┐рдиреНрди 32-рдмрд╛рдЗрдЯ рдХреНрд╖реЗрддреНрд░реЛрдВ рд╕реЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕реВрдХреНрд╖реНрдо-рд╕рдВрдЪрд╛рд▓рди рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдирд╣реАрдВ рдЧрд┐рд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, 3 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреИрд╢ рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдПрдХ 32-рдмрд╛рдЗрдЯ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, upop рдХреИрд╢ рдореЗрдВ 18 рдорд╛рдЗрдХреНрд░реЛрдкрд░реЗрд╢рдВрд╕ рдкреНрд░рддреНрдпреЗрдХ 32-рдмрд╛рдЗрдЯ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрдВрдЯреЗрд▓ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЕрдиреБрдХреВрд▓рди рдореИрдиреБрдЕрд▓ / 2.5.5.2
The Decoded ICache consists of 32 sets. Each set contains eight Ways. Each Way can hold up to six micro-ops. The Decoded ICache can ideally hold up to 1536 micro-ops. The following are some of the rules how the Decoded ICache is filled with micro-ops:

  • ll micro-ops in a Way represent instructions which are statically contiguous in the code and have their EIPs within the same aligned 32-byte region.
  • Up to three Ways may be dedicated to the same 32-byte aligned chunk, allowing a total of 18 micro-ops to be cached per 32-byte region of the original IA program.
  • A multi micro-op instruction cannot be split across Ways.
  • Up to two branches are allowed per Way.
  • An instruction which turns on the MSROM consumes an entire Way.
  • A non-conditional branch is the last micro-op in a Way.
  • Micro-fused micro-ops (load+op and stores) are kept as one micro-op.
  • A pair of macro-fused instructions is kept as one micro-op.
  • Instructions with 64-bit immediate require two slots to hold the immediate.


Agner Fog рдореЗрдВ рдпрд╣ рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рд╕рд┐рдВрдЧрд▓ рд▓рд╛рдЗрди рдорд╛рдЗрдХреНрд░реЛ-рдСрдкрд░реЗрд╢рдВрд╕ рдкреНрд░рддрд┐ рдЪрдХреНрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (Intel рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЬрд╛рдБрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред

┬╡op cache --> IDQ


рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдлреНрд░рдВрдЯ рдПрдВрдб рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП nop1-рдмрд╛рдЗрдЯ рд▓рдВрдмрд╛рдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ ред рдЙрд╕реА рд╕рдордп, рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдлреНрд░рдВрдЯ рдПрдВрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рди рдХрд┐ рдХрд┐рд╕реА рднреА рдХрд╛рд░рдг рд╕реЗ рдмреИрдХ рдПрдВрдб рдкрд░ рд░рд┐рд╕реЛрд░реНрд╕ рд╕реНрдЯреЙрд▓ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ nop, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЕрдиреНрдп рдирд┐рд░реНрджреЗрд╢ рднреА, рдЙрдиреНрд╣реЗрдВ рд▓реАрдЧреЗрд╕реА рдбрд┐рдХреЛрдб рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдбрд┐рдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, IDop рдХреИрд╢ рдореЗрдВ рдорд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ IDQ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ nop, рд╕рд╛рде рд╣реА рдЕрдиреНрдп рдирд┐рд░реНрджреЗрд╢, рд╡рд╛рдкрд╕ рдЕрдВрдд рд▓реЗрддрд╛ рд╣реИред рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдмреИрдХ рдПрдВрдб рдкрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ nopрдХрд╛ рдХреЗрд╡рд▓ рд░рд╛рдЙрдЯрд░ рдмрдлрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд░рд┐рдЬрд░реНрд╡реЗрд╢рди рд╕реНрдЯреЗрд╢рди (рдЙрд░реНрдл рд╢реЗрдбреНрдпреВрд▓рд░) рдореЗрдВ рд╕реНрд▓реЙрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд░рд╛рдЙрдЯрд░ рдмрдлрд░ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рдпрд╣ nopрд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ, рдЬрд┐рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдореЗрдВ рдЖрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдереНрд░реВрдкреБрдЯ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ

void test_decoded_icache(size_t iteration_count);

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ nasm:

align 32
test_decoded_icache:
    ;nop',  0  23 
    dec rdi
    ja test_decoded_icache
    ret

jaрдЗрд╕реЗ рд╕рдВрдпреЛрдЧ рд╕реЗ рдирд╣реАрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред jaрдФрд░ decрд╡рд┐рднрд┐рдиреНрди рдЭрдВрдбреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ - рд╕реЗ jaрдкрдврд╝рддрд╛ рд╣реИ CFрдФрд░ ZF, decрд╕реАрдПрдл рдореЗрдВ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдХреНрд░реЛ рдлреНрдпреВрдЬрди рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдПрдХ рдЪрдХреНрд░ рдореЗрдВ microoperations рдЧрд┐рдирддреА рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрджреЗрд╢ рдПрдХ microoperation рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред

рдорд╛рдк рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреВрд░реНрдг рдШрдЯрдирд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

1. uops_issued.any- рд░реЗрдирдорд░ рдЖрдИрдбреАрдХреНрдпреВ рд╕реЗ рд▓реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реВрдХреНрд╖реНрдо рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрдВрдЯреЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЧрд╛рдЗрдб рдЗрд╕ рдШрдЯрдирд╛ рдХреЛ рдорд╛рдЗрдХреНрд░реЛ-рд╕рдВрдЪрд╛рд▓рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрдЬ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд░реЗрдирдорд░ рд░рд┐рдЬрд░реНрд╡реЗрд╢рди рд╕реНрдЯреЗрд╢рди рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ:
рд░рд┐рдЬрд╝рд░реНрд╡реЗрд╢рди рд╕реНрдЯреЗрд╢рди (RS) рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрди рдЖрд╡рдВрдЯрди рддрд╛рд▓рд┐рдХрд╛ (RAT) рдХреЗ рд▓рд┐рдП рдпреВрдУрдкреА рдХреА рд╕рдВрдЦреНрдпрд╛ рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ рд╡рд┐рд╡рд░рдг рдЙрди рдореВрд▓реНрдпреЛрдВ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрдмрджреНрдз рдирд╣реАрдВ рд╣реИ рдЬреЛ рдкреНрд░рдпреЛрдЧреЛрдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╡реЗ nopрдЗрд╕ рдХрд╛рдЙрдВрдЯрд░ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рддрдереНрдп рд╣реИ рдХрд┐ рдЖрд░рдХреНрд╖рдг рд╕реНрдЯреЗрд╢рди рдкрд░ рдЙрдирдХреА рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

2. uops_retired.retire_slots- рдЦрд╛рддреЗ рд╕реВрдХреНрд╖реНрдо / рд╡реГрд╣рдж рд╕рдВрд▓рдпрди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдХрд░ рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрдд microoperations рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛

3. uops_retired.stall_cyclesрдЯрд┐рдХ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╡рд╣рд╛рдБ рдПрдХ рднреА рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрдд microoperation рдирд╣реАрдВ рдерд╛ рдХреА рд╕рдВрдЦреНрдпрд╛ -

4. resource_stalls.any- рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрдиреНрд╡реЗрдпрд░ рдХреА рдЯрд┐рдХ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдмреИрдХ рдПрдВрдб рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреА рдЕрдкреНрд░рд╛рдкреНрдпрддрд╛ рдХреА рд╡рдЬрд╣ рд╕реЗ

рдЗрдВрдЯреЗрд▓ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЕрдиреБрдХреВрд▓рди рдореИрдиреБрдЕрд▓ / рдмреА рдореЗрдВ .4.1 рдПрдХ рд╕рд╛рдордЧреНрд░реА рдЖрд░реЗрдЦ рд╣реИ рдЬреЛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдШрдЯрдирд╛рдУрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ:



5. idq.all_dsb_cycles_4_uops- рдШрдбрд╝реА рдЪрдХреНрд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП 4 (рдпрд╛ рдЕрдзрд┐рдХ) рдирд┐рд░реНрджреЗрд╢ .op рдХреИрд╢ рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЧрдП рдереЗред

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдореАрдЯреНрд░рд┐рдХ рдкреНрд░рддрд┐ рдЪрдХреНрд░ рдореЗрдВ 4 рд╕реЗ рдЕрдзрд┐рдХ рдорд╛рдЗрдХреНрд░реЛрдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЗ рд╡рд┐рддрд░рдг рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ, рдЗрдВрдЯреЗрд▓ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░рдпреЛрдЧреЛрдВ рд╕реЗ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕рд╣рдордд рд╣реИред

6. idq.all_dsb_cycles_any_uops- рдЙрдкрд╛рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рдПрдХ рдорд╛рдЗрдХреНрд░реЛ-рдСрдкрд░реЗрд╢рди рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

7. idq.dsb_cycles- рдХреБрд▓ рдХрд┐рддрдиреЗ рдЙрдкрд╛рдпреЛрдВ рдкрд░ рдбрд┐рд▓реАрд╡рд░реА --op рдХреИрд╢ рд╕реЗ рд╣реБрдИ рдереАред

8. idq_uops_not_delivered.cycles_le_N_uop_deliv.core- рдЙрди рдЙрдкрд╛рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рдЬрд┐рдирдХреЗ рд▓рд┐рдП Renamer рдиреЗ рдПрдХ Nрдпрд╛ рдПрдХ рд╕реЗ рдХрдо рдорд╛рдЗрдХреНрд░реЛрдСрдкрд░реЗрд╢рди рд▓рд┐рдП рдФрд░ рдмреИрдХ рдПрдВрдб рдХреА рддрд░рдл рдХреЛрдИ рдбрд╛рдЙрдирдЯрд╛рдЗрдо рдирд╣реАрдВ рдерд╛ , N- 1, 2, 3.

рд╣рдо рд░рд┐рд╕рд░реНрдЪ рдХреЗ рд▓рд┐рдП рд▓реЗрддреЗ рд╣реИрдВ iteration_count = 1 << 31ред рд╣рдо рд╕реАрдкреАрдпреВ рдореЗрдВ рдЬреЛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЙрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рд╕реВрдХреНрд╖реНрдо рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдФрд╕рдд рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрддрд┐ рдмреИрдВрдбрд╡рд┐рдбреНрде рдХреЛ рдорд╛рдкрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреНред uops_retired.retire_slots/uops_retired.total_cycle:



рдЖрдкрдХреА рдЖрдВрдЦ рдЬреЛ рддреБрд░рдВрдд рдкрдХрдбрд╝рддреА рд╣реИ рд╡рд╣ 7 рд╕реВрдХреНрд╖реНрдо-рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдЪрдХреНрд░ рдЖрдХрд╛рд░ рдореЗрдВ рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрддрд┐ рдереНрд░реВрдкреБрдЯ рдХрд╛ рдЙрдкрдЦрдВрдб рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ --op рдХреИрд╢ рд╕реЗ рдФрд╕рдд рдбрд┐рд▓реАрд╡рд░реА рдХреА рдЧрддрд┐ рдХреИрд╕реЗ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ idq.all_dsb_cycles_any_uops / idq.dsb_cycles:



рдФрд░ рдХреБрд▓ рдЙрдкрд╛рдп рдФрд░ рдЙрдкрд╛рдп рдЬрд┐рдирдХреЗ рд▓рд┐рдП ioop рдХреИрд╢ рдХреЛ IDQ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:



рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ 6 рдорд╛рдЗрдХреНрд░реЛ рдСрдкрд░реЗрд╢рди рдХреЗ рдПрдХ рдЪрдХреНрд░ рдХреЗ рд╕рд╛рде рд╣рдо рдПрдХ рдкреНрд░рднрд╛рд╡реА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдХреИрд╢ рд╕рдВрдЪрдп рдмреИрдВрдбрд╡рд┐рдбреНрде рдЙрдкрдпреЛрдЧ - рдкреНрд░рддрд┐ рдЪрдХреНрд░ 6 рдорд╛рдЗрдХреНрд░реЛ рдСрдкрд░реЗрд╢рдиред рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ Renamer рдЬрд┐рддрдирд╛ рдХреИрд╢ рдбрд┐рд▓реАрд╡рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, cacheop cache cycles рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдХреБрдЫ рднреА рдбрд┐рд▓реАрд╡рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкрд┐рдЫрд▓реЗ рдЧреНрд░рд╛рдлрд╝ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред

7 рдорд╛рдЗрдХреНрд░реЛрдСрдкрд░реЗрд╢рди рдХреЗ рдЪрдХреНрд░ рдХреЗ рд╕рд╛рде, рд╣рдореЗрдВ cacheop рдХреИрд╢ рдХреЗ 3.5-рдкреНрд░рддрд┐ рдорд╛рдЗрдХреНрд░реЛрдСрдкрд░реЗрд╢рди рдХреЗ рдереНрд░реВрдкреБрдЯ рдореЗрдВ рддреЗрдЬ рдЧрд┐рд░рд╛рд╡рдЯ рдорд┐рд▓рддреА рд╣реИред рдЙрд╕реА рд╕рдордп, рдЬреИрд╕рд╛ рдХрд┐ рдкрд┐рдЫрд▓реЗ рдЧреНрд░рд╛рдл рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, isop рдХреИрд╢ рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░рдЪрд╛рд▓рди рдореЗрдВ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, 7 microoperations рдХреЗ рдПрдХ рдЪрдХреНрд░ рдХреЗ рд╕рд╛рде, рд╣рдореЗрдВ рдмреИрдВрдбрд╡рд┐рдбреНрде cacheop рдХреИрд╢ рдХрд╛ рдЕрдХреНрд╖рдо рдЙрдкрдпреЛрдЧ рдорд┐рд▓рддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдкреНрд░рддрд┐ рдЪрдХреНрд░ isop рдХреИрд╢ рдХреЗрд╡рд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рд╕реЗ рдорд╛рдЗрдХреНрд░реЛрдПрд░реЗрд╕реЗрд░ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред Microoperations 7 рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ - рдкрд╣рд▓реЗ 6 рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рдФрд░ рд╢реЗрд╖ 7 рд╡реЗрдВ - рджреВрд╕рд░реЗ рдореЗрдВред рдЗрд╕ рддрд░рд╣, рд╣рдореЗрдВ рдкреНрд░рддрд┐ рдЪрдХреНрд░ рдореЗрдВ 7 рдорд╛рдЗрдХреНрд░реЛ-рдСрдкрд░реЗрд╢рди рдпрд╛ рдкреНрд░рддрд┐ рдЪрдХреНрд░ 3.5 рдорд╛рдЗрдХреНрд░реЛ-рдСрдкрд░реЗрд╢рди рдорд┐рд▓рддреЗ рд╣реИрдВред

рдЕрдм рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд░реЗрдирдореЗрд░ рдЖрдИрдбреАрдХреНрдпреВ рд╕реЗ рдорд╛рдЗрдХреНрд░реЛ-рдСрдкрд░реЗрд╢рди рдХреИрд╕реЗ рд▓реЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП idq_uops_not_delivered.coreрдФрд░ idq_uops_not_delivered.cycles_le_N_uop_deliv.core:



рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ 7 рдорд╛рдЗрдХреНрд░реЛрдСрдкрд░реЗрд╢рди рдХреЗ рд╕рд╛рде, рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХреЗрд╡рд▓ 3 рдорд╛рдЗрдХреНрд░реЛрдСрдкрд░реЗрд╢рди рдЖрдзреЗ Renamer рдЪрдХреНрд░ рд▓реЗрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рд╕реЗ рд╣рдореЗрдВ рдкреНрд░рддрд┐ рдЪрдХреНрд░ рдФрд╕рддрди 3.5 рдорд╛рдЗрдХреНрд░реЛ-рдСрдкрд░реЗрд╢рди рдХрд╛ рд░рд┐рдЯрд╛рдпрд░рдореЗрдВрдЯ рдереНрд░реВрдкреБрдЯ рдорд┐рд▓рддрд╛ рд╣реИред

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рджреЗрдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрддрд┐ рдХреЗ рдкреНрд░рднрд╛рд╡реА рдереНрд░реВрдкреБрдЯ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ ред рдЙрдиред рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ uops_retired.stall_cycles:



рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ 7 рдорд╛рдЗрдХреНрд░реЛрдПрд░реЗрд╢рдВрд╕ рдХреЗ рд╕рд╛рде, 4 рдорд╛рдЗрдХреНрд░реЛрдкреЗрд░реЗрд╢рди рдХреЗ рдкреНрд░рддреНрдпреЗрдХ 7 рдЙрдкрд╛рдпреЛрдВ рдХреА рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрддрд┐ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рд╣рд░ 8 рд╡реЗрдВ рдЙрдкрд╛рдп рдмрд┐рдирд╛ рд░рд┐рдЯрд╛рдпрд░ рдХрд┐рдП рдЧрдП рдорд╛рдЗрдХреНрд░реЛрдкрд░реЗрд╢рдВрд╕ (рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрддрд┐ рд╕реНрдЯрд╛рд▓) рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реИред рдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЖрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╕рдВрднрд╡ рдерд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╣рдореЗрд╢рд╛ 7 рдорд╛рдЗрдХреНрд░реЛрдПрдкрд░реЗрд╢рдВрд╕ рдХреЗ рджреМрд░рд╛рди рджреЗрдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЙрдирдХреЗ рд▓реЗрдЖрдЙрдЯ 1-6, 6-1, 2-5, 5-2, 3-4, 4-3 рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реИ, рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдШрдбрд╝реА рдЪрдХреНрд░ рдореЗрдВ 3 рдорд╛рдЗрдХреНрд░реЛрдПрд░реЗрд╢рдВрд╕ рдХреА рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрддрд┐, рдФрд░ рдЕрдЧрд▓реЗ рдореЗрдВ 4 рдХреА рдЬрд╛рддреА рд╣реИред Agner Fog рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдХрд┐ рд╢рд╛рдЦрд╛ рд╕рдВрдХреНрд░рдордг рдХреЗрд╡рд▓ рд░рд┐рдЯрд╛рдпрд░рдореЗрдВрдЯ рд╕реНрдЯреЗрд╢рди рд╕реНрд▓реЙрдЯ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╢рд╛рдпрдж рдпрд╣ рдкреНрд░рддрд┐рдмрдВрдз рдЗрд╕ рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрддрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдХрд╛рд░рдг рд╣реИред

рдЙрджрд╛рд╣рд░рдг


рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕рдм рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдкреНрд░рднрд╛рд╡ рдбрд╛рд▓рддрд╛ рд╣реИ, nopрдПрд╕ рдХреЗ рд╕рд╛рде рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ :

рджреЛ рд╕рд░рдгрд┐рдпрд╛рдВ рджреА рдЧрдИ рд╣реИрдВ unsignedред рдкреНрд░рддреНрдпреЗрдХ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд▓рд┐рдП рдЕрдВрдХрдЧрдгрд┐рддреАрдп рд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдпреЛрдЧ рдЬрдорд╛ рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рддреАрд╕рд░реЗ рд╕рд░рдгреА рдореЗрдВ рд▓рд┐рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ:


static unsigned arr1[] = { ... };

static unsigned arr2[] = { ... };

static void arithmetic_mean(unsigned *arr1, unsigned *arr2, unsigned *out, size_t sz){
    unsigned sum = 0;
    size_t idx = 0;
    while(idx < sz){
        sum += (arr1[idx] + arr2[idx]) >> 1;
        out[idx] = sum;
        idx++;
    }
    __asm__ __volatile__("" ::: "memory");
}

int main(void){
    unsigned out[sizeof arr1 / sizeof(unsigned)];
    for(size_t i = 0; i < 4096 * 4096; i++){
        arithmetic_mean(arr1, arr2, out, sizeof arr1 / sizeof(unsigned));
    }
}

рдЬреАрд╕реАрд╕реА рдЭрдВрдбреЗ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рди

-Werror
-Wextra
-Wall
-pedantic
-Wno-stack-protector
-g3
-O3
-Wno-unused-result
-Wno-unused-parameter

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди arithmetic_meanрдХреЛрдб рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдФрд░ рд╕реАрдзреЗ рдЗрд╕рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рдПрдЧрд╛ main:

(gdb) disas main
Dump of assembler code for function main:
   #...
   0x00000000000005dc <+60>:    nop    DWORD PTR [rax+0x0]
   0x00000000000005e0 <+64>:    mov    edx,DWORD PTR [rdi+rax*4]
   0x00000000000005e3 <+67>:    add    edx,DWORD PTR [r8+rax*4]
   0x00000000000005e7 <+71>:    shr    edx,1
   0x00000000000005e9 <+73>:    add    ecx,edx
   0x00000000000005eb <+75>:    mov    DWORD PTR [rsi+rax*4],ecx
   0x00000000000005ee <+78>:    add    rax,0x1
   0x00000000000005f2 <+82>:    cmp    rax,0x80
   0x00000000000005f8 <+88>:    jne    0x5e0 <main+64>
   0x00000000000005fa <+90>:    sub    r9,0x1
   0x00000000000005fe <+94>:    jne    0x5d8 <main+56>
   #...

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдиреЗ рд▓реВрдк рдХреЛрдб рдХреЛ 32 рдмрд╛рдЗрдЯреНрд╕ ( nop DWORD PTR [rax+0x0]) рдореЗрдВ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рд╣реИ , рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐ рдХреЛрдИ resource_stalls.anyрдмреИрдХ рдПрдВрдб рдирд╣реАрдВ рд╣реИ (рд╕рднреА рдорд╛рдк рдЧрд░реНрдо рдХрд┐рдП рдЧрдП L1d рдХреИрд╢ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдХрд┐рдП рдЧрдП рд╣реИрдВ), рд╣рдо IDQ рдкрд░ рдбрд┐рд▓реАрд╡рд░реА рд╕реЗ рдЬреБрдбрд╝реЗ рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 Performance counter stats for './test_decoded_icache':

     2тАп273тАп343тАп251      idq.all_dsb_cycles_4_uops                                     (15,94%)
     4тАп458тАп322тАп025      idq.all_dsb_cycles_any_uops                                     (16,26%)
    15тАп473тАп065тАп238      idq.dsb_uops                                                  (16,59%)
     4тАп358тАп690тАп532      idq.dsb_cycles                                                (16,91%)
     2тАп528тАп373тАп243      idq_uops_not_delivered.core                                     (16,93%)
        73тАп728тАп040      idq_uops_not_delivered.cycles_0_uops_deliv.core                                     (16,93%)
       107тАп262тАп304      idq_uops_not_delivered.cycles_le_1_uop_deliv.core                                     (16,93%)
       108тАп454тАп043      idq_uops_not_delivered.cycles_le_2_uop_deliv.core                                     (16,65%)
     2тАп248тАп557тАп762      idq_uops_not_delivered.cycles_le_3_uop_deliv.core                                     (16,32%)
     2тАп385тАп493тАп805      idq_uops_not_delivered.cycles_fe_was_ok                                     (16,00%)
    15тАп147тАп004тАп678     uops_retired.retire_slots
    4тАп724тАп790тАп623      uops_retired.total_cycles
       
     1,228684264 seconds time elapsed

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрддрд┐ рдХреА рдЦрд╝рд░рд╛рдмрддрд╛ = 15147004678/4724790623 = 3.20585733562, рдФрд░ рдпрд╣ рднреА рдХрд┐ рдХреЗрд╡рд▓ 3 рдорд╛рдЗрдХреНрд░реЛрдПрд░реЗрдиреЗрд╢рди рд░реЗрдирдорд░ рдХреА рдЖрдзреА рдШрдбрд╝рд┐рдпрд╛рдБ рд▓реЗрддреЗ рд╣реИрдВред

рдЕрдм рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдореИрдиреБрдЕрд▓ рд▓реВрдк рдкрджреЛрдиреНрдирддрд┐ рдЬреЛрдбрд╝реЗрдВ:

static void arithmetic_mean(unsigned *arr1, unsigned *arr2, unsigned *out, size_t sz){
    unsigned sum = 0;
    size_t idx = 0;
    if(sz & 2){
        sum += (arr1[idx] + arr2[idx]) >> 1;
        out[idx] = sum;
        idx++;
    }
    while(idx < sz){
        sum += (arr1[idx] + arr2[idx]) >> 1;
        out[idx] = sum;
        idx++;
        sum += (arr1[idx] + arr2[idx]) >> 1;
        out[idx] = sum;
        idx++;  //   idx++     idx+=2
    }
    __asm__ __volatile__("" ::: "memory");
}

рдкрд░рд┐рдгрд╛рдореА рдкреВрд░реНрдг рдХрд╛рдЙрдВрдЯрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ:

Performance counter stats for './test_decoded_icache':

     2тАп152тАп818тАп549      idq.all_dsb_cycles_4_uops                                     (14,79%)
     3тАп207тАп203тАп856      idq.all_dsb_cycles_any_uops                                     (15,25%)
    12тАп855тАп932тАп240      idq.dsb_uops                                                  (15,70%)
     3тАп184тАп814тАп613      idq.dsb_cycles                                                (16,15%)
        24тАп946тАп367      idq_uops_not_delivered.core                                     (16,24%)
         3тАп011тАп119      idq_uops_not_delivered.cycles_0_uops_deliv.core                                     (16,24%)
         5тАп239тАп222      idq_uops_not_delivered.cycles_le_1_uop_deliv.core                                     (16,24%)
         7тАп373тАп563      idq_uops_not_delivered.cycles_le_2_uop_deliv.core                                     (16,24%)
         7тАп837тАп764      idq_uops_not_delivered.cycles_le_3_uop_deliv.core                                     (16,24%)
     3тАп418тАп529тАп799      idq_uops_not_delivered.cycles_fe_was_ok                                     (16,24%)
     3тАп444тАп833тАп440      uops_retired.total_cycles                                     (18,18%)
    13тАп037тАп919тАп196      uops_retired.retire_slots                                     (18,17%)

    0,871040207 seconds time elapsed

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрддрд┐ рдмреИрдВрдбрд╡рд┐рдбреНрде = 13037919196/3444833440 = 3.78477491672 рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд░реЗрдирдорд░ рдмреИрдВрдбрд╡рд┐рдбреНрде рдХрд╛ рдХреБрд╢рд▓ рдЙрдкрдпреЛрдЧ рднреА рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдореЗрдВ рди рдХреЗрд╡рд▓ рдПрдХ рдмреНрд░рд╛рдВрдЪрд┐рдВрдЧ рдФрд░ рд▓реВрдк рдореЗрдВ рдПрдХ рдЗрдВрдХреНрд░реАрдореЗрдВрдЯ рдСрдкрд░реЗрд╢рди рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдорд┐рд▓рд╛, рдмрд▓реНрдХрд┐ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЗрд╢рди рдХреИрд╢ рдХреЗ рдереНрд░реВрдкреБрдЯ рдХреЗ рдХреБрд╢рд▓ рдЙрдкрдпреЛрдЧ рд╕реЗ рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрддрд┐ рдмреИрдВрдбрд╡рд┐рдбреНрде рдореЗрдВ рднреА рд╡реГрджреНрдзрд┐ рд╣реБрдИ, рдЬрд┐рд╕рдиреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдХреБрд▓ 28% рд╡реГрджреНрдзрд┐ рджреАред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рд╢рд╛рдЦрд╛ рдФрд░ рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рдореЗрдВ рдХрдореА рд╕реЗ 9% рдХреА рдФрд╕рдд рдкреНрд░рджрд░реНрд╢рди рд╡реГрджреНрдзрд┐ рд╣реЛрддреА рд╣реИред

рдЫреЛрдЯреА рдЯрд┐рдкреНрдкрдгреА


рдЗрди рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реАрдкреАрдпреВ рдкрд░, рдПрд▓рдПрд╕рдбреА рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрд▓рдПрд╕рдбреА рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред рдПрд▓рдПрд╕рдбреА рд╕рдХреНрд╖рдо рдХреЗ рд╕рд╛рде рд╕реАрдкреАрдпреВ рдХреЗ рд▓рд┐рдП, рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреА рдЕрд▓рдЧ рд╕реЗ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

All Articles