目录

  • 第1章 导读
  • 第一部分 现代CPU性能分析
    • 第2章 性能测量
    • 第3章 CPU微架构
    • 第4章 性能分析中的术语和指标
    • 第5章 性能分析方法
    • 第6章 性能分析相关的CPU特性
  • 第二部分 基于源代码的CPU优化
    • 第7章 CPU前端优化
    • 第8章 CPU后端优化
    • 第9章 优化错误投机
    • 第10章 其他调优
    • 第11章 优化多线程应用程序

第4章 性能分析中的术语和指标

  • 收集退休指令的数量

    1
    2
    
    $ perf stat -e instructions ./a.exe
      2173414 instructions
    
  • 获取所有CPU的利用率

    1
    2
    
    $ perf stat -- a.exe
      0.634874 task-clock (mesc) # 0.773 CPUs utilized
    
  • 获取负载程序的IPC

    1
    2
    3
    
    $ perf stat -e cycles,instructions -- a.exe
      2369632 cycles
      1725916 instructions # 0.73 inst per cycle
    
  • 获取负载程序微操作的发射、执行和退休数量

    1
    2
    3
    4
    
    $ perf stat -e uops_issued.any,uops_executed.thread,uops_retired.all -- a.exe
      2856278 uops_issued.any
      2720241 uops_executed.thread
      2557884 uops_retired.all
    
  • 指标cycles统计真正的CPU时钟周期数,即会考虑频率调整

  • 指标ref-cycles统计时钟周期数量,不受动态频率调整的影响

    1
    2
    3
    4
    
    $ perf stat -e cycles,ref-cycles ./a.exe
      43340884632 cycles     # 3.97 GHz
      37028245322 ref-cycles # 3.39 Ghz
          10.899462364 seconds time elapsed
    
  • 获取L1缓存未命中数量

    1
    2
    3
    4
    5
    6
    7
    8
    
    $ perf stat -e mem_load_retired.fb_hit,
                  mem_load_retired.l1_miss,
                  mem_load_retired.l1_hit,
                  mem_inst_retired.all_loads -- a.exe
      29580 mem_load_retired.fb_hit
      19036 mem_load_retired.l1_miss # 3.5% 加载动作未命中
      497204 mem_load_retired.l1_hit
      546230 mem_inst_retired.all_loads
    
  • 获取L1缓存未命中的加载动作在L2缓存中的命中情况

    1
    2
    3
    4
    5
    6
    
    $ perf stat -e mem_load_retired.l1_miss,
                  mem_load_retired.l2_hit,
                  mem_load_retired.l2_miss -- a.exe
      19036 mem_load_retired.l1_miss
      12360 mem_load_retired.l2_hit
      7188 mem_load_retired.l2_miss # 37% 未命中
    
  • 检查分支预测错误的次数

    1
    2
    3
    
    $ perf stat -e branches,branch-misses -- a.exe
      358209 branches
        14026 branch-misses # 3.92%