Concurrent Predicates: A Debugging Technique for Every Parallel Programmer PACT 13 Justin Gottschlich Gilles Pokam Cristiano Pereira Youfeng Wu Intel Corporation 1
The Problem Reproducing known multithreaded bugs is challenging Why is it important? – Fixing known bugs is general approach for real- world bug fixing Works well for sequential code, not parallel 2
A Simple Sequential Bug Example y = calculate(); a = x / y; if (y == 0) y = 1; if (y == 0) crash y = calculate(); if (y == 0) y = 1; a = x / y; y != 0, no crash 3
A Not-So Simple Parallel Bug Example Parallel Bug Reproduction Needs 1.Buggy program state 2.Buggy program schedule Parallel Bug Reproduction Needs 1.Buggy program state 2.Buggy program schedule 4
The CP Solution 100mil loops, calc(), occurs 1 out of 20 executions. 100mil loops, calc(), occurs 20 out of 20 executions. 5
What is CP? Two variants – Concurrent Predicates (CP) – control structure – CP with Expressions (CPEs) – happens-before ordering extrapolated 6
The CPE Solution 7
The Real Problem But what about reproducing a known bug with an unknown root cause? – Most real-world bugs come in this form 8
Recipes and Experimental Data 9
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; 10
Recipe: Data Race CP can automatically find data races – Early implementation in PIN – Verified results found by Thread Checker Identified true positives 11
Recipe: Atomicity Violation Same structure as divide by zero example 12
Recipe: Deadlock Expression operators in paper 13
Experimental Results 5 handcrafted bugs 5 RADBench bugs 3 unresolved TBoost.STM bugs (now fixed) Overhead generally 10%-100% (1.1x – 2x) 14
Conclusions and Future Directions CP and CPE: – Can improve known bug reproduction – Can identify unknown root causes of known bugs using recipes (weve used them) Whats next? – Simplify model; direct debugger integration – Automated CPE injection for certain types of bugs – Usage experience data from novice programmers 15
Concurrent Predicates: A Debugging Technique for Every Parallel Programmer PACT 13 Justin Gottschlich Gilles Pokam Cristiano Pereira Youfeng Wu Intel Corporation Questions? 16