Table of Contents

Class MetalCommandStream

Namespace
DotCompute.Backends.Metal.Execution
Assembly
DotCompute.Backends.Metal.dll

Advanced Metal command stream manager for asynchronous execution pipeline, following CUDA stream patterns for maximum performance and thread safety.

[SuppressMessage("Design", "CA2216:Disposable types should declare finalizer", Justification = "Sealed class with no unmanaged resources; finalizer not required")]
public sealed class MetalCommandStream : IDisposable, IAsyncDisposable
Inheritance
MetalCommandStream
Implements
Inherited Members
Extension Methods

Constructors

MetalCommandStream(nint, ILogger<MetalCommandStream>)

public MetalCommandStream(nint device, ILogger<MetalCommandStream> logger)

Parameters

device nint
logger ILogger<MetalCommandStream>

Properties

DefaultCommandQueue

Gets the default Metal command queue (primary queue)

public nint DefaultCommandQueue { get; }

Property Value

nint

HighPriorityStream

Gets the high priority stream for critical operations

public nint HighPriorityStream { get; }

Property Value

nint

LowPriorityStream

Gets the low priority stream for background operations

public nint LowPriorityStream { get; }

Property Value

nint

OptimizedCommandQueues

Gets optimized command queues for maximum performance

public IReadOnlyList<nint> OptimizedCommandQueues { get; }

Property Value

IReadOnlyList<nint>

Methods

AddStreamCallback(StreamId, Func<StreamId, Task>)

Adds a callback to be executed when stream operations complete

public void AddStreamCallback(StreamId streamId, Func<StreamId, Task> callback)

Parameters

streamId StreamId
callback Func<StreamId, Task>

CreateOptimizedGroupAsync(string, MetalStreamPriority, CancellationToken)

Creates a high-performance stream group optimized for Apple Silicon or Intel Mac

public Task<MetalStreamGroup> CreateOptimizedGroupAsync(string groupName, MetalStreamPriority priority = MetalStreamPriority.High, CancellationToken cancellationToken = default)

Parameters

groupName string
priority MetalStreamPriority
cancellationToken CancellationToken

Returns

Task<MetalStreamGroup>

CreateStreamAsync(MetalStreamFlags, MetalStreamPriority, CancellationToken)

Creates a new Metal stream with advanced options

public Task<MetalStreamHandle> CreateStreamAsync(MetalStreamFlags flags = MetalStreamFlags.Concurrent, MetalStreamPriority priority = MetalStreamPriority.Normal, CancellationToken cancellationToken = default)

Parameters

flags MetalStreamFlags
priority MetalStreamPriority
cancellationToken CancellationToken

Returns

Task<MetalStreamHandle>

CreateStreamBatchAsync(int, MetalStreamFlags, MetalStreamPriority, CancellationToken)

Creates a batch of streams for parallel execution

public Task<MetalStreamHandle[]> CreateStreamBatchAsync(int count, MetalStreamFlags flags = MetalStreamFlags.Concurrent, MetalStreamPriority priority = MetalStreamPriority.Normal, CancellationToken cancellationToken = default)

Parameters

count int
flags MetalStreamFlags
priority MetalStreamPriority
cancellationToken CancellationToken

Returns

Task<MetalStreamHandle[]>

Dispose()

Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.

public void Dispose()

DisposeAsync()

Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources asynchronously.

public ValueTask DisposeAsync()

Returns

ValueTask

A task that represents the asynchronous dispose operation.

ExecuteCommandAsync(StreamId, Func<nint, nint, Task>, string?, CancellationToken)

Executes a command asynchronously on the specified stream

public Task<MetalCommandExecutionResult> ExecuteCommandAsync(StreamId streamId, Func<nint, nint, Task> commandOperation, string? operationName = null, CancellationToken cancellationToken = default)

Parameters

streamId StreamId
commandOperation Func<nint, nint, Task>
operationName string
cancellationToken CancellationToken

Returns

Task<MetalCommandExecutionResult>

ExecuteGraphAsync(MetalExecutionGraph, CancellationToken)

Implements graph-like execution pattern with dependencies

public Task ExecuteGraphAsync(MetalExecutionGraph graph, CancellationToken cancellationToken = default)

Parameters

graph MetalExecutionGraph
cancellationToken CancellationToken

Returns

Task

GetStatistics()

Gets comprehensive stream statistics for monitoring

public MetalStreamStatistics GetStatistics()

Returns

MetalStreamStatistics

IsStreamReady(StreamId)

Checks if a stream is ready (all operations completed)

public bool IsStreamReady(StreamId streamId)

Parameters

streamId StreamId

Returns

bool

OptimizeStreamUsage()

Optimizes stream usage for current hardware

public void OptimizeStreamUsage()

SynchronizeStreamAsync(StreamId, TimeSpan?, CancellationToken)

Synchronizes a stream asynchronously with timeout support

public Task SynchronizeStreamAsync(StreamId streamId, TimeSpan? timeout = null, CancellationToken cancellationToken = default)

Parameters

streamId StreamId
timeout TimeSpan?
cancellationToken CancellationToken

Returns

Task

SynchronizeStreamsAsync(StreamId, StreamId, MetalEvent, CancellationToken)

Implements event-based synchronization between streams

public Task SynchronizeStreamsAsync(StreamId waitingStream, StreamId signalStream, MetalEvent metalEvent, CancellationToken cancellationToken = default)

Parameters

waitingStream StreamId
signalStream StreamId
metalEvent MetalEvent
cancellationToken CancellationToken

Returns

Task