Table of Contents

Class SimpleCudaUnifiedMemoryBuffer<T>

Namespace
DotCompute.Backends.CUDA.Memory
Assembly
DotCompute.Backends.CUDA.dll

Simple CUDA unified memory buffer implementation for the memory adapter. This is a lightweight version that doesn't depend on CudaUnifiedMemoryManagerProduction.

public sealed class SimpleCudaUnifiedMemoryBuffer<T> : IUnifiedMemoryBuffer<T>, IUnifiedMemoryBuffer, IDisposable, IAsyncDisposable where T : unmanaged

Type Parameters

T
Inheritance
SimpleCudaUnifiedMemoryBuffer<T>
Implements
Inherited Members
Extension Methods

Remarks

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

Constructors

SimpleCudaUnifiedMemoryBuffer(nint, int, bool)

Simple CUDA unified memory buffer implementation for the memory adapter. This is a lightweight version that doesn't depend on CudaUnifiedMemoryManagerProduction.

public SimpleCudaUnifiedMemoryBuffer(nint devicePtr, int length, bool ownsMemory = true)

Parameters

devicePtr nint
length int
ownsMemory bool

Remarks

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

Properties

Accelerator

Gets the accelerator this buffer is associated with.

public IAccelerator Accelerator { get; }

Property Value

IAccelerator

DevicePointer

public nint DevicePointer { get; }

Property Value

nint

HostPointer

public nint HostPointer { get; }

Property Value

nint

IsDirty

Gets whether the buffer has been modified and needs synchronization.

public bool IsDirty { get; }

Property Value

bool

IsDisposed

Gets whether the buffer has been disposed.

public bool IsDisposed { get; }

Property Value

bool

IsOnDevice

Gets whether the buffer is currently available on the device.

public bool IsOnDevice { get; }

Property Value

bool

IsOnHost

Gets whether the buffer is currently available on the host.

public bool IsOnHost { get; }

Property Value

bool

IsUnified

public bool IsUnified { get; }

Property Value

bool

Length

Gets the number of elements in the buffer.

public int Length { get; }

Property Value

int

Location

public MemoryLocation Location { get; }

Property Value

MemoryLocation

Options

Gets the memory allocation options.

public 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 BufferState State { get; }

Property Value

BufferState

Methods

AsMemory()

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

public Memory<T> AsMemory()

Returns

Memory<T>

AsReadOnlyMemory()

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

public ReadOnlyMemory<T> AsReadOnlyMemory()

Returns

ReadOnlyMemory<T>

AsReadOnlySpan()

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

public ReadOnlySpan<T> AsReadOnlySpan()

Returns

ReadOnlySpan<T>

AsSpan()

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

public Span<T> AsSpan()

Returns

Span<T>

AsType<TNew>()

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

public 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.

CopyFrom(IUnifiedMemoryBuffer<T>)

public void CopyFrom(IUnifiedMemoryBuffer<T> source)

Parameters

source IUnifiedMemoryBuffer<T>

CopyFrom(ReadOnlySpan<T>)

public void CopyFrom(ReadOnlySpan<T> source)

Parameters

source ReadOnlySpan<T>

CopyFromAsync(ReadOnlyMemory<T>, CancellationToken)

Copies data from a source memory into this buffer.

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

Parameters

source ReadOnlyMemory<T>
cancellationToken CancellationToken

Returns

ValueTask

CopyFromAsync<TSource>(ReadOnlyMemory<TSource>, long, CancellationToken)

Copies data from a source memory into this buffer.

public ValueTask CopyFromAsync<TSource>(ReadOnlyMemory<TSource> source, long offset, CancellationToken cancellationToken = default) where TSource : unmanaged

Parameters

source ReadOnlyMemory<TSource>

The source memory to copy from.

offset long

The offset in bytes where to start copying.

cancellationToken CancellationToken

Cancellation token.

Returns

ValueTask

A task representing the copy operation.

Type Parameters

TSource

CopyTo(IUnifiedMemoryBuffer<T>)

public void CopyTo(IUnifiedMemoryBuffer<T> destination)

Parameters

destination IUnifiedMemoryBuffer<T>

CopyTo(Span<T>)

public void CopyTo(Span<T> destination)

Parameters

destination Span<T>

CopyToAsync(IUnifiedMemoryBuffer<T>, CancellationToken)

Copies data from this buffer to another buffer.

public 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 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>, CancellationToken)

Copies data from this buffer to a destination memory.

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

Parameters

destination Memory<T>
cancellationToken CancellationToken

Returns

ValueTask

CopyToAsync<TDest>(Memory<TDest>, long, CancellationToken)

Copies data from this buffer to a destination memory.

public ValueTask CopyToAsync<TDest>(Memory<TDest> destination, long offset, CancellationToken cancellationToken = default) where TDest : unmanaged

Parameters

destination Memory<TDest>

The destination memory to copy to.

offset long

The offset in bytes where to start copying from.

cancellationToken CancellationToken

Cancellation token.

Returns

ValueTask

A task representing the copy operation.

Type Parameters

TDest

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.

EnsureOnDevice()

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

public void EnsureOnDevice()

EnsureOnDeviceAsync(AcceleratorContext, CancellationToken)

Asynchronously ensures the buffer is available on the device.

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

Parameters

context AcceleratorContext
cancellationToken CancellationToken

Returns

ValueTask

EnsureOnHost()

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

public void EnsureOnHost()

EnsureOnHostAsync(AcceleratorContext, CancellationToken)

Asynchronously ensures the buffer is available on the host.

public ValueTask EnsureOnHostAsync(AcceleratorContext context, 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 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 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 DeviceMemory GetDeviceMemory()

Returns

DeviceMemory

Map(MapMode)

Maps this buffer to host memory for direct access.

public MappedMemory<T> Map(MapMode mode)

Parameters

mode MapMode

The mapping mode.

Returns

MappedMemory<T>

A mapped memory region.

MapAsync(MapMode, CancellationToken)

Asynchronously maps this buffer to host memory.

public ValueTask<MappedMemory<T>> MapAsync(MapMode mode, 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 MappedMemory<T> MapRange(int offset, int length, MapMode mode)

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.

MapRangeAsync(int, int, MapMode, CancellationToken)

public ValueTask<MappedMemory<T>> MapRangeAsync(int offset, int length, MapMode mode, CancellationToken cancellationToken = default)

Parameters

offset int
length int
mode MapMode
cancellationToken CancellationToken

Returns

ValueTask<MappedMemory<T>>

MarkDeviceDirty()

Marks the buffer as modified on the device.

public void MarkDeviceDirty()

MarkHostDirty()

Marks the buffer as modified on the host.

public void MarkHostDirty()

Prefetch(int)

public void Prefetch(int deviceId = -1)

Parameters

deviceId int

Slice(int, int)

Creates a slice of this buffer.

public 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 void Synchronize()

SynchronizeAsync(AcceleratorContext, CancellationToken)

Asynchronously synchronizes the buffer state between host and device.

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

Parameters

context AcceleratorContext
cancellationToken CancellationToken

Returns

ValueTask

SynchronizeAsync(CancellationToken)

public ValueTask SynchronizeAsync(CancellationToken cancellationToken = default)

Parameters

cancellationToken CancellationToken

Returns

ValueTask