コード例 #1
0
        /// <summary>
        /// Creates a new API wrapper.
        /// </summary>
        /// <param name="version">The cuBlas version to use.</param>
        /// <returns>The created API wrapper.</returns>
        public static CuBlasAPI Create(CuBlasAPIVersion version)
        {
            CuBlasAPI result;

            try
            {
                if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
                {
                    result = new WindowsAPI_V10();
                }
                else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
                {
                    result = new MacOSAPI_V10();
                }
                else
                {
                    result = new LinuxAPI_V10();
                }
            }
            catch (Exception ex) when(
                ex is DllNotFoundException ||
                ex is EntryPointNotFoundException)
            {
                return(null);
            }
            return(result);
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: phoyd/ILGPU.Samples
        static void Main()
        {
            const int DataSize = 1024;
            const CuBlasAPIVersion CuBlasVersion = CuBlasAPIVersion.V10;

            using (var context = new Context())
            {
                // Enable algorithms library
                context.EnableAlgorithms();

                // Check for Cuda support
                foreach (var acceleratorId in CudaAccelerator.CudaAccelerators)
                {
                    using (var accelerator = new CudaAccelerator(context, acceleratorId))
                    {
                        Console.WriteLine($"Performing operations on {accelerator}");
                        var buf  = accelerator.Allocate <float>(DataSize);
                        var buf2 = accelerator.Allocate <float>(DataSize);

                        accelerator.Initialize(accelerator.DefaultStream, buf, 1.0f);
                        accelerator.Initialize(accelerator.DefaultStream, buf2.View, 1.0f);

                        // Initialize the CuBlas library using manual pointer mode handling
                        // (default behavior)
                        using (var blas = new CuBlas(accelerator, CuBlasVersion))
                        {
                            // Set pointer mode to Host to enable data transfer to CPU memory
                            blas.PointerMode = CuBlasPointerMode.Host;
                            float output = blas.Nrm2(buf);

                            // Set pointer mode to Device to enable data transfer to GPU memory
                            blas.PointerMode = CuBlasPointerMode.Device;
                            blas.Nrm2(buf, buf2);

                            // Use pointer mode scopes to recover the previous pointer mode
                            using (var scope = blas.BeginPointerScope(CuBlasPointerMode.Host))
                            {
                                float output2 = blas.Nrm2(buf);
                            }
                        }

                        // Initialize the CuBlas<T> library using custom pointer mode handlers
                        using (var blas = new CuBlas <CuBlasPointerModeHandlers.AutomaticMode>(accelerator, CuBlasVersion))
                        {
                            // Automatic transfer to host
                            float output = blas.Nrm2(buf);

                            // Automatic transfer to device
                            blas.Nrm2(buf, buf2);
                        }
                    }
                }
            }
        }
コード例 #3
0
 /// <summary>
 /// Creates a new API wrapper.
 /// </summary>
 /// <param name="version">The cuBlas version to use.</param>
 /// <returns>The created API wrapper.</returns>
 public static CuBlasAPI Create(CuBlasAPIVersion version)
 {
     try
     {
         return(CreateInternal(version));
     }
     catch (Exception ex) when(
         ex is DllNotFoundException ||
         ex is EntryPointNotFoundException)
     {
         return(null);
     }
 }
コード例 #4
0
        /// <summary>
        /// Constructs a new CuBlas instance to access the Nvidia cublas library.
        /// </summary>
        /// <param name="accelerator">The associated cuda accelerator.</param>
        /// <param name="apiVersion">The cuBlas API version.</param>
        public CuBlas(CudaAccelerator accelerator, CuBlasAPIVersion apiVersion)
        {
            if (accelerator == null)
            {
                throw new ArgumentNullException(nameof(accelerator));
            }

            API = CuBlasAPI.Create(apiVersion);
            accelerator.Bind();
            CuBlasException.ThrowIfFailed(
                API.Create(out IntPtr handle));
            Handle = handle;

            CuBlasException.ThrowIfFailed(
                API.GetVersion(handle, out int currentVersion));
            Version = currentVersion;

            Stream = accelerator.DefaultStream as CudaStream;
        }
コード例 #5
0
 /// <summary>
 /// Constructs a new CuBlas instance to access the Nvidia cublas library.
 /// </summary>
 /// <param name="accelerator">The associated cuda accelerator.</param>
 /// <param name="apiVersion">The cuBlas API version.</param>
 public CuBlas(CudaAccelerator accelerator, CuBlasAPIVersion apiVersion)
     : base(accelerator, apiVersion)
 {
 }
コード例 #6
0
 /// <summary>
 /// Constructs a new CuBlas instance to access the Nvidia cublas library.
 /// </summary>
 /// <param name="accelerator">The associated cuda accelerator.</param>
 /// <param name="apiVersion">The cuBlas API version.</param>
 public CuBlas(CudaAccelerator accelerator, CuBlasAPIVersion apiVersion)
     : this(accelerator, new CuBlasAPIVersion?(apiVersion))
 {
 }