  The high degree of parallelism and relatively complicated synchronization
mechanisms in GPUs make writing correct kernels difficult. Data races pose one
such concurrency correctness challenge, and therefore, effective methods of
detecting as many data races as possible are required.
  Predictive partial order relations for CPU programs aim to expose data races
that can be hidden during a dynamic execution. Existing predictive partial
orders cannot be na\"ively applied to analyze GPU kernels because of the
differences in programming models. This work proposes GWCP, a predictive
partial order for data race detection of GPU kernels. GWCP extends a sound and
precise relation called weak-causally-precedes (WCP) proposed in the context of
multithreaded shared memory CPU programs to GPU kernels. GWCP takes into
account the GPU thread hierarchy and different synchronization semantics such
as barrier synchronization and scoped atomics and locks.
  We implement a tool called PreDataR that tracks the GWCP relation using
binary instrumentation. PreDataR includes three optimizations and a novel
vector clock compression scheme that are readily applicable to other partial
order based analyses. Our evaluation with several microbenchmarks and
benchmarks shows that PreDataR has better data race coverage compared to prior
techniques at practical run-time overheads.
