private static void RunCudaTest(SparseMatrix A, SparseMatrix B) { // NOTE: for real symmetric matrices, there's no need to transpose the storage, so // we call the solver constructor with 3rd argument transpose = false. using (var stream = new CudaStream()) using (var solver = new CudaCholesky(stream, B, false)) { TestRandomSymmetric(solver, B, "CUDA Cholesky"); ReportGpuTime(solver.FactorizationTime); } using (var stream = new CudaStream()) using (var solver = new CudaQR(stream, A)) { TestRandom(solver, A, "CUDA QR"); ReportGpuTime(solver.FactorizationTime); } using (var stream = new CudaStream()) using (var solver = new CudaQR(stream, B, false)) { TestRandomSymmetric(solver, B, "CUDA QR"); ReportGpuTime(solver.FactorizationTime); } }
private static void RunCudaTest(SparseMatrix A, SparseMatrix B) { // NOTE: for Hermitian matrices, the storage has to be transposed, which is // done by the solver (unless 3rd argument transpose = false). using (var stream = new CudaStream()) using (var solver = new CudaCholesky(stream, B)) { TestRandomSymmetric(solver, B, "CUDA Cholesky"); ReportGpuTime(solver.FactorizationTime); } using (var stream = new CudaStream()) using (var solver = new CudaQR(stream, A)) { TestRandom(solver, A, "CUDA QR"); ReportGpuTime(solver.FactorizationTime); } using (var stream = new CudaStream()) using (var solver = new CudaQR(stream, B)) { TestRandomSymmetric(solver, B, "CUDA QR"); ReportGpuTime(solver.FactorizationTime); } }