/// <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)) { }
/// <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)) { }
/// <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; }
/// <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; }
/// <summary> /// Creates a new CPU generator. /// </summary> public abstract CuRandStatus CreateGeneratorHost( out IntPtr generator, CuRandRngType rngType);
/// <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);
/// <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);
/// <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);
/// <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);
/// <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);
/// <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);