예제 #1
0
 /// <summary cref="CudaAPI.CreateContext(out IntPtr, CudaAcceleratorFlags, int)"/>
 public override CudaError CreateContext(
     out IntPtr context,
     CudaAcceleratorFlags flags,
     int device)
 {
     throw new NotSupportedException(RuntimeErrorMessages.CudaNotSupported);
 }
예제 #2
0
 /// <summary cref="CudaAPI.CreateContext(out IntPtr, CudaAcceleratorFlags, int)"/>
 public override CudaError CreateContext(
     out IntPtr context,
     CudaAcceleratorFlags flags,
     int device)
 {
     return(cuCtxCreate_v2(out context, flags, device));
 }
예제 #3
0
 /// <summary cref="CudaAPI.CreateContextD3D11(
 /// out IntPtr, out int, CudaAcceleratorFlags, IntPtr)"/>
 public override CudaError CreateContextD3D11(
     out IntPtr context,
     out int device,
     CudaAcceleratorFlags flags,
     IntPtr d3dDevice) =>
 throw new NotSupportedException(
           RuntimeErrorMessages.NotSupportedTargetAccelerator);
예제 #4
0
 /// <summary>
 /// Constructs a new Cuda accelerator.
 /// </summary>
 /// <param name="context">The ILGPU context.</param>
 /// <param name="d3d11Device">A pointer to a valid D3D11 device.</param>
 /// <param name="acceleratorFlags">The accelerator flags.</param>
 public CudaAccelerator(
     Context context,
     IntPtr d3d11Device,
     CudaAcceleratorFlags acceleratorFlags)
     : this(context, d3d11Device, acceleratorFlags, DefaultFlags)
 {
 }
예제 #5
0
 /// <summary cref="CudaAPI.CreateContextD3D11(
 /// out IntPtr, out int, CudaAcceleratorFlags, IntPtr)"/>
 public override CudaError CreateContextD3D11(
     out IntPtr context,
     out int device,
     CudaAcceleratorFlags flags,
     IntPtr d3dDevice) =>
 cuD3D11CtxCreate_v2(
     out context,
     out device,
     flags,
     d3dDevice);
예제 #6
0
        /// <summary>
        /// Constructs a new Cuda accelerator.
        /// </summary>
        /// <param name="context">The ILGPU context.</param>
        /// <param name="deviceId">The target device id.</param>
        /// <param name="acceleratorFlags">The accelerator flags.</param>
        public CudaAccelerator(
            Context context,
            int deviceId,
            CudaAcceleratorFlags acceleratorFlags)
            : base(context, AcceleratorType.Cuda)
        {
            CudaException.ThrowIfFailed(
                CurrentAPI.CreateContext(out contextPtr, acceleratorFlags, deviceId));
            DeviceId = deviceId;

            SetupAccelerator();
        }
예제 #7
0
        /// <summary>
        /// Constructs a new Cuda accelerator.
        /// </summary>
        /// <param name="context">The ILGPU context.</param>
        /// <param name="d3d11Device">A pointer to a valid D3D11 device.</param>
        /// <param name="acceleratorFlags">The accelerator flags.</param>
        public CudaAccelerator(
            Context context,
            IntPtr d3d11Device,
            CudaAcceleratorFlags acceleratorFlags)
            : base(context, AcceleratorType.Cuda)
        {
            if (d3d11Device == IntPtr.Zero)
                throw new ArgumentNullException(nameof(d3d11Device));

            CudaException.ThrowIfFailed(
                CurrentAPI.CreateContextD3D11(out contextPtr, out int deviceId, acceleratorFlags, d3d11Device));
            DeviceId = deviceId;

            SetupAccelerator();
        }
예제 #8
0
        /// <summary>
        /// Constructs a new Cuda accelerator.
        /// </summary>
        /// <param name="context">The ILGPU context.</param>
        /// <param name="deviceId">The target device id.</param>
        /// <param name="acceleratorFlags">The accelerator flags.</param>
        public CudaAccelerator(
            Context context,
            int deviceId,
            CudaAcceleratorFlags acceleratorFlags)
            : base(context, AcceleratorType.Cuda)
        {
            if (deviceId < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(deviceId));
            }

            Backends.Backend.EnsureRunningOnNativePlatform();

            CudaException.ThrowIfFailed(
                CurrentAPI.CreateContext(
                    out var contextPtr,
                    acceleratorFlags,
                    deviceId));
            NativePtr = contextPtr;
            DeviceId  = deviceId;

            SetupAccelerator();
        }
예제 #9
0
 /// <summary>
 /// Creates a new Cuda accelerator.
 /// </summary>
 /// <param name="context">The ILGPU context.</param>
 /// <param name="cudaDeviceIndex">
 /// The relative device index for the Cuda device. 0 here refers to the first
 /// Cuda device, 1 to the second, etc.
 /// </param>
 /// <param name="acceleratorFlags">The accelerator flags.</param>
 /// <returns>The created Cuda accelerator.</returns>
 public static CudaAccelerator CreateCudaAccelerator(
     this Context context,
     int cudaDeviceIndex,
     CudaAcceleratorFlags acceleratorFlags) =>
 context.GetCudaDevice(cudaDeviceIndex)
 .CreateCudaAccelerator(context, acceleratorFlags);
예제 #10
0
 /// <summary>
 /// Creates a new context.
 /// </summary>
 /// <param name="context">The created context.</param>
 /// <param name="flags">The flags to use.</param>
 /// <param name="device">The target device.</param>
 /// <returns>The error status.</returns>
 public CudaError CreateContext(
     out IntPtr context,
     CudaAcceleratorFlags flags,
     int device) =>
 cuCtxCreate_v2(out context, flags, device);
예제 #11
0
 /// <summary>
 /// Creates a new context with D3D11 support
 /// </summary>
 /// <param name="context">The created context.</param>
 /// <param name="flags">The flags to use.</param>
 /// <param name="device">The target device.</param>
 /// <param name="d3dDevice">The associated D3D11 device.</param>
 /// <returns>The error status.</returns>
 public abstract CudaError CreateContextD3D11(
     out IntPtr context,
     out int device,
     CudaAcceleratorFlags flags,
     IntPtr d3dDevice);
예제 #12
0
 /// <summary>
 /// Creates a new context.
 /// </summary>
 /// <param name="context">The created context.</param>
 /// <param name="flags">The flags to use.</param>
 /// <param name="device">The target device.</param>
 /// <returns>The error status.</returns>
 public abstract CudaError CreateContext(
     out IntPtr context,
     CudaAcceleratorFlags flags,
     int device);
예제 #13
0
 private static extern CudaError cuCtxCreate_v2(
     [Out] out IntPtr context,
     [In] CudaAcceleratorFlags flags,
     [In] int device);
예제 #14
0
 /// <summary>
 /// Creates a new Cuda accelerator.
 /// </summary>
 /// <param name="context">The ILGPU context.</param>
 /// <param name="acceleratorFlags">The accelerator flags.</param>
 /// <returns>The created Cuda accelerator.</returns>
 public CudaAccelerator CreateCudaAccelerator(
     Context context,
     CudaAcceleratorFlags acceleratorFlags) =>
 new CudaAccelerator(context, this, acceleratorFlags);
예제 #15
0
 private static extern CudaError cuD3D11CtxCreate_v2(
     [Out] out IntPtr context,
     [Out] out int device,
     [In] CudaAcceleratorFlags flags,
     [In] IntPtr d3dDevice);
예제 #16
0
 /// <summary>
 /// Constructs a new Cuda accelerator.
 /// </summary>
 /// <param name="context">The ILGPU context.</param>
 /// <param name="deviceId">The target device id.</param>
 /// <param name="acceleratorFlags">The accelerator flags.</param>
 public CudaAccelerator(Context context, int deviceId, CudaAcceleratorFlags acceleratorFlags)
     : this(context, deviceId, acceleratorFlags, DefaultFlags)
 {
 }