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