next up previous
Next: Our Approach Up: PDWorks'93 Conference Previous: PDWorks'93 Conference

Introduction

Massively parallel computations are difficult to debug. Users are often overwhelmed by large amounts of trace data and confused by the effects of asynchrony. Event-based behavioral abstraction provides a mechanism for managing the volume of data by allowing users to specify models of intended program behavior that are automatically compared to actual program behavior [2,3,5,14,16]. Transformations of logical time ameliorate the difficulties of coping with asynchrony by allowing users to see behavior from a variety of temporal perspectives [7,15,19,21]. Previously, we combined these features in a debugger that automatically constructed animations of user-defined abstract events in logical time [14]. However, our debugger, like many others, did not always provide sufficient feedback nor did it effectively scale up for massive parallelism. Our modeling language required complex recognition algorithms which precluded informative feedback on abstractions that did not correspond to observed behavior. Feedback on abstractions that did match behavior was limited because it relied on graphical animations that did not scale well to even moderate numbers of processes (such as 64). We address these problems in a new debugger, called Ariadne.gif

Ariadne uses a simple language to specify behavioral abstractions as patterns of events in logical time. These patterns are detected in traces of program behavior by collections of small finite-state recognizers which allow substantive feedback on match failures. There are three salient features of Ariadne: The first is the ability to provide feedback on failures, the second is the scalability of its patterns and non-graphical output, and the third is the conciseness of its modeling language. These features, however, are accompanied by some loss of expressivity. The loss of expressivity means that patterns are often too coarse, matching behaviors in unintended ways. Ariadne compensates for this by providing functions that return the characteristics of matched behaviors. As an example, a user might match a number of multicasts in an execution trace and then use functional queries to determine which processes actually wrote values or where those values were sent. Ariadne's combination of pattern matches and functional queries allows the user to investigate an execution trace thoroughly.

Section 2 provides an overview of our approach and Section 3 provides several sample debugging sessions illustrating its capabilities.



next up previous
Next: Our Approach Up: PDWorks'93 Conference Previous: PDWorks'93 Conference



Joydip Kundu kundu@neweng.enet.dec.com