Module: Ignis::Memory
- Defined in:
- lib/nvruby/memory.rb,
lib/nvruby/memory/stats.rb,
lib/nvruby/memory/cuda_memory_resource.rb,
lib/nvruby/memory/pool_memory_resource.rb,
lib/nvruby/memory/device_memory_resource.rb,
lib/nvruby/memory/cuda_async_memory_resource.rb,
lib/nvruby/memory/pinned_host_memory_resource.rb
Overview
Memory management module providing RMM-inspired GPU memory pools
This module provides efficient memory allocation for GPU workloads through:
-
DeviceMemoryResource: Base class for all device memory allocators
-
CudaMemoryResource: Simple cudaMalloc/cudaFree (baseline)
-
CudaAsyncMemoryResource: Stream-ordered cudaMallocAsync/cudaFreeAsync
-
PoolMemoryResource: Coalescing best-fit pool for high-frequency allocations
-
PinnedHostMemoryResource: Page-locked host memory for fast transfers
Defined Under Namespace
Classes: CudaAsyncMemoryResource, CudaMemoryResource, DeviceMemoryResource, HostMemoryResource, PinnedHostMemoryResource, PoolMemoryResource, Stats
Class Method Summary collapse
-
.allocate(bytes, stream: nil) ⇒ FFI::Pointer
Allocate device memory using current resource.
-
.deallocate(ptr, bytes, stream: nil) ⇒ void
Deallocate device memory using current resource.
-
.get_current_device_resource ⇒ DeviceMemoryResource
Get the current device memory resource Creates a default PoolMemoryResource if none is set.
-
.get_per_device_resource(device_id) ⇒ DeviceMemoryResource?
Get memory resource for a specific device.
-
.reset_stats! ⇒ void
Reset memory statistics.
-
.set_current_device_resource(resource) ⇒ DeviceMemoryResource
Set the current device memory resource.
-
.set_per_device_resource(device_id, resource) ⇒ DeviceMemoryResource
Set memory resource for a specific device.
-
.stats ⇒ Hash
Get memory statistics.
Class Method Details
.allocate(bytes, stream: nil) ⇒ FFI::Pointer
Allocate device memory using current resource
97 98 99 |
# File 'lib/nvruby/memory.rb', line 97 def allocate(bytes, stream: nil) get_current_device_resource.allocate(bytes, stream: stream) end |
.deallocate(ptr, bytes, stream: nil) ⇒ void
This method returns an undefined value.
Deallocate device memory using current resource
106 107 108 |
# File 'lib/nvruby/memory.rb', line 106 def deallocate(ptr, bytes, stream: nil) get_current_device_resource.deallocate(ptr, bytes, stream: stream) end |
.get_current_device_resource ⇒ DeviceMemoryResource
Get the current device memory resource Creates a default PoolMemoryResource if none is set
39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/nvruby/memory.rb', line 39 def get_current_device_resource device_id = current_device_index resource = per_device_resources[device_id] return resource if resource if Ignis.configuration.use_memory_pool resource = PoolMemoryResource.new(device_index: device_id) else resource = CudaMemoryResource.new(device_index: device_id) end per_device_resources[device_id] = resource resource end |
.get_per_device_resource(device_id) ⇒ DeviceMemoryResource?
Get memory resource for a specific device
67 68 69 |
# File 'lib/nvruby/memory.rb', line 67 def get_per_device_resource(device_id) per_device_resources[device_id] end |
.reset_stats! ⇒ void
This method returns an undefined value.
Reset memory statistics
89 90 91 |
# File 'lib/nvruby/memory.rb', line 89 def reset_stats! Stats.reset! end |
.set_current_device_resource(resource) ⇒ DeviceMemoryResource
Set the current device memory resource
57 58 59 60 61 62 |
# File 'lib/nvruby/memory.rb', line 57 def set_current_device_resource(resource) device_id = current_device_index old = per_device_resources[device_id] per_device_resources[device_id] = resource old end |
.set_per_device_resource(device_id, resource) ⇒ DeviceMemoryResource
Set memory resource for a specific device
75 76 77 78 79 |
# File 'lib/nvruby/memory.rb', line 75 def set_per_device_resource(device_id, resource) old = per_device_resources[device_id] per_device_resources[device_id] = resource old end |