Oracle® Solaris Studio 12.4:性能分析器

退出打印视图

更新时间: 2015 年 1 月
 
 

解释归属度量:示例

Figure 2–1 中说明了独占、非独占和归属度量,该图包含完整的调用树。其中的焦点是中心函数,即函数 C。

图的后面显示了该程序的伪代码。

图 2-1  说明独占、非独占和归属度量的调用树

image:说明独占、非独占和归属度量的调用树。

Main 函数调用函数 A 和函数 B,将 10 个单位的非独占度量归属函数 A 并将 20 个单位归属函数 B。这些是函数 Main 的被调用方归属度量。它们的总和 (10+20) 加上函数 Main 的独占度量等于函数 main 的非独占度量 (32)。

由于函数 A 将其所有时间都花费在对函数 C 的调用上,因此它的独占度量为 0 个单位。

函数 C 由函数 A 和函数 B 这两个函数调用,将 10 个单位的非独占度量归属函数 A 并将 15 个单位归属函数 B。这些是调用方归属度量。它们的总和 (10+15) 等于函数 C 的非独占度量 (25)。

调用方归属度量相当于函数 A 和 B 的非独占度量与独占度量之间的差异,这表示它们各自仅调用函数 C。(事实上,这些函数可能调用其他函数,但时间很短,不会显示在实验中。)

函数 C 调用函数 E 和函数 F 这两个函数,将 10 个单位的非独占度量归属函数 E 并将 10 个单位归属函数 F。这些是被调用方归属度量。它们的总和 (10+10) 加上函数 C 的独占度量 (5) 等于函数 C 的非独占度量 (25)。

对于函数 E 和函数 F 来说,被调用方归属度量和被调用方非独占度量是相同的。这表示函数 E 和函数 F 都仅由函数 C 调用。对于函数 E 来说,独占度量和非独占度量是相同的,但对于函数 F 来说则不同。这是由于函数 F 调用另一个函数(函数 G),而函数 E 没有。

下面显示了该程序的伪代码。

    main() {
       A();
       /Do 2 units of work;/
       B();
    }

    A() {
       C(10);
    }

    B() {
       C(7.5);
       /Do 5 units of work;/
       C(7.5);
    }

    C(arg) {
          /Do a total of "arg" units of work, with 20% done in C itself,
          40% done by calling E, and 40% done by calling F./
    }