Skip to content

Memory API Reference ​

The cuda.memory namespace provides typed and raw memory management across GPU global memory, host pinned memory, unified/managed memory, and stream-ordered memory pools.

Types & Modules ​

DeviceBuffer(T) ​

Typed wrapper for CUDA device-side allocations (cudaMalloc/cudaFree).

zig
var buf = try cuda.DeviceBuffer(f32).alloc(1024);
defer buf.deinit();

try buf.copyFromHost(&host_slice);
try buf.copyToHost(&out_slice);

PinnedBuffer(T) ​

Host memory allocated in page-locked (pinned) RAM for maximum transfer bandwidth (cudaHostAlloc/cudaFreeHost).

zig
var pinned = try cuda.PinnedBuffer(f32).alloc(1024);
defer pinned.deinit();

UnifiedBuffer(T) ​

Managed memory accessible from both CPU and GPU transparently (cudaMallocManaged).

zig
var unif = try cuda.UnifiedBuffer(f32).alloc(1024);
defer unif.deinit();

try unif.prefetchToDevice(0, stream);
try unif.prefetchToHost(stream);

PoolBuffer(T) ​

Stream-ordered allocation backed by CUDA memory pools (cudaMallocAsync/cudaFreeAsync).

zig
var pool_buf = try cuda.PoolBuffer(f32).alloc(1024, stream);
defer pool_buf.freeOnStream(stream) catch {};

Low-Level Memory Functions (cuda.runtime.memory) ​

FunctionSignatureDescription
allocDevice(size: usize) !*anyopaqueAllocate raw device memory
freeDevice(ptr: *anyopaque) voidRelease device memory
allocHost(size: usize, flags: c_uint) !*anyopaqueAllocate pinned host memory
freeHost(ptr: *anyopaque) voidRelease pinned host memory
allocManaged(size: usize, flags: c_uint) !*anyopaqueAllocate unified memory
allocAsync(size: usize, stream: Stream) !*anyopaqueStream-ordered pool allocation
freeAsync(ptr: *anyopaque, stream: Stream) !voidStream-ordered pool deallocation
mallocPitch(width: usize, height: usize) !{ ptr, pitch }2-D pitched allocation
memcpy2D(...) !voidSynchronous 2-D copy
memcpy2DAsync(...) !voidAsynchronous 2-D copy on stream
ipcGetMemHandle(ptr: *anyopaque) !IpcMemHandleExport allocation as IPC handle
ipcOpenMemHandle(handle: IpcMemHandle, flags) !*anyopaqueImport IPC handle
ipcCloseMemHandle(ptr: *anyopaque) !voidClose imported IPC handle

Released under the MIT License.