public unsafe void CopyFrom <T>(AcceleratorStream stream, T source, Index sourceIndex) where T : struct { using (var wrapper = ViewPointerWrapper.Create(ref source)) { var view = new ArrayView <T>(wrapper, 0, 1); cache.CopyFromView(stream, view.Cast <byte>(), sourceIndex); } }
public unsafe void CopyTo <T>(AcceleratorStream stream, out T target, Index targetIndex) where T : struct { target = default; using (var wrapper = ViewPointerWrapper.Create(ref target)) { var view = new ArrayView <T>(wrapper, 0, 1); cache.CopyToView(stream, view.Cast <byte>(), targetIndex); } }
/// <summary> /// Constructs the base class for all exchange buffer implementations. /// </summary> /// <param name="buffer">The memory buffer to use.</param> /// <param name="mode">The exchange buffer mode to use.</param> internal ExchangeBufferBase(MemoryBuffer <T, TIndex> buffer, ExchangeBufferMode mode) : base(buffer.Accelerator, buffer.Extent.Size) { cpuMemory = buffer.Accelerator is CudaAccelerator && mode == ExchangeBufferMode.PreferPagedLockedMemory ? CudaViewSource.Create(buffer.LengthInBytes) : (ViewPointerWrapper)UnmanagedMemoryViewSource.Create( buffer.LengthInBytes); cpuMemoryPointer = cpuMemory.NativePtr.ToPointer(); }