Site Tools


cuda-overview

CUDA Overview

Quick reference for CUDA qualifiers, launch syntax, the runtime API, and tooling.

Qualifiers and launch syntax

__global__ void f(...)          // kernel: called from host, runs on device
__device__ int  g(...)          // device function: callable only from device code
__host__   int  h(...)          // host function (the default)
__shared__ float tile[256];     // per-block scratchpad, shared by threads in a block
__constant__ float coeff[16];   // read-only, broadcast-optimised device memory
 
f<<<blocks, threads>>>(...)                  // basic launch
f<<<blocks, threads, shmem_bytes>>>(...)     // with dynamic shared memory
f<<<blocks, threads, shmem_bytes, stream>>>  // on a specific stream
 
threadIdx.x   // thread index within its block
blockIdx.x    // block index within the grid
blockDim.x    // threads per block
gridDim.x     // blocks per grid
 
__syncthreads()   // barrier across all threads in a block

Runtime API

cudaMalloc(&ptr, bytes)              // allocate device memory
cudaMallocManaged(&ptr, bytes)       // allocate unified memory, migrated on demand
cudaFree(ptr)                        // release device memory
cudaMemcpy(dst, src, bytes, kind)    // copy; kind is cudaMemcpyHostToDevice etc.
cudaMemcpyAsync(...)                 // same, queued on a stream
 
cudaDeviceSynchronize()              // block the host until the device is idle
cudaStreamCreate(&stream)            // create a stream for concurrent work
cudaStreamSynchronize(stream)        // block until one stream drains
 
cudaEventCreate(&ev)                 // create a timing event
cudaEventRecord(ev, stream)          // mark a point in the stream
cudaEventElapsedTime(&ms, a, b)      // milliseconds between two recorded events
 
cudaGetLastError()                   // fetch and clear the last error
cudaGetErrorString(err)              // human-readable message for an error code
cudaGetDeviceProperties(&prop, dev)  // query core count, bandwidth, limits

Environment and tooling

Name Kind Description
CUDA_VISIBLE_DEVICES env Restrict which GPUs the process can see, e.g. 0,2
CUDA_LAUNCH_BLOCKING env Set to 1 to make launches synchronous, so errors surface at the launch site
-arch=sm_XX nvcc Target a specific compute capability instead of the default
--ptxas-options=-v nvcc Print per-kernel register and shared memory usage
-lineinfo nvcc Emit line numbers for profiler and sanitiser output
nvidia-smi tool Device inventory, utilisation, memory use, running processes
ncu tool Nsight Compute: per-kernel counters, occupancy, bottleneck analysis
nsys tool Nsight Systems: timeline of kernels, transfers, and host activity
compute-sanitizer tool Race and out-of-bounds checker, the CUDA equivalent of Valgrind
cuda-overview.md · Last modified: by 127.0.0.1