Table of Contents

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

T

The 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

timeout TimeSpan

Maximum wait time (default: infinite).

cancellationToken CancellationToken

Cancellation 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

message KernelMessage<T>

The message to enqueue.

timeout TimeSpan

Maximum wait time (default: infinite).

cancellationToken CancellationToken

Cancellation 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

cancellationToken CancellationToken

Cancellation 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

message KernelMessage<T>

The message to enqueue.

cancellationToken CancellationToken

Cancellation token.

Returns

Task<bool>

True if the message was enqueued; false if the queue was full.

Remarks

This is a non-blocking operation that returns false if the queue is full. Use BlockingEnqueue if you need guaranteed delivery with backpressure.