Oracle Solaris Studio 12.2:性能分析器

OpenMP 分析数据的用户模式视图

分析数据的用户模式显示尝试提供信息,好像程序按照OpenMP 软件执行概述中所述的直观模型实际执行一样。在计算机模式下显示的实际数据捕获运行时库 libmtsk.so(它不对应于模型)的实现详细信息。专家模式显示为匹配模型而改变的混合数据和实际数据。

在用户模式下,更改了分析数据的显示以便更好地匹配模型,在以下三个方面不同于记录的数据和机器模式显示:

人工函数

构造人工函数,并将其放置在用户模式和专家模式调用堆栈上,以反映线程在 OpenMP 运行时库中处于某个状态的事件。

定义了以下人工函数:

<OMP-overhead>

在 OpenMP 库中执行 

<OMP-idle>

从属线程,等待工作 

<OMP-reduction>

执行归约操作的线程 

<OMP-implicit_barrier>

在隐式屏障处等待的线程 

<OMP-explicit_barrier>

在显式屏障处等待的线程 

<OMP-lock_wait>

等待锁定的线程 

<OMP-critical_section_wait>

等待进入临界段的线程 

<OMP-ordered_section_wait>

等待轮流进入排序段的线程 

<OMP-atomic_section_wait>

等待 OpenMP 原子构造的线程。 

当线程处于对应于其中一个人工函数的 OpenMP 运行时状态时,会将该人工函数作为堆栈上的叶函数添加。当线程的实际叶函数处于 OpenMP 运行时中的任意位置时,<OMP-overhead> 将作为叶函数替换它。否则,从用户模式堆栈中忽略 OpenMP 运行时中的所有 PC。

对于 OpenMP 3.0 程序,不使用 <OMP-overhead> 人工函数。由“OpenMP 开销”度量替换人工函数。

用户模式调用栈

对于 OpenMP 实验,用户模式显示重构的调用堆栈,这些重构的调用堆栈类似于在不使用 OpenMP 的情况下编译程序时获取的调用堆栈。目的在于以与程序的直观了解相匹配的方式提供分析数据,而不是显示实际处理的所有详细信息。当 OpenMP 运行时库正在执行某些特定操作时,协调主线程和从属线程的调用堆栈,并将人工 <OMP-*> 函数添加到调用堆栈。