  We describe a system that simplifies the process of debugging programs
produced by computer-aided parallelization tools. The system uses relative
debugging techniques to compare serial and parallel executions in order to show
where the computations begin to differ. If the original serial code is correct,
errors due to parallelization will be isolated by the comparison.
  One of the primary goals of the system is to minimize the effort required of
the user. To that end, the debugging system uses information produced by the
parallelization tool to drive the comparison process. In particular, the
debugging system relies on the parallelization tool to provide information
about where variables may have been modified and how arrays are distributed
across multiple processes. User effort is also reduced through the use of
dynamic instrumentation. This allows us to modify the program execution without
changing the way the user builds the executable.
  The use of dynamic instrumentation also permits us to compare the executions
in a fine-grained fashion and only involve the debugger when a difference has
been detected. This reduces the overhead of executing instrumentation.
