Skip navigation
Please use this identifier to cite or link to this item: http://arks.princeton.edu/ark:/88435/dsp012j62s493v
Full metadata record
DC FieldValueLanguage
dc.contributor.advisorMalik, Sharaden_US
dc.contributor.authorSchwartz-Narbonne, Danielen_US
dc.contributor.otherElectrical Engineering Departmenten_US
dc.date.accessioned2013-05-21T13:33:41Z-
dc.date.available2013-05-21T13:33:41Z-
dc.date.issued2013en_US
dc.identifier.urihttp://arks.princeton.edu/ark:/88435/dsp012j62s493v-
dc.description.abstractSoftware engineering is facing a crisis. For decades, computer programs doubled in speed every 18 months, enabling powerful new applications which have literally changed the way we communicate and think. However, the ever-increasing hardware speed that drove this exponential growth also led to an unsustainable increase in power consumption. Modern hardware attempts to side-step this problem by using many slow processors functioning in parallel. Unfortunately, our ability to develop and debug parallel software to take advantage of parallel hardware has not kept pace with the need. In order to reap the benefits offered by parallel computing, we require new tools. In particular, a parallel program must execute correctly even in the presence of unpredictable thread interleavings. This interleaving makes it hard to write correct parallel programs, and also makes it hard to find bugs in incorrect parallel programs. A range of tools have been developed to help debug parallel programs, ranging from atomicity-violation and data-race detectors to model-checkers and theorem provers. One technique that has been successful for debugging sequential programs, but less effective for parallel programs, is running the program using assertion predicates provided by the developer. These assertions allow programmers to specify and check their assumptions. In a multi-threaded program, the programmer's assumptions include both the current state, and any actions (e.g., access to shared memory) that other, parallel executing threads might take. This dissertation introduces parallel assertions which allow programmers to express these assumptions for parallel programs using simple and intuitive syntax and semantics. I present an implementation and demonstrate its performance using PARSEC benchmarks. I discuss the challenges of evaluating assertions in the presence of weak memory models, and show how my work formalizing the semantics under weak memory models leads to an optimization that gives a 2x speedup while allowing more bugs to be exposed. I measure the effectiveness of parallel assertions using the University of Michigan Collection of Concurrency Bugs. In 14/17 cases, I was able to write a parallel assertion that would detect the cause of the real-world bug. My research suggests that parallel assertions are a powerful and practical debugging tool.en_US
dc.language.isoenen_US
dc.publisherPrinceton, NJ : Princeton Universityen_US
dc.relation.isformatofThe Mudd Manuscript Library retains one bound copy of each dissertation. Search for these copies in the <a href=http://catalog.princeton.edu> library's main catalog </a>en_US
dc.subjectAssertionsen_US
dc.subjectConcurrencyen_US
dc.subjectDebuggingen_US
dc.subjectParallel Programmingen_US
dc.subjectVerificationen_US
dc.subject.classificationElectrical engineeringen_US
dc.subject.classificationComputer engineeringen_US
dc.subject.classificationComputer scienceen_US
dc.titleAssertions for Debugging Parallel Programsen_US
dc.typeAcademic dissertations (Ph.D.)en_US
pu.projectgrantnumber690-2143en_US
Appears in Collections:Electrical Engineering

Files in This Item:
File Description SizeFormat 
SchwartzNarbonne_princeton_0181D_10556.pdf2.07 MBAdobe PDFView/Download


Items in Dataspace are protected by copyright, with all rights reserved, unless otherwise indicated.