Class BaseMemoryManager
- Namespace
- DotCompute.Core.Memory
- Assembly
- DotCompute.Core.dll
Base memory manager that provides common memory management patterns for all backends. Eliminates 7,625 lines of duplicate code across 5+ implementations.
public abstract class BaseMemoryManager : IUnifiedMemoryManager, IAsyncDisposable, IDisposable
- Inheritance
-
BaseMemoryManager
- Implements
- Derived
- Inherited Members
- Extension Methods
Constructors
BaseMemoryManager(ILogger)
Base memory manager that provides common memory management patterns for all backends. Eliminates 7,625 lines of duplicate code across 5+ implementations.
protected BaseMemoryManager(ILogger logger)
Parameters
loggerILogger
Properties
Accelerator
Gets the accelerator this memory manager is associated with.
public abstract IAccelerator Accelerator { get; }
Property Value
AllocationCount
Gets the total number of allocations.
public int AllocationCount { get; }
Property Value
CurrentAllocatedMemory
Gets the current allocated memory in bytes.
public abstract long CurrentAllocatedMemory { get; }
Property Value
CurrentStatistics
Gets the current memory statistics (alias for Statistics for compatibility).
public MemoryStatistics CurrentStatistics { get; }
Property Value
IsDisposed
Gets a value indicating whether this memory manager has been disposed.
public bool IsDisposed { get; }
Property Value
Logger
Gets the logger instance for derived classes.
protected ILogger Logger { get; }
Property Value
MaxAllocationSize
Gets the maximum memory allocation size in bytes.
public abstract long MaxAllocationSize { get; }
Property Value
PeakAllocatedBytes
Gets the peak allocated bytes.
public long PeakAllocatedBytes { get; }
Property Value
Statistics
Gets memory usage statistics.
public abstract MemoryStatistics Statistics { get; }
Property Value
TotalAllocatedBytes
Gets the total allocated bytes across all buffers.
public long TotalAllocatedBytes { get; }
Property Value
TotalAvailableMemory
Gets the total available memory in bytes.
public abstract long TotalAvailableMemory { get; }
Property Value
Methods
AllocateAndCopyAsync<T>(ReadOnlyMemory<T>, MemoryOptions, CancellationToken)
Allocates memory and copies data from host.
public virtual ValueTask<IUnifiedMemoryBuffer<T>> AllocateAndCopyAsync<T>(ReadOnlyMemory<T> source, MemoryOptions options = MemoryOptions.None, CancellationToken cancellationToken = default) where T : unmanaged
Parameters
sourceReadOnlyMemory<T>The source data to copy.
optionsMemoryOptionsMemory allocation options.
cancellationTokenCancellationTokenCancellation token.
Returns
- ValueTask<IUnifiedMemoryBuffer<T>>
A newly allocated and initialized memory buffer.
Type Parameters
TThe element type.
AllocateAsync(long, MemoryOptions, CancellationToken)
public virtual ValueTask<IUnifiedMemoryBuffer> AllocateAsync(long sizeInBytes, MemoryOptions options = MemoryOptions.None, CancellationToken cancellationToken = default)
Parameters
sizeInByteslongoptionsMemoryOptionscancellationTokenCancellationToken
Returns
AllocateAsync<T>(int)
public virtual ValueTask<IUnifiedMemoryBuffer<T>> AllocateAsync<T>(int count) where T : unmanaged
Parameters
countint
Returns
Type Parameters
T
AllocateAsync<T>(int, MemoryOptions, CancellationToken)
Allocates a memory buffer for a specific number of elements.
public virtual ValueTask<IUnifiedMemoryBuffer<T>> AllocateAsync<T>(int count, MemoryOptions options = MemoryOptions.None, CancellationToken cancellationToken = default) where T : unmanaged
Parameters
countintThe number of elements to allocate.
optionsMemoryOptionsMemory allocation options.
cancellationTokenCancellationTokenCancellation token.
Returns
- ValueTask<IUnifiedMemoryBuffer<T>>
A newly allocated memory buffer.
Type Parameters
TThe element type.
AllocateBufferCoreAsync(long, MemoryOptions, CancellationToken)
Backend-specific buffer allocation implementation.
protected virtual ValueTask<IUnifiedMemoryBuffer> AllocateBufferCoreAsync(long sizeInBytes, MemoryOptions options, CancellationToken cancellationToken)
Parameters
sizeInByteslongoptionsMemoryOptionscancellationTokenCancellationToken
Returns
AllocateDevice(long)
Allocates device-specific memory.
public virtual DeviceMemory AllocateDevice(long sizeInBytes)
Parameters
sizeInByteslongSize in bytes to allocate.
Returns
- DeviceMemory
Device memory handle.
AllocateInternalAsync(long, MemoryOptions, CancellationToken)
Allocates memory using backend-specific implementation.
protected abstract ValueTask<IUnifiedMemoryBuffer> AllocateInternalAsync(long sizeInBytes, MemoryOptions options, CancellationToken cancellationToken)
Parameters
sizeInByteslongoptionsMemoryOptionscancellationTokenCancellationToken
Returns
AllocateRawAsync(long, MemoryOptions, CancellationToken)
Allocates memory by size in bytes (for advanced scenarios).
public virtual ValueTask<IUnifiedMemoryBuffer> AllocateRawAsync(long sizeInBytes, MemoryOptions options = MemoryOptions.None, CancellationToken cancellationToken = default)
Parameters
sizeInByteslongThe size in bytes to allocate.
optionsMemoryOptionsMemory allocation options.
cancellationTokenCancellationTokenCancellation token.
Returns
- ValueTask<IUnifiedMemoryBuffer>
A newly allocated memory buffer.
CleanupUnusedBuffers()
Performs cleanup of unused buffers.
protected virtual void CleanupUnusedBuffers()
Clear()
Clears all allocated memory and resets the manager.
public abstract void Clear()
CopyAsync<T>(IUnifiedMemoryBuffer<T>, IUnifiedMemoryBuffer<T>, CancellationToken)
Copies data between buffers.
public abstract ValueTask CopyAsync<T>(IUnifiedMemoryBuffer<T> source, IUnifiedMemoryBuffer<T> destination, CancellationToken cancellationToken = default) where T : unmanaged
Parameters
sourceIUnifiedMemoryBuffer<T>The source buffer.
destinationIUnifiedMemoryBuffer<T>The destination buffer.
cancellationTokenCancellationTokenCancellation token.
Returns
- ValueTask
A task representing the copy operation.
Type Parameters
TThe element type.
CopyAsync<T>(IUnifiedMemoryBuffer<T>, int, IUnifiedMemoryBuffer<T>, int, int, CancellationToken)
Copies data between buffers with specified ranges.
public abstract ValueTask CopyAsync<T>(IUnifiedMemoryBuffer<T> source, int sourceOffset, IUnifiedMemoryBuffer<T> destination, int destinationOffset, int count, CancellationToken cancellationToken = default) where T : unmanaged
Parameters
sourceIUnifiedMemoryBuffer<T>The source buffer.
sourceOffsetintThe offset in the source buffer.
destinationIUnifiedMemoryBuffer<T>The destination buffer.
destinationOffsetintThe offset in the destination buffer.
countintThe number of elements to copy.
cancellationTokenCancellationTokenCancellation token.
Returns
- ValueTask
A task representing the copy operation.
Type Parameters
TThe element type.
CopyDeviceToDevice(DeviceMemory, DeviceMemory, long)
Copies data between device memories.
public virtual void CopyDeviceToDevice(DeviceMemory sourceDevice, DeviceMemory destinationDevice, long sizeInBytes)
Parameters
sourceDeviceDeviceMemorySource device memory.
destinationDeviceDeviceMemoryDestination device memory.
sizeInByteslongSize in bytes.
CopyDeviceToHost(DeviceMemory, nint, long)
Copies data from device to host memory.
public virtual void CopyDeviceToHost(DeviceMemory deviceMemory, nint hostPointer, long sizeInBytes)
Parameters
deviceMemoryDeviceMemoryDevice memory.
hostPointernintHost memory pointer.
sizeInByteslongSize in bytes.
CopyDeviceToHostAsync(DeviceMemory, nint, long, CancellationToken)
Asynchronously copies data from device to host memory.
public virtual ValueTask CopyDeviceToHostAsync(DeviceMemory deviceMemory, nint hostPointer, long sizeInBytes, CancellationToken cancellationToken = default)
Parameters
deviceMemoryDeviceMemoryDevice memory.
hostPointernintHost memory pointer.
sizeInByteslongSize in bytes.
cancellationTokenCancellationTokenCancellation token.
Returns
- ValueTask
A task representing the operation.
CopyFromDeviceAsync<T>(IUnifiedMemoryBuffer<T>, Memory<T>, CancellationToken)
Copies data from a device buffer to host memory.
public abstract ValueTask CopyFromDeviceAsync<T>(IUnifiedMemoryBuffer<T> source, Memory<T> destination, CancellationToken cancellationToken = default) where T : unmanaged
Parameters
sourceIUnifiedMemoryBuffer<T>The source buffer.
destinationMemory<T>The destination memory.
cancellationTokenCancellationTokenCancellation token.
Returns
- ValueTask
A task representing the copy operation.
Type Parameters
TThe element type.
CopyFromDevice<T>(Span<T>, IUnifiedMemoryBuffer)
public virtual void CopyFromDevice<T>(Span<T> data, IUnifiedMemoryBuffer buffer) where T : unmanaged
Parameters
dataSpan<T>bufferIUnifiedMemoryBuffer
Type Parameters
T
CopyHostToDevice(nint, DeviceMemory, long)
Copies data from host to device memory.
public virtual void CopyHostToDevice(nint hostPointer, DeviceMemory deviceMemory, long sizeInBytes)
Parameters
hostPointernintHost memory pointer.
deviceMemoryDeviceMemoryDevice memory.
sizeInByteslongSize in bytes.
CopyHostToDeviceAsync(nint, DeviceMemory, long, CancellationToken)
Asynchronously copies data from host to device memory.
public virtual ValueTask CopyHostToDeviceAsync(nint hostPointer, DeviceMemory deviceMemory, long sizeInBytes, CancellationToken cancellationToken = default)
Parameters
hostPointernintHost memory pointer.
deviceMemoryDeviceMemoryDevice memory.
sizeInByteslongSize in bytes.
cancellationTokenCancellationTokenCancellation token.
Returns
- ValueTask
A task representing the operation.
CopyToDeviceAsync<T>(ReadOnlyMemory<T>, IUnifiedMemoryBuffer<T>, CancellationToken)
Copies data from host memory to a device buffer.
public abstract ValueTask CopyToDeviceAsync<T>(ReadOnlyMemory<T> source, IUnifiedMemoryBuffer<T> destination, CancellationToken cancellationToken = default) where T : unmanaged
Parameters
sourceReadOnlyMemory<T>The source data.
destinationIUnifiedMemoryBuffer<T>The destination buffer.
cancellationTokenCancellationTokenCancellation token.
Returns
- ValueTask
A task representing the copy operation.
Type Parameters
TThe element type.
CopyToDevice<T>(IUnifiedMemoryBuffer, ReadOnlySpan<T>)
public virtual void CopyToDevice<T>(IUnifiedMemoryBuffer buffer, ReadOnlySpan<T> data) where T : unmanaged
Parameters
bufferIUnifiedMemoryBufferdataReadOnlySpan<T>
Type Parameters
T
CreateView(IUnifiedMemoryBuffer, long, long)
public virtual IUnifiedMemoryBuffer CreateView(IUnifiedMemoryBuffer buffer, long offset, long length)
Parameters
bufferIUnifiedMemoryBufferoffsetlonglengthlong
Returns
CreateViewCore(IUnifiedMemoryBuffer, long, long)
Backend-specific view creation implementation.
protected abstract IUnifiedMemoryBuffer CreateViewCore(IUnifiedMemoryBuffer buffer, long offset, long length)
Parameters
bufferIUnifiedMemoryBufferoffsetlonglengthlong
Returns
CreateView<T>(IUnifiedMemoryBuffer<T>, int, int)
Creates a view over existing memory.
public abstract IUnifiedMemoryBuffer<T> CreateView<T>(IUnifiedMemoryBuffer<T> buffer, int offset, int length) where T : unmanaged
Parameters
bufferIUnifiedMemoryBuffer<T>The source buffer.
offsetintThe offset in elements.
lengthintThe length of the view in elements.
Returns
- IUnifiedMemoryBuffer<T>
A view over the existing buffer.
Type Parameters
TThe element type.
Dispose()
Performs dispose.
public void Dispose()
Dispose(bool)
protected virtual void Dispose(bool disposing)
Parameters
disposingbool
DisposeAsync()
Gets dispose asynchronously.
public virtual ValueTask DisposeAsync()
Returns
- ValueTask
The result of the operation.
Free(IUnifiedMemoryBuffer)
Frees a memory buffer.
public virtual void Free(IUnifiedMemoryBuffer buffer)
Parameters
bufferIUnifiedMemoryBufferThe buffer to free.
FreeAsync(IUnifiedMemoryBuffer, CancellationToken)
Asynchronously frees a memory buffer.
public abstract ValueTask FreeAsync(IUnifiedMemoryBuffer buffer, CancellationToken cancellationToken = default)
Parameters
bufferIUnifiedMemoryBufferThe buffer to free.
cancellationTokenCancellationTokenCancellation token.
Returns
- ValueTask
A task representing the free operation.
FreeDevice(DeviceMemory)
Frees device-specific memory.
public virtual void FreeDevice(DeviceMemory deviceMemory)
Parameters
deviceMemoryDeviceMemoryDevice memory to free.
GetRefreshedStatistics()
Gets refreshed memory statistics for this manager after cleaning up unused buffers.
public virtual MemoryStatistics GetRefreshedStatistics()
Returns
MemsetDevice(DeviceMemory, byte, long)
Sets device memory to a specific value.
public virtual void MemsetDevice(DeviceMemory deviceMemory, byte value, long sizeInBytes)
Parameters
deviceMemoryDeviceMemoryDevice memory to set.
valuebyteValue to set.
sizeInByteslongSize in bytes.
MemsetDeviceAsync(DeviceMemory, byte, long, CancellationToken)
Asynchronously sets device memory to a specific value.
public virtual ValueTask MemsetDeviceAsync(DeviceMemory deviceMemory, byte value, long sizeInBytes, CancellationToken cancellationToken = default)
Parameters
deviceMemoryDeviceMemoryDevice memory to set.
valuebyteValue to set.
sizeInByteslongSize in bytes.
cancellationTokenCancellationTokenCancellation token.
Returns
- ValueTask
A task representing the operation.
OptimizeAsync(CancellationToken)
Optimizes memory by defragmenting and releasing unused memory.
public abstract ValueTask OptimizeAsync(CancellationToken cancellationToken = default)
Parameters
cancellationTokenCancellationTokenCancellation token.
Returns
- ValueTask
A task representing the optimization operation.
ThrowIfDisposed()
protected void ThrowIfDisposed()
TrackBuffer(IUnifiedMemoryBuffer, long)
Tracks a newly allocated buffer.
protected virtual void TrackBuffer(IUnifiedMemoryBuffer buffer, long sizeInBytes)
Parameters
bufferIUnifiedMemoryBuffersizeInByteslong