The chain msg describes a single message by matching the send (W) and the receive (R) of the same message (@ implies following the edge that connects the send and the receive of the message). At the pchain level onsome suggests that the chain should match on atleast one processor.
Say there were 2 communication phases. On the first communication phase processors 0 and 2 sent 2 and 3 messages respectively. In the second phase only processor 3 sent 2 messages.
With data dependency permeating different hierarchical abstraction
levels, we must allow the user to control the feedback. In the above
example, the user is interested in feedback at different levels:
PtChain level: How many phases were there?
Pchain level: Which processors took part in different phases?
Chain level: How many messages did a particular processor send in a given phase? Also depending on the abstraction, a pt-chain can have more than one hierarchical level, and the user would want to know about aspects of different hierarchical abstractions separately. So we need to give users the control to meaningfully explore the match tree and provide the feedback in a hierarchical manner.
Figure: Initial feedback of Ave.
Ave produces the display shown in Figure 1 at the beginning. Note that
Ave has collapsed the behavior at the p-chain level. The node in green
rectangle represents behavior collapsed over a processor set.
Although each processor in the set executes a pattern msg+, the number of
messages sent by individual processors may be different. Ave shows it
by printing the total number of processors in the set, followed by number
of partitions. (2,2) says that there are 2 processors in the set, and there
are 2 partitions: that is the processors behaved differently.
In the
second phase since the number of processors is 1, the processor number is shown
in green, followed by a node msg^
2 showing how many messages were
sent by the processor. The user can click on the collpased node, and ask Ave to
expand it fully, and get the display shown in Figure 2. \
Ave uses the following
color scheme to show the events: All events are colored blue, the
processor sets over which behavior is collapsed is colored green.
If an event did not match, then it is
colored red. The red events, if they are present, must form the right boundary
of the display: since Ariadne stops as soon as it fails to match an event. The
only exception is when the match fails due to the failure of logical assertions:
in this case the events between which the assertion fails for the first time
is surrounded by a red rectangle (see the Gaussian elimination example).
Figure: Ave feedback with behaviors uncollapsed.
Ave's match tree oriented feedback can present information in a hierarchical fashion, and can make it easy for the user to comprehend. Later in Section 3 we give two examples where the animating the match tree itself leads the user to the bug without any further exploration.
Ariadne's scalability is translated to Ave's animation scheme, since the pchain level pattern description collapses similar behavior on the part of different processes onto a single abstract event. Once the user specified pattern has been matched, the user is free to compute different attributes of the abstract events defined in the match. Ave partitions the attribute space into equivalent classes --- each class being assigned a distinct color. This color scheme makes it possible for the user to mentally group similar abstract events.
Although the pchain level description collapses similar behavior across sets of processes, Ave can show the behavior of individual processes if so asked (as is needed in the data dependent pattern described earlier).
If the match fails, Ave displays the partial match tree (the portion that matched), with the failure point highlighted in red.