The design goal of our tools is to produce compact traces which can be stored for later simulations. One method for trace reduction is to produce a trace of significant dynamic events. With this technique, not all addresses that are accessed by the program are recorded, but only those that cannot be statically reconstructed. The trace output by the instrumented program is a compact trace which needs expansion before it can be used by the trace consumer, the memory simulator in our case.
As the new code is added to the instrumented code, the control instruction targets must be translated. Unfortunately, there are some control instructions for which the target cannot be calculated at instrumentation time.
The metrics used to evaluate the performance of our tools were the slowdown, the code expansion, the trace reduction factor, and the trace regeneration time. Our study shows that the performance of the abstract execution instrumentation depends strongly upon the regularity of the program's control flow and memory reference patterns. Numeric programs (OPAL in our study) with sequential access patterns and few conditional branches require less instrumentation than do non-numeric programs (such as SMV) with more irregular behavior.