NVIDIA Compute Sanitizer
Compute Sanitizer Tools & API
Compute Sanitizer is a functional correctness checking suite. This suite contains multiple tools that can perform different type of checks. Tool features are described below.
The Compute Sanitizer API enables the creation of sanitizing and tracing tools that target CUDA applications. Examples of such tools are memory and race condition checkers. The Compute Sanitizer API is composed of three APIs: the callback API, the patching API and the memory API. It is delivered as a dynamic library on supported platforms.
The memcheck tool is a run time error detection tool for CUDA applications. The tool can precisely detect and report out of bounds and misaligned memory accesses to global, local and shared memory in CUDA applications. It can also detect and report hardware reported error information. In addition, the memcheck tool can detect and report memory leaks in the user application.
The racecheck tool is a run time shared memory data access hazard detector. The primary use of this tool is to help identify memory access race conditions in CUDA applications that use shared memory.
In CUDA applications, storage declared with the __shared__ qualifier is placed on chip shared memory. All threads in a thread block can access this per block shared memory. Shared memory goes out of scope when the thread block completes execution. As shared memory is on chip, it is frequently used for inter-thread communication and as a temporary buffer to hold data being processed. As this data is being accessed by multiple threads in parallel, incorrect program assumptions may result in data races. Racecheck is a tool built to identify these hazards and help users write programs free of shared memory races.
Currently, this tool only supports detecting accesses to on-chip shared memory.
The initcheck tool is a run time uninitialized device global memory access detector. This tool can identify when device global memory is accessed without it being initialized via device side writes, or via CUDA memcpy and memset API calls.
Currently, this tool only supports detecting accesses to device global memory.
The synccheck tool is a runtime tool that can identify whether a CUDA application is correctly using synchronization primitives, specifically
- Allows you to ensure code correctness of your GPU accelerated kernels
- Ability to incorporate GPU code correctness into your own tools
A: Compute Sanitizer is NVIDIA's next generation version of the CUDA memcheck. The main differences are that
- Compute Sanitizer has much better performance and is the primary tool for new OS and GPU architectures.
- CUDA memcheck does not support new Microsoft Hardware Scheduling.
- There is no API for CUDA memcheck.
- Compute Sanitizer supports Maxwell and later GPUs.
- CUDA memcheck supports Maxwell through NIVDIA Ampere GPUs, and is a deprecated tool.
Ready to get started developing with Compute Sanitizer?