示例#1
0
        private CUdeviceptr GetDeviceMemory(object vector, ref int n)
        {
            CUDevicePtrEx ptrEx = _gpu.GetDeviceMemory(vector) as CUDevicePtrEx;

            n = (n == 0 ? ptrEx.TotalSize : n);

            return(ptrEx.DevPtr);
        }
示例#2
0
        //private int MSizeOf<T>()
        //{
        //    return Marshal.SizeOf(typeof(T));
        //}

        /// <summary>
        /// Frees the specified data array on device.
        /// </summary>
        /// <param name="devArray">The device array to free.</param>
        public override void Free(object devArray)
        {
            VerifyOnGPU(devArray);
            CUDevicePtrEx ptrEx = (CUDevicePtrEx)_deviceMemory[devArray];

            HandleError(CUDARuntime.cudaFree(ptrEx.DevPtr));
            _deviceMemory.Remove(devArray);
        }
示例#3
0
        private void CopyFromDevice <T>(Array devArray, int devOffset, Array hostArray, int hostOffset, int count)
        {
            CUDevicePtrEx devPtrEx = GetDeviceMemory(devArray) as CUDevicePtrEx;
            int           n        = hostArray.Length;
            Type          type     = typeof(T);
            int           elemSize = CUDA.MSizeOf(type);

            unsafe
            {
                GCHandle    handle  = GCHandle.Alloc(hostArray, GCHandleType.Pinned);
                IntPtr      hostPtr = new IntPtr(handle.AddrOfPinnedObject().ToInt64() + hostOffset * elemSize);
                CUdeviceptr devPtr  = devPtrEx.DevPtr + devOffset * elemSize;
                cudaError   rc      = CUDARuntime.cudaMemcpy(hostPtr, devPtr, elemSize * n, cudaMemcpyKind.cudaMemcpyDeviceToHost);
                handle.Free();
                HandleError(rc);
            }
        }
示例#4
0
        private CUdeviceptr GetDeviceMemory(object vector)
        {
            CUDevicePtrEx ptrEx = _gpu.GetDeviceMemory(vector) as CUDevicePtrEx;

            return(ptrEx.DevPtr);
        }