Following runs of an application through the causality engine, each node has traces that must be merged. All traces for a given node should contain the same file I/O calls, otherwise an error will be flagged indicating that the application is not deterministic.
Recall that at most one of the traces for a given node has the SIGNAL() calls for that node; this is the trace produced when the node is being throttled. The other traces for that node only have the WAIT() calls; these are the traces produced when other nodes are being throttled. After the merge, each I/O has at most preceding WAIT() calls, succeeding SIGNAL() calls, and one COMPUTE() call (obtained using Approaches 1 or 2).
The example in Figure 6 shows the trace files for a hypothetical 3-node application. In this case, every node is throttled in turn. Only the traces for node 0 are shown. A merge of these three traces will produce the final trace for node 0 (Figure 7).