Examining Groups
When you debug a multi-process program, TotalView adds processes to both a control and a
share group as the process starts. These groups are not related to either UNIX process groups. (See
Chapter 13, "About Groups, Processes, and Threads" for information on groups.)
Because a program can have more than one
control group and more than one share group, TotalView decides where to place a process based on the type of system call—which can either be
fork() or
execve()—that created or changed the process. The two types of process groups are:
Control Group
The parent process and all related processes. A control group includes children that a process forks (processes that share the same source code as the parent). It also includes forked children that subsequently call a function such as execve(). That is, a control group can contain processes that don’t share the same source code as the parent.
Control groups also include processes created in parallel programming disciplines like MPI.
Share Group
The set of processes in a control group that shares the same source code. Members of the same share group share
action points.
NOTE >> See
Chapter 21, "Group, Process, and Thread Control" for a complete discussion of groups.
TotalView automatically creates share groups when your processes fork children that call the execve() function, or when your program creates processes that use the same code as some parallel programming models such as MPI do.
TotalView names processes according to the name of the source program, using the following naming rules:
• TotalView names the parent process after the source program.
• The name for forked child processes differs from the parent in that TotalView appends a numeric suffix (.n). If you’re running an MPI program, the numeric suffix is the process’s rank in COMM_WORLD.
• If a child process calls the execve() function after it is forked, TotalView places a new executable name in angle brackets (<>).
In
Figure 215, assume that the
generate process doesn’t fork any children, and that the
filter process forks two child processes. Later, the first child forks another child, and then calls the
execve() function to execute the
expr program. In this figure, the middle column shows the names that TotalView uses.