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
devicenintloggerILogger<MetalCommandStream>
Properties
DefaultCommandQueue
Gets the default Metal command queue (primary queue)
public nint DefaultCommandQueue { get; }
Property Value
HighPriorityStream
Gets the high priority stream for critical operations
public nint HighPriorityStream { get; }
Property Value
LowPriorityStream
Gets the low priority stream for background operations
public nint LowPriorityStream { get; }
Property Value
OptimizedCommandQueues
Gets optimized command queues for maximum performance
public IReadOnlyList<nint> OptimizedCommandQueues { get; }
Property Value
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
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
groupNamestringpriorityMetalStreamPrioritycancellationTokenCancellationToken
Returns
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
flagsMetalStreamFlagspriorityMetalStreamPrioritycancellationTokenCancellationToken
Returns
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
countintflagsMetalStreamFlagspriorityMetalStreamPrioritycancellationTokenCancellationToken
Returns
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
streamIdStreamIdcommandOperationFunc<nint, nint, Task>operationNamestringcancellationTokenCancellationToken
Returns
ExecuteGraphAsync(MetalExecutionGraph, CancellationToken)
Implements graph-like execution pattern with dependencies
public Task ExecuteGraphAsync(MetalExecutionGraph graph, CancellationToken cancellationToken = default)
Parameters
graphMetalExecutionGraphcancellationTokenCancellationToken
Returns
GetStatistics()
Gets comprehensive stream statistics for monitoring
public MetalStreamStatistics GetStatistics()
Returns
IsStreamReady(StreamId)
Checks if a stream is ready (all operations completed)
public bool IsStreamReady(StreamId streamId)
Parameters
streamIdStreamId
Returns
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
streamIdStreamIdtimeoutTimeSpan?cancellationTokenCancellationToken
Returns
SynchronizeStreamsAsync(StreamId, StreamId, MetalEvent, CancellationToken)
Implements event-based synchronization between streams
public Task SynchronizeStreamsAsync(StreamId waitingStream, StreamId signalStream, MetalEvent metalEvent, CancellationToken cancellationToken = default)
Parameters
waitingStreamStreamIdsignalStreamStreamIdmetalEventMetalEventcancellationTokenCancellationToken