Looks like Valgrind has two tools that both do thread error detection: Helgrind and DRD. These tools are substantially similar.
My primary question is: when should I use one instead of the other to check my multi-threaded code?
More broadly, why are there two tools? I assume they aren't entirely redundant. What are the important differences? Should I generally plan on running my code through both tools?