17 Tools and resources for better code

 

This chapter covers

  • Potential tools for your development toolbelt
  • Various resources to guide your application development
  • Common tools to work on large computing sites

Why a whole chapter on tools and resources? Though we’ve mentioned tools and resources in previous chapters, this chapter further discusses the wide variety and alternatives available to high-performance computing programmers. From version control systems to debugging, the available capabilities, whether commercial or open source, are essential to enable the rapid iterations of parallel application development. Nonetheless, these tools are not mandatory. Having an understanding of and embedding these into your workflow often yields tremendous benefits, far outweighing the time spent learning how to use them.

17.1 Version control systems: It all begins here

17.1.1 Distributed version control fits the more mobile world

17.1.2 Centralized version control for simplicity and code security

17.2 Timer routines for tracking code performance

17.3 Profilers: You can’t improve what you don’t measure

17.3.1 Simple text-based profilers for everyday use

17.3.2 High-level profilers for quickly identifying bottlenecks

17.3.3 Medium-level profilers to guide your application development

17.3.4 Detailed profilers give the gory details of hardware performance

17.4 Benchmarks and mini-apps: A window into system performance

17.4.1 Benchmarks measure system performance characteristics

17.4.2 Mini-apps give the application perspective

17.5 Detecting (and fixing) memory errors for a robust application

17.5.1 Valgrind Memcheck: The open source standby

17.5.2 Dr. Memory for your memory ailments

17.5.3 Commercial memory tools for demanding applications

17.5.4 Compiler-based memory tools for convenience

17.5.5 Fence-post checkers detect out-of-bounds memory accesses

17.5.6 GPU memory tools for robust GPU applications

17.6 Thread checkers for detecting race conditions