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, register CUDA streams, and plug in alternative allocators without rewriting the coordination code. Supporting modules describe allocation requests, track chunked response metadata, manage stream groups, and expose CuPy-backed External Memory Manager plugins for Numba contexts.

Entry point

default_memmgr creates cubie.memory.mem_manager.MemoryManager with stream grouping and CuPy integration 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, stream registration, and External Memory Managers.

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 External Memory Managers

Dependencies

The package requires numba.cuda for stream management and context access. CuPy is optional but enables the External Memory Manager plugins and stream interoperability helpers. These plugins are registered through MemoryManager when available and fall back to Numba’s native allocator otherwise.