xref: /petsc/src/mat/tests/ex239.c (revision 030f984af8d8bb4c203755d35bded3c05b3d83ce) !
1 static char help[] = "Test device/host memory allocation in MatDenseSeqCUDA()\n\n";
2 
3 /* Contributed by: Victor Eijkhout <eijkhout@tacc.utexas.edu> */
4 
5 #include <petscmat.h>
6 int main(int argc, char** argv)
7 {
8   PetscErrorCode ierr;
9   PetscInt       global_size=100;
10   Mat            cuda_matrix;
11   Vec            input,output;
12   MPI_Comm       comm = PETSC_COMM_SELF;
13   PetscReal      nrm = 1;
14 
15   ierr = PetscInitialize(&argc,&argv,NULL,help);if (ierr) return ierr;
16   ierr = MatCreateDenseCUDA(comm,global_size,global_size,global_size,global_size,NULL,&cuda_matrix);CHKERRQ(ierr);
17   ierr = MatAssemblyBegin(cuda_matrix,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
18   ierr = MatAssemblyEnd(cuda_matrix,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
19 
20   ierr = VecCreateSeqCUDA(comm,global_size,&input);CHKERRQ(ierr);
21   ierr = VecDuplicate(input,&output);CHKERRQ(ierr);
22   ierr = VecSet(input,1.);CHKERRQ(ierr);
23   ierr = VecSet(output,2.);CHKERRQ(ierr);
24   ierr = MatMult(cuda_matrix,input,output);CHKERRQ(ierr);
25   ierr = VecNorm(output,NORM_2,&nrm);CHKERRQ(ierr);
26   if (nrm > PETSC_SMALL) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_PLIB,"PETSc generated wrong result. Should be 0, but is %g",(double)nrm);
27   ierr = VecDestroy(&input);CHKERRQ(ierr);
28   ierr = VecDestroy(&output);CHKERRQ(ierr);
29   ierr = MatDestroy(&cuda_matrix);CHKERRQ(ierr);
30   ierr = PetscFinalize();
31   return ierr;
32 }
33 
34 /*TEST
35    build:
36      requires: cuda
37 
38    test:
39     nsize: 1
40 
41 TEST*/
42