Oracle Solaris Studio 12.2:性能分析器

编译器生成的主体函数

编译器并行化函数中的循环或具有并行化指令的区域时,将会创建初始源代码中不存在的新主体函数。OpenMP 软件执行概述中介绍了这些函数。

编译器将重整名称 (mangled name) 分配给主体函数,这些主体函数对并行结构的类型、从中提取结构的函数名称、初始源代码中该结构的起始行号以及并行结构的序列号进行了编码。这些重整名称 (mangled name) 因微任务化库的发行版而异,但均会取消重整 (demangle) 为更易于理解的名称。

以下显示的是函数列表中显示的一个典型的由编译器生成的主体函数。


7.415      14.860      psec_ -- OMP sections from line 9 [_$s1A9.psec_]
3.873       3.903      craydo_ -- MP doall from line 10 [_$d1A10.craydo_]

从上面的示例可以看出,最先显示的是从中提取结构的函数名称,接着是并行结构的类型,然后是并行结构的行号,最后在方括号中显示的是由编译器生成的主体函数的重整名称 (mangled name)。类似地,在反汇编代码中,也会生成一个特殊索引行。


0.       0.            <Function: psec_ -- OMP sections from line 9 [_$s1A9.psec_]>
0.       7.445         [24]    1d8cc:  save        %sp, -168, %sp
0.       0.            [24]    1d8d0:  ld          [%i0], %g1
0.       0.            [24]    1d8d4:  tst         %i1

0.       0.            <Function: craydo_ -- MP doall from line 10 [_$d1A10.craydo_]>
0.       0.030         [ ?]    197e8:  save        %sp, -128, %sp
0.       0.            [ ?]    197ec:  ld          [%i0 + 20], %i5
0.       0.            [ ?]    197f0:  st          %i1, [%sp + 112]
0.       0.            [ ?]    197f4:  ld          [%i5], %i3

对于 Cray 指令,函数可能与源代码行号不相关。在这种情况下,会在行号的位置显示 [ ?]。如果索引行显示在带注释的源代码中,则该索引行指示不带行号的指令,如下所示。


                     9. c$mic  doall shared(a,b,c,n) private(i,j,k)
                  
                   Loop below fused with loop on line 23
                   Loop below not parallelized because autoparallelization 
                     is not enabled
                   Loop below autoparallelized
                   Loop below interchanged with loop on line 12
                   Loop below interchanged with loop on line 12
3.873     3.903         <Function: craydo_ -- MP doall from line 10 [_$d1A10.craydo_],
                      instructions without line numbers>
0.        3.903     10.            do i = 2, n-1

注 –

在实际显示中,索引行和编译器注释行并不换行。