Interface IMessageQueue<T>
- Namespace
- DotCompute.Abstractions.RingKernels
- Assembly
- DotCompute.Abstractions.dll
Represents a GPU-resident lock-free message queue for inter-kernel communication.
public interface IMessageQueue<T> : IMessageQueue, IAsyncDisposable where T : unmanaged
Type Parameters
TThe message payload type. Must be an unmanaged type for GPU transfer.
- Inherited Members
Remarks
MessageQueue implements a lock-free ring buffer using atomic operations for concurrent access from multiple GPU threads. The implementation supports:
- Multiple concurrent producers (enqueue)
- Multiple concurrent consumers (dequeue)
- GPU-resident buffers to avoid CPU-GPU transfers
- Atomic head/tail indices for thread safety
Queue capacity should be a power of 2 for optimal modulo operations.
Methods
DequeueAsync(TimeSpan, CancellationToken)
Dequeues a message, blocking until one is available.
Task<KernelMessage<T>> DequeueAsync(TimeSpan timeout = default, CancellationToken cancellationToken = default)
Parameters
timeoutTimeSpanMaximum wait time (default: infinite).
cancellationTokenCancellationTokenCancellation token.
Returns
- Task<KernelMessage<T>>
The dequeued message.
Exceptions
- TimeoutException
Thrown if the timeout expires before a message arrives.
EnqueueAsync(KernelMessage<T>, TimeSpan, CancellationToken)
Enqueues a message, blocking until space is available.
Task EnqueueAsync(KernelMessage<T> message, TimeSpan timeout = default, CancellationToken cancellationToken = default)
Parameters
messageKernelMessage<T>The message to enqueue.
timeoutTimeSpanMaximum wait time (default: infinite).
cancellationTokenCancellationTokenCancellation token.
Returns
- Task
A task that completes when the message is enqueued.
Exceptions
- TimeoutException
Thrown if the timeout expires before space becomes available.
TryDequeueAsync(CancellationToken)
Attempts to dequeue a message (non-blocking).
Task<KernelMessage<T>?> TryDequeueAsync(CancellationToken cancellationToken = default)
Parameters
cancellationTokenCancellationTokenCancellation token.
Returns
- Task<KernelMessage<T>?>
The dequeued message if available; null if the queue was empty.
Remarks
This is a non-blocking operation that returns null if the queue is empty. Use BlockingDequeue if you need to wait for messages.
TryEnqueueAsync(KernelMessage<T>, CancellationToken)
Attempts to enqueue a message (non-blocking).
Task<bool> TryEnqueueAsync(KernelMessage<T> message, CancellationToken cancellationToken = default)
Parameters
messageKernelMessage<T>The message to enqueue.
cancellationTokenCancellationTokenCancellation token.
Returns
Remarks
This is a non-blocking operation that returns false if the queue is full. Use BlockingEnqueue if you need guaranteed delivery with backpressure.