Release 13.4 of the CUDA Samples supported by CUDA Toolkit 13.4. See Changelog for more information.
Sample: Vector Addition (Unified Memory)
Description
A first-look CUDA sample: add two float vectors element-wise on the GPU. This version uses Unified Memory (cudaMallocManaged) so the same pointer is accessible from both host and device, eliminating the need for explicit cudaMemcpy calls. The GPU result is verified against a CPU reference computed on the same buffers.
The sample mirrors the corresponding Unified Memory example in the CUDA Programming Guide and uses the //unified-memory-begin / //unified-memory-end markers so the guide can extract the snippet directly.
What You'll Learn
- Allocating memory accessible to both host and device with
cudaMallocManaged - Launching a 1D CUDA kernel that operates on a Unified Memory buffer with no explicit transfers
- Computing grid dimensions with
cuda::ceil_div(from<cuda/cmath>) - Synchronizing host execution with device work via
cudaDeviceSynchronize - Validating GPU output against a serial CPU reference
Key Concepts
- Unified Memory — one pointer for both CPU and GPU; the CUDA runtime migrates pages on demand
- 1D thread indexing —
threadIdx.x + blockIdx.x * blockDim.x - Bounds checking in the kernel so the vector length need not be a multiple of the block size
Key APIs
CUDA Runtime
cudaMallocManaged— allocate Unified Memory accessible to both host and devicecudaDeviceSynchronize— block the host until all submitted device work completescudaFree— release a Unified Memory allocation
libcudacxx
cuda::ceil_div—ceil(a / b)used to compute the number of blocks; from<cuda/cmath>
Requirements
Hardware
- NVIDIA GPU with Compute Capability 7.5 or higher
Software
- CMake 3.20 or newer
- A C++17-capable host compiler
How to Build
See the top-level README for full build instructions, including how to build all samples or a single sample standalone.
How to Run
Basic usage (default vector length = 1024)
./vectorAdd
Custom vector length
./vectorAdd 1000000
Expected Output
On success:
Unified Memory: CPU and GPU answers match
On failure, the first mismatching index and the two diverging values are printed, followed by an error line:
Index 0 mismatch: 0.123456 != 0.123400
Unified Memory: Error - CPU and GPU answers do not match
Files
vectorAdd.cu— Unified Memory vector addition implementation (kernel + host driver)README.md— this fileCMakeLists.txt— build configuration