<
comm^
4 >
;proc is a set that contains the PIDs of the processors. exch defines a single message, and comm is a collection of 16 messages each being sent by one of the processors. The whole behavior consists of 4 phases, one causally following the other, where each phase consists of 16 messages being sent. The angular brackets in the match statement indicate that precedes should hold between successive phases. The initial behavioral description produced the following Ave feedback without the colored bars appearing at the bottom. Note that the display collapses the behavior at the p-chain level. But since the chain level description is not data-dependent, the number of partitions is 1 in all cases, and is not shown.
Figure: Ave feedbak in the FFT example.
Notice that in Ariadne, we do not have a way to specify the distances
over which the communication should take place, or the receiver's PID
at the chain level. This is not a limitation however, since once the match
is done with a loose pattern definition, we can then compute the attributes
of the matched events very easily.
? attach to exch {int distance = pid(W) - pid(R)};
In Ave, the attachment of attributes are handled in two ways: Ave can show the attributes in numerical form along the nodes, or it can do an attribute collapsing using colors. For instance, after the attributes are calculated, the attribute set is partitioned, with each partition getting a distinct color. Each uncollapsed node then gets colored by the color of the attribute. In case of collapsed nodes, the colored bar appears at the bottom of the node. The color scheme makes the grouping of related events readily obvious.
Note in this case, each phase of the pattern fft should have 16 bars
all with the same color under them
(all nodes who communicate in the i-th phase should be at a distance
apart, where i = 0..3).
However Ave produced the same color only for the phase
that communicates with processors at a distance 8 from each other. For
all other phases there were 2 nodes with a different color. This
led us to the bug in the code segment which identifies the partner with whom
to exchange the values. The user made an off-by-one error in the partner
calculation, which resulted in erroneous data exchanges between some processors.