Oracle® Solaris Studio 12.4:性能分析器教程

退出打印视图

更新时间: 2014 年 12 月
 
 

了解硬件计数器 CPU 周期分析度量

教程的此部分需要一个包含来自 cycles 计数器的数据的实验。如果您的系统不支持此计数器,则在本节中无法使用您的实验。请跳到下一节了解高速缓存争用和高速缓存分析度量

  1. 选择 "Overview"(概述)页面,然后启用派生的度量 "Cycles Per Instruction"(每个指令的周期数)和 "General Hardware Counter"(常规硬件计数器)度量、"CPU Cycles"(CPU 周期)。

    应该保持选中 "Inclusive Total CPU"(包含总 CPU)和 "Instructions Executed"(执行的指令)。

    image:“CPU Cycles“(CPU 周期)和 “Cycles Per Instruction“(每个指令的周期数)的复选框
  2. 返回到 computeB() 的 "Source"(源)视图。

    image:性能分析器中函数 computeB 的 “Source“(源)视图

    请注意 "Incl. CPU Cycles"(包含 CPU 周期)时间和 "Incl. Total CPU Time"(包含总 CPU 时间)在每个 compute*() 函数中大致相等。.这表示时钟分析和 CPU 周期硬件计数器分析正在获取类似的数据。

    在屏幕抓图中,"Incl. CPU Cycles"(包含 CPU 周期)和 "Incl. Total CPU Time"(包含总 CPU 时间)对于每个 compute*() 函数(computeB() 除外)都约为 12 秒。在实验中您还应该看到,"Incl. Cycles Per Instruction (CPI)"(包含 每个指令的周期数 (CPI))对于 computeB() 要比对于其他 compute*() 函数高得多。这表示需要更多的 CPU 周期来执行相同数量的指令,因此 computeB() 比其他函数的效率低。

目前为止您看到的数据显示了 computeB() 函数与其他函数之间的差异,但是未显示它们可能不同的原因。本教程的下一部分将说明为什么 computeB() 是不同的。