Contemporary parallel debuggers allow users to control more than one processing thread while supporting the same examination and visualisation operations of that of sequential debuggers. This approach restricts the use of parallel debuggers when it comes to large scale scientific applications run across hundreds of thousands compute cores. First, manually observing the runtime data to detect error becomes impractical because the data is too big. Second, performing expensive but useful debugging operations becomes infeasible as the computational codes become more complex, involving larger data structures, and as the machines become larger. This study explores the idea of a data-centric debugging approach, which could be used to make parallel debuggers more powerful. It discusses the use of ad hoc debug-time assertions that allow a user to reason about the state of a parallel computation. These assertions support the verification and validation of program state at runtime as a whole rather than focusing on that of only a single process state. Furthermore, the debugger's performance can be improved by exploiting the underlying parallel platform because the available compute cores can execute parallel debugging functions, while a program is idling at a breakpoint. We demonstrate the system with several case studies and evaluate the performance of the tool on a 20 000 cores Cray XE6.We review assertion usage under the traditional programming model, thus revealing the potential of using assertions for data-centric debugging in a parallel context. We then introduce and describe three distinctive debug-time assertion templates including general ad hoc assertions, comparative assertions and statistical assertions.
Assertions under the traditional programming modelAn assertion is a statement about an intended behaviour of a system's component that must be verified during execution. In computer programming, a programmer defines an assertion to ensure a specific state of the program at runtime. Further, using assertions, programmers can inject their design intentions such as constraints or contracts into the executable code. As a result, assertions are used extensively for evaluating invariants, checking input parameters and for enhancing program correctness and quality (8). Assertion is an effective tool, not only for design and verification but also for debugging throughout the software-development cycle. The advantages in using assertions for 502 M. N. DINH ET AL.debugging software come from three important attributes: their ability to perform error detection, error isolation and error notification. In addition, assertions support a more data-centric view of debugging because a user does not focus on the control path, but can assert that various data structures should be in particular states at various stages in the program execution.
A generic assertion-based parallel debuggerAssertions can also be used as a powerful tool for the debugging purpose. In particular, a programmer writes ad hoc assertions at debug time to tes...