Code Generation and Separate Compilation in a Parallel Program Debugger
Jong-Deok Choi and Barton P Miller
The Parallel Program Debugger (PPD) allows a programmer to find bugs by following dynamic dependences in a programís execution; this technique is called flowback analysis. Flowback analysis requires the tracing of all variable references and modifications. PPD avoids the overhead of this tracing by recording only a subset of the programís state during execution, and incrementally filling in the missing details when the programmer makes queries about execution dependences. There is a trade-off between overhead of the tracing during program execution and the speed of generating the missing details during user queries. Our compiler is divided into four phases. This separation of phases allows us to first compile separate files, and to generate code for these files. Second, we perform interprocedural analysis using the data structures generated by the first phase. Third, we modify the individual assembly files to account for optimizations to the tracing, and to generate tracing for shared variables. The last phase links together all the individual files. The compiling costs for our debugging system are several times higher than the standard system compiler. Initial results show that there is a large execution time cost savings by carefully selecting the data to be traced during program execution. The savings includes both the size of the trace file and execution time overhead. The most sensitive areas seem to involve small procedures, long-running loops, or arrays.
Download this report (PDF)
Return to tech report index