Data-parallel programming languages such as pC++ and ZPL are designed to simplify the task of parallel program development. By restricting the programmer to SPMD-style programs, in which parallelism is implicit in the source code, such languages address the problems presented by multiple execution threads, large state spaces, and lack of global synchronization. However, as these languages are typically used for developing large scientific applications with complex behavior, good language design is simply not enough.
It is well known that source-level debugging tools provide significant benefits in terms of programmer productivity. The ability to set breakpoints and examine variables in terms of the source code greatly simplifies the debugging task. The alternative, requiring the progammer to understand the transformation between source and object code, becomes increasingly unrealistic as compilation and optimization techniques become more complex. Unfortunately, this complexity, particularly in the case of data-parallel languages, renders standard debugger tool designs practically useless. This fact, combined with the apparent belief among parallel programmers that their job should be hard, has resulted in a lack of adequate language-level programming tool support.
We propose a new approach to debugger design that will facilitate source-level debugging of data-parallel programs. The debugger will make compiler transformations and optimizations transparent to the application programmer, without unduly restricting the debugging facilities provided. The programmer will be able to set breakpoints and examine variables in spite of the presence of several common compiler transformations.
Chapters and discuss the necessary background material, and outline the problems to be solved. Chapter presents the design of ZEE , The ZPL DEBUGGER .
Chapter presents conclusions, and outlines some directions for future work.