示例#1
0
 /// <summary>
 /// Constructs a new cuRand wrapper.
 /// </summary>
 /// <param name="context">The parent ILGPU context.</param>
 /// <param name="rngType">The cuRand RNG type.</param>
 /// <param name="apiVersion">The cuRand API version.</param>
 public CPUCuRand(
     Context context,
     CuRandRngType rngType,
     CuRandAPIVersion apiVersion)
     : this(context, rngType, new CuRandAPIVersion?(apiVersion))
 {
 }
示例#2
0
 /// <summary>
 /// Constructs a new cuRand wrapper.
 /// </summary>
 /// <param name="accelerator">The associated Cuda accelerator.</param>
 /// <param name="rngType">The cuRand RNG type.</param>
 /// <param name="apiVersion">The cuRand API version.</param>
 public GPUCuRand(
     CudaAccelerator accelerator,
     CuRandRngType rngType,
     CuRandAPIVersion apiVersion)
     : this(accelerator, rngType, new CuRandAPIVersion?(apiVersion))
 {
 }
示例#3
0
        /// <summary>
        /// Constructs a new cuRand wrapper.
        /// </summary>
        /// <param name="accelerator">The associated Cuda accelerator.</param>
        /// <param name="rngType">The cuRand RNG type.</param>
        /// <param name="apiVersion">The cuRand API version.</param>
        private GPUCuRand(
            CudaAccelerator accelerator,
            CuRandRngType rngType,
            CuRandAPIVersion?apiVersion)
            : base(accelerator)
        {
            API = CuRandAPI.Create(apiVersion);

            CuRandException.ThrowIfFailed(
                API.CreateGenerator(out IntPtr nativePtr, rngType));
            GeneratorPtr = nativePtr;

            CuRandException.ThrowIfFailed(
                API.GetVersion(out int version));
            Version = version;

            Stream = accelerator.DefaultStream as CudaStream;
        }
示例#4
0
        /// <summary>
        /// Constructs a new cuRand wrapper.
        /// </summary>
        /// <param name="context">The parent ILGPU context.</param>
        /// <param name="rngType">The cuRand RNG type.</param>
        /// <param name="apiVersion">The cuRand API version.</param>
        private CPUCuRand(
            Context context,
            CuRandRngType rngType,
            CuRandAPIVersion?apiVersion)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            // Note: We currently do not use the context parameter to instantiate the API.
            // However, we do pass the context instance to this constructor to ensure
            // upward compatibility.

            API = CuRandAPI.Create(apiVersion);

            CuRandException.ThrowIfFailed(
                API.CreateGeneratorHost(out IntPtr nativePtr, rngType));
            GeneratorPtr = nativePtr;

            CuRandException.ThrowIfFailed(
                API.GetVersion(out int version));
            Version = version;
        }
示例#5
0
 /// <summary>
 /// Creates a new CPU generator.
 /// </summary>
 public abstract CuRandStatus CreateGeneratorHost(
     out IntPtr generator,
     CuRandRngType rngType);
示例#6
0
 /// <summary>
 /// Constructs a new cuRand wrapper on the GPU.
 /// </summary>
 /// <param name="context">The parent ILGPU context.</param>
 /// <param name="rngType">The cuRand RNG type.</param>
 /// <param name="apiVersion">The cuRand API version.</param>
 public static CPUCuRand CreateCPU(
     Context context,
     CuRandRngType rngType,
     CuRandAPIVersion apiVersion) =>
 new CPUCuRand(context, rngType, apiVersion);
示例#7
0
 /// <summary>
 /// Constructs a new cuRand wrapper on the CPU using the V10 API.
 /// </summary>
 /// <param name="context">The parent ILGPU context.</param>
 /// <param name="rngType">The cuRand RNG type.</param>
 public static CPUCuRand CreateCPU(
     Context context,
     CuRandRngType rngType) =>
 new CPUCuRand(context, rngType);
示例#8
0
 /// <summary>
 /// Constructs a new cuRand wrapper on the GPU.
 /// </summary>
 /// <param name="accelerator">The associated Cuda accelerator.</param>
 /// <param name="rngType">The cuRand RNG type.</param>
 /// <param name="apiVersion">The cuRand API version.</param>
 public static GPUCuRand CreateGPU(
     CudaAccelerator accelerator,
     CuRandRngType rngType,
     CuRandAPIVersion apiVersion) =>
 new GPUCuRand(accelerator, rngType, apiVersion);
示例#9
0
 /// <summary>
 /// Constructs a new cuRand wrapper on the GPU using the V10 API.
 /// </summary>
 /// <param name="accelerator">The associated Cuda accelerator.</param>
 /// <param name="rngType">The cuRand RNG type.</param>
 public static GPUCuRand CreateGPU(
     CudaAccelerator accelerator,
     CuRandRngType rngType) =>
 new GPUCuRand(accelerator, rngType);
示例#10
0
 /// <summary>
 /// Constructs a new cuRand wrapper on the CPU using the V10 API.
 /// </summary>
 /// <param name="context">The parent ILGPU context.</param>
 /// <param name="rngType">The cuRand RNG type.</param>
 public static CPUCuRand CreateCPU(
     Context context,
     CuRandRngType rngType) =>
 CreateCPU(context, rngType, CuRandAPIVersion.V10);
示例#11
0
 /// <summary>
 /// Constructs a new cuRand wrapper on the GPU using the V10 API.
 /// </summary>
 /// <param name="accelerator">The associated Cuda accelerator.</param>
 /// <param name="rngType">The cuRand RNG type.</param>
 public static GPUCuRand CreateGPU(
     CudaAccelerator accelerator,
     CuRandRngType rngType) =>
 CreateGPU(accelerator, rngType, CuRandAPIVersion.V10);