Optimization of data-parallel languages compounds the difficulty of
the problem of parallel debugging. While the constrained structure of
such languages is intended to simplify the job of the parallel
programmer, the loss of flexibility concomitant with this structure
often results in programs that, if left unoptimized, would have
unacceptably poor performance. The programmer needs a debug tool
capable of interacting with an optimized, distributed system and
reporting the behavior of such a system in terms of the source code
from which it is derived.
We describe some of the obstacles to source-level debugging of
optimized data-parallel programs. We present general solutions to
these problems, and discuss implementation details. We then describe
several example debugging scenarios to demonstrate the capabilities of
our prototype system, ZEE (ZPL DEBUGGER).