The Call Stack
For OpenMP, the Call Stack identifies parallel and task regions using the annotations "#pragma omp parallel” or "#pragma omp task", depending on whether the frame is associated with an implicit (parallel) or explicit (task) task.
For example, consider an OpenMP program with a single parallel region and multiple threads. When a breakpoint is hit and you focus on a thread in the Processes & Threads view, that thread’s backtrace displays in the Call Stack, as usual:
Observe the following:
*The Call Stack is filtered, identified by the orange filter icon ().
*The parallel regions are identified with #pragma, and the displayed value reflects the source code itself. (This is in contrast to some compiler’s practice of assigning outlined functions meaningless names). For example, note that omp_task_entry is identified as a #pragma omp task to make it clear that this is an explicit task.
NOTE: The pragma annotations are language-sensitive and show "#pragma" for C/C++ OMP code and "!$omp" for Fortran code.
*Selecting the #pragma entry in the Call Stack automatically navigates to the location in the source code where #pragma was declared:
*The stack backlink to the parent thread is identified by a link icon (). In this example, the thread that has focus, or 1.7, was invoked by a parallel region in thread 1.3 in function h, identified by the popup tip when you hover a cursor over its entry in the Call Stack:
Clicking this link focuses the source pane on its parent thread’s stack frame for function h, which in turn updates the Call Stack for the backtrace for thread 1.3:
This parent/child stack linking continues through the backtrace until the initial thread 1.1, is reached.