Esempio n. 1
0
        public static void IlGpu(CudaAccelerator gpu, Real[] result, Real[] left, Real[] right, int n)
        {
            using (var cudaResult = gpu.Allocate(result))
                using (var cudaLeft = gpu.Allocate(left))
                    using (var cudaRight = gpu.Allocate(right))
                    {
                        using var blas = new CuBlas(gpu, CuBlasAPIVersion.V11);

                        var timer = Stopwatch.StartNew();

                        blas.Gemm(
                            CuBlasOperation.NonTranspose,
                            CuBlasOperation.NonTranspose,
                            n, n, n,
                            1, cudaLeft.View, n,
                            cudaRight.View, n, 0,
                            cudaResult.View, n);

                        gpu.Synchronize();

                        PrintPerformance(timer, "MatrixMultiplication.IlGpu.cuBLAS", n, n, n);

                        cudaResult.CopyTo(result, 0, 0, result.Length);
                    }
        }