Table of Contents

Class MetalMemoryManager

Namespace
DotCompute.Backends.Metal.Memory
Assembly
DotCompute.Backends.Metal.dll

Metal-specific memory manager implementation with real Metal API integration. Consolidated using BaseMemoryManager to eliminate duplicate patterns.

public sealed class MetalMemoryManager : BaseMemoryManager, IUnifiedMemoryManager, IAsyncDisposable, IDisposable
Inheritance
MetalMemoryManager
Implements
Inherited Members
Extension Methods

Constructors

MetalMemoryManager(ILogger<MetalMemoryManager>, IAccelerator?, bool)

Initializes a new instance of the MetalMemoryManager class.

public MetalMemoryManager(ILogger<MetalMemoryManager> logger, IAccelerator? accelerator = null, bool enablePooling = true)

Parameters

logger ILogger<MetalMemoryManager>

The logger instance.

accelerator IAccelerator

Optional accelerator reference.

enablePooling bool

Whether to enable memory pooling (default: true for 90% allocation reduction).

Properties

Accelerator

Gets the accelerator this memory manager is associated with.

public override IAccelerator Accelerator { get; }

Property Value

IAccelerator

CurrentAllocatedMemory

Gets the current allocated memory in bytes.

public override long CurrentAllocatedMemory { get; }

Property Value

long

Device

Gets the Metal device used by this manager.

public nint Device { get; }

Property Value

nint

IsAppleSilicon

Gets whether the system is running on Apple Silicon with unified memory.

public bool IsAppleSilicon { get; }

Property Value

bool

IsUnifiedMemory

Gets whether the Metal device has unified memory architecture.

public bool IsUnifiedMemory { get; }

Property Value

bool

MaxAllocationSize

Gets the maximum memory allocation size in bytes.

public override long MaxAllocationSize { get; }

Property Value

long

MemoryOptimizer

Gets the unified memory optimizer.

public MetalUnifiedMemoryOptimizer MemoryOptimizer { get; }

Property Value

MetalUnifiedMemoryOptimizer

PoolStatistics

Gets pool statistics if pooling is enabled.

public MemoryPoolManagerStatistics? PoolStatistics { get; }

Property Value

MemoryPoolManagerStatistics

Statistics

Gets memory usage statistics.

public override MemoryStatistics Statistics { get; }

Property Value

MemoryStatistics

TotalAvailableMemory

Gets the total available memory in bytes.

public override long TotalAvailableMemory { get; }

Property Value

long

Methods

AllocateInternalAsync(long, MemoryOptions, CancellationToken)

Allocates memory using backend-specific implementation.

protected override ValueTask<IUnifiedMemoryBuffer> AllocateInternalAsync(long sizeInBytes, MemoryOptions options, CancellationToken cancellationToken)

Parameters

sizeInBytes long
options MemoryOptions
cancellationToken CancellationToken

Returns

ValueTask<IUnifiedMemoryBuffer>

Clear()

Clears all allocated memory and resets the manager.

public override void Clear()

ClearPools()

Clears all memory pools if pooling is enabled.

public void ClearPools()

CopyAsync<T>(IUnifiedMemoryBuffer<T>, IUnifiedMemoryBuffer<T>, CancellationToken)

Copies data between buffers.

public override ValueTask CopyAsync<T>(IUnifiedMemoryBuffer<T> source, IUnifiedMemoryBuffer<T> destination, CancellationToken cancellationToken) where T : unmanaged

Parameters

source IUnifiedMemoryBuffer<T>

The source buffer.

destination IUnifiedMemoryBuffer<T>

The destination buffer.

cancellationToken CancellationToken

Cancellation token.

Returns

ValueTask

A task representing the copy operation.

Type Parameters

T

The element type.

CopyAsync<T>(IUnifiedMemoryBuffer<T>, int, IUnifiedMemoryBuffer<T>, int, int, CancellationToken)

Copies data between buffers with specified ranges.

public override ValueTask CopyAsync<T>(IUnifiedMemoryBuffer<T> source, int sourceOffset, IUnifiedMemoryBuffer<T> destination, int destinationOffset, int count, CancellationToken cancellationToken) where T : unmanaged

Parameters

source IUnifiedMemoryBuffer<T>

The source buffer.

sourceOffset int

The offset in the source buffer.

destination IUnifiedMemoryBuffer<T>

The destination buffer.

destinationOffset int

The offset in the destination buffer.

count int

The number of elements to copy.

cancellationToken CancellationToken

Cancellation token.

Returns

ValueTask

A task representing the copy operation.

Type Parameters

T

The element type.

CopyFromDeviceAsync<T>(IUnifiedMemoryBuffer<T>, Memory<T>, CancellationToken)

Copies data from a device buffer to host memory.

public override ValueTask CopyFromDeviceAsync<T>(IUnifiedMemoryBuffer<T> source, Memory<T> destination, CancellationToken cancellationToken) where T : unmanaged

Parameters

source IUnifiedMemoryBuffer<T>

The source buffer.

destination Memory<T>

The destination memory.

cancellationToken CancellationToken

Cancellation token.

Returns

ValueTask

A task representing the copy operation.

Type Parameters

T

The element type.

CopyToDeviceAsync<T>(ReadOnlyMemory<T>, IUnifiedMemoryBuffer<T>, CancellationToken)

Copies data from host memory to a device buffer.

public override ValueTask CopyToDeviceAsync<T>(ReadOnlyMemory<T> source, IUnifiedMemoryBuffer<T> destination, CancellationToken cancellationToken) where T : unmanaged

Parameters

source ReadOnlyMemory<T>

The source data.

destination IUnifiedMemoryBuffer<T>

The destination buffer.

cancellationToken CancellationToken

Cancellation token.

Returns

ValueTask

A task representing the copy operation.

Type Parameters

T

The element type.

CreateViewCore(IUnifiedMemoryBuffer, long, long)

Backend-specific view creation implementation.

protected override IUnifiedMemoryBuffer CreateViewCore(IUnifiedMemoryBuffer buffer, long offset, long length)

Parameters

buffer IUnifiedMemoryBuffer
offset long
length long

Returns

IUnifiedMemoryBuffer

CreateView<T>(IUnifiedMemoryBuffer<T>, int, int)

Creates a view over existing memory.

public override IUnifiedMemoryBuffer<T> CreateView<T>(IUnifiedMemoryBuffer<T> buffer, int offset, int length) where T : unmanaged

Parameters

buffer IUnifiedMemoryBuffer<T>

The source buffer.

offset int

The offset in elements.

length int

The length of the view in elements.

Returns

IUnifiedMemoryBuffer<T>

A view over the existing buffer.

Type Parameters

T

The element type.

Dispose(bool)

Disposes the memory manager and all resources.

protected override void Dispose(bool disposing)

Parameters

disposing bool

FreeAsync(IUnifiedMemoryBuffer, CancellationToken)

Asynchronously frees a memory buffer.

public override ValueTask FreeAsync(IUnifiedMemoryBuffer buffer, CancellationToken cancellationToken)

Parameters

buffer IUnifiedMemoryBuffer

The buffer to free.

cancellationToken CancellationToken

Cancellation token.

Returns

ValueTask

A task representing the free operation.

GeneratePoolReport()

Generates a detailed pool performance report.

public string? GeneratePoolReport()

Returns

string

GetOptimalStorageMode(MemoryUsagePattern)

Gets the optimal storage mode for a memory usage pattern.

public MetalStorageMode GetOptimalStorageMode(MemoryUsagePattern pattern)

Parameters

pattern MemoryUsagePattern

The memory usage pattern.

Returns

MetalStorageMode

The optimal Metal storage mode.

GetStatisticsAsync(CancellationToken)

Gets accurate Metal memory statistics asynchronously.

public ValueTask<MemoryStatistics> GetStatisticsAsync(CancellationToken cancellationToken = default)

Parameters

cancellationToken CancellationToken

Cancellation token.

Returns

ValueTask<MemoryStatistics>

A task containing accurate memory statistics from the device.

Remarks

This method queries the Metal device for accurate memory information. On Apple Silicon, this includes unified memory statistics. For fast synchronous access, use the Statistics property.

OptimizeAsync(CancellationToken)

Optimizes memory by defragmenting and releasing unused memory.

public override ValueTask OptimizeAsync(CancellationToken cancellationToken)

Parameters

cancellationToken CancellationToken

Cancellation token.

Returns

ValueTask

A task representing the optimization operation.

PreAllocatePoolAsync(int, int, MemoryOptions, CancellationToken)

Pre-allocates buffers to warm up the pool.

public Task PreAllocatePoolAsync(int poolSize, int count, MemoryOptions options, CancellationToken cancellationToken = default)

Parameters

poolSize int
count int
options MemoryOptions
cancellationToken CancellationToken

Returns

Task

SetAcceleratorReference(IAccelerator)

Sets the accelerator reference after construction.

public void SetAcceleratorReference(IAccelerator accelerator)

Parameters

accelerator IAccelerator

The accelerator to reference.