9.3. Tagging and Filtering

Both concepts use the same filter grammar in their filter expressions. See Section 5.1 and Section 5.2 for usage hints.

Conceptually there is a different filter for each class of events: function events, messages and collective operations. During analysis the right filter expression is evaluated for each event and the event is tagged or passed on, if the expression is true while it is left untagged or suppressed, if the expression is false.

The behavior of a filter is determined at the time of its creation. A filter will continue filtering the same way until it is changed, even if the thread groups or function groups that it references are changed. Events will be treated as belonging to these groups based on the state of the groups at the time the filter was first created.

9.3.1. Tagging

If several events are merged as described in Section 9.1 then the merged event is tagged if at least one of the singular events is tagged.

Therefore tagging in particular together with the Qualitative Timeline Chart (see Section 4.2) is a very powerful tool to find events matching a certain criterion. This is because only if a single event out of billions matches the criteria of the tag filter, then it is guaranteed that there will be a highlighted peak in the Qualitative Timeline Chart that indicates where to zoom into the trace.

9.3.2. Filtering

If an event is suppressed by filtering then the effect is as if it were never written to the trace file. This is relatively easy to understand for messages and collective operations.

However, if a filter is designed that lets all functions except MPI pass, then there won't be holes in the Event Timeline, instead it will look as if MPI was not called. This means that it will look as if the thread was in the calling function instead of being in MPI. The same is true for the call tree and the call graph.

What happens if there are functions A, B and C in the trace where A calls B and B calls C and then suppress B by filtering it out? It would appear as if A had called C directly! This is quite different from choosing a function aggregation that does not cover B, because that will show the function group other wherever B was shown before. Again: Filtering and Aggregation are orthogonal.