예제 #1
0
        /// <summary>
        /// Resolves the memory type of the given device pointer.
        /// </summary>
        /// <param name="value">The device pointer to check.</param>
        /// <returns>The resolved memory type</returns>
        public static unsafe CudaMemoryType GetCudaMemoryType(IntPtr value)
        {
            int data = 0;
            var err  = CurrentAPI.GetPointerAttribute(
                new IntPtr(Unsafe.AsPointer(ref data)),
                PointerAttribute.CU_POINTER_ATTRIBUTE_MEMORY_TYPE,
                value);

            if (err == CudaError.CUDA_ERROR_INVALID_VALUE)
            {
                return(CudaMemoryType.None);
            }
            CudaException.ThrowIfFailed(err);
            return((CudaMemoryType)data);
        }
예제 #2
0
        /// <summary>
        /// Resolves the memory type of the given device pointer.
        /// </summary>
        /// <param name="value">The device pointer to check.</param>
        /// <returns>The resolved memory type</returns>
        public static unsafe CudaMemoryType GetCudaMemoryType(IntPtr value)
        {
            // This functionality requires unified addresses (X64)
            Backends.Backend.EnsureRunningOnPlatform(TargetPlatform.X64);

            int data = 0;
            var err  = CurrentAPI.GetPointerAttribute(
                new IntPtr(Unsafe.AsPointer(ref data)),
                PointerAttribute.CU_POINTER_ATTRIBUTE_MEMORY_TYPE,
                value);

            if (err == CudaError.CUDA_ERROR_INVALID_VALUE)
            {
                return(CudaMemoryType.None);
            }
            CudaException.ThrowIfFailed(err);
            return((CudaMemoryType)data);
        }