160 likes | 258 Vues
Learn about Concurrent Predicates (CP) - a debugging technique for parallel programming that helps reproduce and fix multithreaded bugs efficiently. Discover how CP and CP with Expressions (CPEs) can identify both known and unknown root causes of bugs through practical recipes and experimental data.
E N D
Concurrent Predicates: A Debugging Technique for Every Parallel Programmer PACT ‘13 Justin Gottschlich Gilles Pokam Cristiano Pereira Youfeng Wu Intel Corporation
The Problem • Reproducing knownmultithreaded bugs is challenging • Why is it important? • Fixing knownbugs is general approach for real-world bug fixing • Works well for sequential code, not parallel
A Simple Sequential Bug Example if (y == 0) crash y = calculate(); if (y == 0) y = 1; a = x / y; y != 0, no crash y = calculate(); a = x / y; if (y == 0) y = 1;
A Not-So Simple Parallel Bug Example Parallel Bug Reproduction Needs Buggy program state Buggy program schedule
The CP Solution 100mil loops, 0-999 calc(), occurs 1 out of 20executions. 100mil loops, 0-999 calc(), occurs 20 out of 20 executions.
What is CP? • Two variants • Concurrent Predicates (CP) – control structure • CP with Expressions (CPEs) – happens-before ordering extrapolated
The RealProblem • But what about reproducing a known bug with an unknown root cause? • Most real-world bugs come in this form
A Bit About Bugs • Bugs can be thought in terms of ... • A root cause • An observable effect • CPs can be thought of in terms of ... • A root cause CP • An effect CP • The root cause CP is placed after bug root cause, which is usually unknown y = calculate(); • The effect CP is placed just before bug effect, which is usually known a = x / y;
Recipe: Data Race • CP can automatically find data races • Early implementation in PIN • Verified results found by Thread Checker • Identified true positives
Recipe: Atomicity Violation Same structure as divide by zero example
Recipe: Deadlock Expression operators in paper
Experimental Results 5 handcrafted bugs 5 RADBench bugs 3 unresolved TBoost.STM bugs (now fixed) Overhead generally 10%-100% (1.1x – 2x)
Conclusions and Future Directions • CP and CPE: • Can improve known bug reproduction • Can identify unknown root causes of known bugs using recipes (we’ve used them) • What’s next? • Simplify model; direct debugger integration • Automated CPE injection for certain types of bugs • Usage experience data from novice programmers
Questions? Concurrent Predicates: A Debugging Technique for Every Parallel Programmer PACT ‘13 Justin Gottschlich (justin.e.gottschlich@intel.com) Gilles Pokam Cristiano Pereira Youfeng Wu Intel Corporation