Example #1
0
 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);
     }
 }
Example #2
0
 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);
     }
 }
Example #3
0
        /// <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();
        }