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
MemoryManagerinstance 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
current_cupy_stream – context manager that binds a Numba stream to a CuPy stream.
CuPyAsyncNumbaManager – asynchronous CuPy External Memory Manager integration.
CuPySyncNumbaManager – synchronous CuPy External Memory Manager integration.
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.