Exemplo n.º 1
0
        public static ArrayView <T> Allocate <T>(int extent)
            where T : unmanaged
        {
            Trace.Assert(extent >= 0, "Invalid extent");
            int elementSize = Interop.SizeOf <T>();

            return(new ArrayView <T>(
                       CPUMemoryBuffer.Create(extent * elementSize, elementSize),
                       0,
                       extent));
        }
Exemplo n.º 2
0
 /// <summary>
 /// Initializes a new basic exchange buffer.
 /// </summary>
 /// <param name="gpuBuffer">The parent GPU buffer to use.</param>
 /// <param name="mode">The exchange buffer mode to use.</param>
 /// <remarks>
 /// CAUTION: The ownership of the <paramref name="gpuBuffer"/> is transferred to
 /// this instance.
 /// </remarks>
 protected internal ExchangeBuffer(
     MemoryBuffer <ArrayView1D <T, Stride1D.Dense> > gpuBuffer,
     ExchangeBufferMode mode)
     : base(gpuBuffer.Accelerator)
 {
     GPUBuffer = gpuBuffer;
     CPUBuffer = Accelerator is CudaAccelerator &&
                 mode == ExchangeBufferMode.PreferPageLockedMemory
         ? CPUMemoryBuffer.CreatePinned(
         Accelerator,
         gpuBuffer.LengthInBytes,
         gpuBuffer.ElementSize)
         : CPUMemoryBuffer.Create(gpuBuffer.LengthInBytes, gpuBuffer.ElementSize);
     CPUView = new ArrayView <T>(CPUBuffer, 0, gpuBuffer.Length);
 }
Exemplo n.º 3
0
        /// <summary>
        /// Initializes this page locked array.
        /// </summary>
        /// <param name="accelerator">The parent accelerator.</param>
        /// <param name="ptr">The pinned host pointer.</param>
        /// <param name="length">The total number of elements.</param>
        protected unsafe void Initialize(
            Accelerator accelerator,
            IntPtr ptr,
            long length)
        {
            if (length < 0L)
            {
                throw new ArgumentNullException(nameof(length));
            }

            if (length > 0L)
            {
                MemoryBuffer = CPUMemoryBuffer.Create(
                    accelerator,
                    ptr,
                    length,
                    Interop.SizeOf <T>());
                ArrayView = MemoryBuffer.AsArrayView <T>(0L, MemoryBuffer.Length);
                Scope     = accelerator.CreatePageLockFromPinned <T>(ptr, length);
            }
        }