BigFoot: static check placement for dynamic race detection

Dustin Rhodes, Cormac Flanagan, Stephen N. Freund
2017 Proceedings of the 38th ACM SIGPLAN Conference on Programming Language Design and Implementation - PLDI 2017  
Precise dynamic data race detectors provide strong correctness guarantees but have high overheads because they generally keep analysis state in a separate shadow location for each heap memory location, and they check (and potentially update) the corresponding shadow location on each heap access. The BIGFOOT dynamic data race detector uses a combination of static and dynamic analysis techniques to coalesce checks and compress shadow locations. With BIGFOOT, multiple accesses to an object or
more » ... o an object or array often induce a single coalesced check that manipulates a single compressed shadow location, resulting in a performance improvement over FASTTRACK of 61%. Standard Race Checks BIGFOOT Race Checks class Point { int x, y, z; void move(int dx, int dy, int dz) { int tmp; CheckRead(this.x); tmp = this . x; CheckWrite(this.x); this . x = tmp + dx; CheckRead(this.y); tmp = this . y; CheckWrite(this.y); this . y = tmp + dy; CheckRead(this.z); tmp = this . z; CheckWrite(this.z); this . z = tmp + dz; } } void movePts(Point[] a, int lo, int hi) { for(int i = lo; i < hi; i++) { CheckRead(a[i]); a[i] . move(1, 1, 1); } } class Point { int x, y, z; void move(int dx, int dy, int dz) { int tmp; tmp = this . x; this . x = tmp + dx; tmp = this . y; this . y = tmp + dy; tmp = this . z; this . z = tmp + dz; CheckWrite(this.x/y/z); } } void movePts(Point[] a, int lo, int hi) { for(int i = lo; i < hi; i++) { a[i] . move(1, 1, 1); } CheckRead(a[lo..hi]); }
doi:10.1145/3062341.3062350 dblp:conf/pldi/RhodesFF17 fatcat:aiok6u7nczc7jjix7jtyubk2bu