Memory

cubie.memory

The memory package coordinates GPU allocations across cubie. It exposes the package-level MemoryManager through default_memmgr so integrators can request array buffers and register CUDA streams without rewriting the coordination code. CuPy is the single device allocation provider on a real GPU: device arrays come from CuPy’s memory pool and host staging buffers from CuPy’s pinned memory pool. Supporting modules describe allocation requests, track chunked response metadata, and manage stream groups.

Entry point

default_memmgr creates cubie.memory.mem_manager.MemoryManager with stream grouping ready to configure. Typical callers obtain this singleton, register their instance identifier, and submit cubie.memory.array_requests.ArrayRequest objects that describe the arrays they need.

Core manager

  • default_memmgr – default MemoryManager instance shared across the package.

  • MemoryManager – handles allocation requests and stream registration.

Array specifications

  • ArrayRequest – describes requested buffers, precision factories, and chunking.

  • ArrayResponse – returns allocated buffers and metadata for callers.

Stream coordination

  • StreamGroups – assigns host instances to CUDA streams and manages synchronisation policies.

CuPy stream interop

  • current_cupy_stream – context manager that binds a Numba stream to a CuPy stream so CuPy allocations and copies stay ordered with the Numba-launched kernel.

Dependencies

The package requires numba.cuda for kernel launch, stream management, and context access. CuPy is required on a real GPU — it is CuBIE’s single device memory allocator, imported at package import time through cubie.cuda_simsafe. Under the CUDA simulator (which never touches device memory) CuPy is not required and the import is skipped.