Table of Contents

Class BaseMemoryBuffer<T>

Namespace
DotCompute.Memory
Assembly
DotCompute.Memory.dll

Base abstract class for memory buffer implementations, consolidating common patterns. This addresses the critical issue of 15+ duplicate buffer implementations.

public abstract class BaseMemoryBuffer<T> : IUnifiedMemoryBuffer<T>, IUnifiedMemoryBuffer, IAsyncDisposable, IDisposable where T : unmanaged

Type Parameters

T
Inheritance
BaseMemoryBuffer<T>
Implements
Derived
Inherited Members
Extension Methods

Constructors

BaseMemoryBuffer(long)

Initializes a new instance of the BaseMemoryBuffer<T> class.

protected BaseMemoryBuffer(long sizeInBytes)

Parameters

sizeInBytes long

Properties

Accelerator

Gets the accelerator this buffer is associated with.

public abstract IAccelerator Accelerator { get; }

Property Value

IAccelerator

DevicePointer

public abstract nint DevicePointer { get; }

Property Value

nint

IsDirty

Gets whether the buffer has been modified and needs synchronization.

public abstract bool IsDirty { get; }

Property Value

bool

IsDisposed

Gets whether the buffer has been disposed.

public abstract bool IsDisposed { get; }

Property Value

bool

IsOnDevice

Gets whether the buffer is currently available on the device.

public abstract bool IsOnDevice { get; }

Property Value

bool

IsOnHost

Gets whether the buffer is currently available on the host.

public abstract bool IsOnHost { get; }

Property Value

bool

Length

Gets the number of elements in the buffer.

public int Length { get; }

Property Value

int

MemoryType

public abstract MemoryType MemoryType { get; }

Property Value

MemoryType

Options

Gets the memory allocation options.

public abstract MemoryOptions Options { get; }

Property Value

MemoryOptions

SizeInBytes

Gets the size of the buffer in bytes.

public long SizeInBytes { get; }

Property Value

long

State

Gets the current state of the buffer.

public abstract BufferState State { get; }

Property Value

BufferState

Methods

AsMemory()

Gets a memory handle to the host memory. Will trigger transfer if needed.

public abstract Memory<T> AsMemory()

Returns

Memory<T>

AsReadOnlyMemory()

Gets a read-only memory handle to the host memory. Will trigger transfer if needed.

public abstract ReadOnlyMemory<T> AsReadOnlyMemory()

Returns

ReadOnlyMemory<T>

AsReadOnlySpan()

Gets a read-only span to the host memory. Will trigger transfer if needed.

public abstract ReadOnlySpan<T> AsReadOnlySpan()

Returns

ReadOnlySpan<T>

AsSpan()

Gets a span to the host memory. Will trigger transfer if needed.

public abstract Span<T> AsSpan()

Returns

Span<T>

AsType<TNew>()

Creates a view of this buffer with a different element type.

public abstract IUnifiedMemoryBuffer<TNew> AsType<TNew>() where TNew : unmanaged

Returns

IUnifiedMemoryBuffer<TNew>

A view of this buffer as the new type.

Type Parameters

TNew

The new element type.

CopyFromAsync(IUnifiedMemoryBuffer<T>, long, long, long, CancellationToken)

public abstract ValueTask CopyFromAsync(IUnifiedMemoryBuffer<T> source, long sourceOffset = 0, long destinationOffset = 0, long count = -1, CancellationToken cancellationToken = default)

Parameters

source IUnifiedMemoryBuffer<T>
sourceOffset long
destinationOffset long
count long
cancellationToken CancellationToken

Returns

ValueTask

CopyFromAsync(ReadOnlyMemory<T>, long, CancellationToken)

public abstract ValueTask CopyFromAsync(ReadOnlyMemory<T> source, long offset = 0, CancellationToken cancellationToken = default)

Parameters

source ReadOnlyMemory<T>
offset long
cancellationToken CancellationToken

Returns

ValueTask

CopyFromAsync(ReadOnlyMemory<T>, CancellationToken)

Copies data from a source memory into this buffer.

public abstract ValueTask CopyFromAsync(ReadOnlyMemory<T> source, CancellationToken cancellationToken = default)

Parameters

source ReadOnlyMemory<T>
cancellationToken CancellationToken

Returns

ValueTask

CopyToAsync(IUnifiedMemoryBuffer<T>, CancellationToken)

Copies data from this buffer to another buffer.

public abstract ValueTask CopyToAsync(IUnifiedMemoryBuffer<T> destination, CancellationToken cancellationToken = default)

Parameters

destination IUnifiedMemoryBuffer<T>
cancellationToken CancellationToken

Returns

ValueTask

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

Copies data from this buffer to another buffer with specified ranges.

public abstract ValueTask CopyToAsync(int sourceOffset, IUnifiedMemoryBuffer<T> destination, int destinationOffset, int count, CancellationToken cancellationToken = default)

Parameters

sourceOffset int
destination IUnifiedMemoryBuffer<T>
destinationOffset int
count int
cancellationToken CancellationToken

Returns

ValueTask

CopyToAsync(Memory<T>, long, CancellationToken)

public abstract ValueTask CopyToAsync(Memory<T> destination, long offset = 0, CancellationToken cancellationToken = default)

Parameters

destination Memory<T>
offset long
cancellationToken CancellationToken

Returns

ValueTask

CopyToAsync(Memory<T>, CancellationToken)

Copies data from this buffer to a destination memory.

public abstract ValueTask CopyToAsync(Memory<T> destination, CancellationToken cancellationToken = default)

Parameters

destination Memory<T>
cancellationToken CancellationToken

Returns

ValueTask

Dispose()

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

public abstract void Dispose()

DisposeAsync()

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

public abstract ValueTask DisposeAsync()

Returns

ValueTask

A task that represents the asynchronous dispose operation.

EnsureOnDevice()

Ensures the buffer is available on the device. Triggers transfer if needed.

public abstract void EnsureOnDevice()

EnsureOnDeviceAsync(AcceleratorContext, CancellationToken)

Asynchronously ensures the buffer is available on the device.

public abstract ValueTask EnsureOnDeviceAsync(AcceleratorContext context = default, CancellationToken cancellationToken = default)

Parameters

context AcceleratorContext
cancellationToken CancellationToken

Returns

ValueTask

EnsureOnHost()

Ensures the buffer is available on the host. Triggers transfer if needed.

public abstract void EnsureOnHost()

EnsureOnHostAsync(AcceleratorContext, CancellationToken)

Asynchronously ensures the buffer is available on the host.

public abstract ValueTask EnsureOnHostAsync(AcceleratorContext context = default, CancellationToken cancellationToken = default)

Parameters

context AcceleratorContext
cancellationToken CancellationToken

Returns

ValueTask

FillAsync(T, int, int, CancellationToken)

Fills a portion of this buffer with a specified value.

public abstract ValueTask FillAsync(T value, int offset, int count, CancellationToken cancellationToken = default)

Parameters

value T
offset int
count int
cancellationToken CancellationToken

Returns

ValueTask

FillAsync(T, CancellationToken)

Fills this buffer with a specified value.

public abstract ValueTask FillAsync(T value, CancellationToken cancellationToken = default)

Parameters

value T
cancellationToken CancellationToken

Returns

ValueTask

GetDeviceMemory()

Gets the device memory handle. Will trigger transfer if needed.

public abstract DeviceMemory GetDeviceMemory()

Returns

DeviceMemory

Map(MapMode)

Maps this buffer to host memory for direct access.

public virtual MappedMemory<T> Map(MapMode mode = MapMode.ReadWrite)

Parameters

mode MapMode

The mapping mode.

Returns

MappedMemory<T>

A mapped memory region.

MapAsync(MapMode, CancellationToken)

Asynchronously maps this buffer to host memory.

public virtual ValueTask<MappedMemory<T>> MapAsync(MapMode mode = MapMode.ReadWrite, CancellationToken cancellationToken = default)

Parameters

mode MapMode

The mapping mode.

cancellationToken CancellationToken

Cancellation token.

Returns

ValueTask<MappedMemory<T>>

A task that returns the mapped memory region.

MapRange(int, int, MapMode)

Maps a portion of this buffer to host memory for direct access.

public virtual MappedMemory<T> MapRange(int offset, int length, MapMode mode = MapMode.ReadWrite)

Parameters

offset int

The offset to start mapping at.

length int

The number of elements to map.

mode MapMode

The mapping mode.

Returns

MappedMemory<T>

A mapped memory region.

MarkDeviceDirty()

Marks the buffer as modified on the device.

public abstract void MarkDeviceDirty()

MarkHostDirty()

Marks the buffer as modified on the host.

public abstract void MarkHostDirty()

Slice(int, int)

Creates a slice of this buffer.

public abstract IUnifiedMemoryBuffer<T> Slice(int offset, int length)

Parameters

offset int

The offset in elements.

length int

The length of the slice in elements.

Returns

IUnifiedMemoryBuffer<T>

A slice of this buffer.

Synchronize()

Synchronizes the buffer state between host and device.

public abstract void Synchronize()

SynchronizeAsync(AcceleratorContext, CancellationToken)

Asynchronously synchronizes the buffer state between host and device.

public abstract ValueTask SynchronizeAsync(AcceleratorContext context = default, CancellationToken cancellationToken = default)

Parameters

context AcceleratorContext
cancellationToken CancellationToken

Returns

ValueTask

ThrowIfDisposed()

Throws if the buffer has been disposed.

protected void ThrowIfDisposed()

ValidateCopyParameters(long, long, long, long, long)

Validates copy parameters.

protected void ValidateCopyParameters(long sourceLength, long sourceOffset, long destinationLength, long destinationOffset, long count)

Parameters

sourceLength long
sourceOffset long
destinationLength long
destinationOffset long
count long