1*a4af0ceeSJacob Faibussowitsch static const char help[] = "Tests creation and destruction of PetscDeviceContext.\n\n"; 2*a4af0ceeSJacob Faibussowitsch 3*a4af0ceeSJacob Faibussowitsch #include <petsc/private/deviceimpl.h> 4*a4af0ceeSJacob Faibussowitsch #include "petscdevicetestcommon.h" 5*a4af0ceeSJacob Faibussowitsch 6*a4af0ceeSJacob Faibussowitsch int main(int argc, char *argv[]) 7*a4af0ceeSJacob Faibussowitsch { 8*a4af0ceeSJacob Faibussowitsch PetscDeviceContext dctx = NULL,ddup = NULL; 9*a4af0ceeSJacob Faibussowitsch PetscErrorCode ierr; 10*a4af0ceeSJacob Faibussowitsch 11*a4af0ceeSJacob Faibussowitsch ierr = PetscInitialize(&argc,&argv,NULL,help);if (ierr) return ierr; 12*a4af0ceeSJacob Faibussowitsch 13*a4af0ceeSJacob Faibussowitsch /* basic creation and destruction */ 14*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceContextCreate(&dctx);CHKERRQ(ierr); 15*a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceContextExists(dctx);CHKERRQ(ierr); 16*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceContextDestroy(&dctx);CHKERRQ(ierr); 17*a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceContextDoesNotExist(dctx);CHKERRQ(ierr); 18*a4af0ceeSJacob Faibussowitsch /* double free is no-op */ 19*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceContextDestroy(&dctx);CHKERRQ(ierr); 20*a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceContextDoesNotExist(dctx);CHKERRQ(ierr); 21*a4af0ceeSJacob Faibussowitsch 22*a4af0ceeSJacob Faibussowitsch /* test global context returns a valid context */ 23*a4af0ceeSJacob Faibussowitsch dctx = NULL; 24*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceContextGetCurrentContext(&dctx);CHKERRQ(ierr); 25*a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceContextExists(dctx);CHKERRQ(ierr); 26*a4af0ceeSJacob Faibussowitsch /* test locally setting to null doesn't clobber the global */ 27*a4af0ceeSJacob Faibussowitsch dctx = NULL; 28*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceContextGetCurrentContext(&dctx);CHKERRQ(ierr); 29*a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceContextExists(dctx);CHKERRQ(ierr); 30*a4af0ceeSJacob Faibussowitsch 31*a4af0ceeSJacob Faibussowitsch /* test duplicate */ 32*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceContextDuplicate(dctx,&ddup);CHKERRQ(ierr); 33*a4af0ceeSJacob Faibussowitsch /* both device contexts should exist */ 34*a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceContextExists(dctx);CHKERRQ(ierr); 35*a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceContextExists(ddup);CHKERRQ(ierr); 36*a4af0ceeSJacob Faibussowitsch 37*a4af0ceeSJacob Faibussowitsch /* destroying the dup should leave the original untouched */ 38*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceContextDestroy(&ddup);CHKERRQ(ierr); 39*a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceContextDoesNotExist(ddup);CHKERRQ(ierr); 40*a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceContextExists(dctx);CHKERRQ(ierr); 41*a4af0ceeSJacob Faibussowitsch 42*a4af0ceeSJacob Faibussowitsch ierr = PetscPrintf(PETSC_COMM_WORLD,"EXIT_SUCCESS\n");CHKERRQ(ierr); 43*a4af0ceeSJacob Faibussowitsch ierr = PetscFinalize(); 44*a4af0ceeSJacob Faibussowitsch return ierr; 45*a4af0ceeSJacob Faibussowitsch } 46*a4af0ceeSJacob Faibussowitsch 47*a4af0ceeSJacob Faibussowitsch /*TEST 48*a4af0ceeSJacob Faibussowitsch 49*a4af0ceeSJacob Faibussowitsch build: 50*a4af0ceeSJacob Faibussowitsch requires: defined(PETSC_HAVE_CXX_DIALECT_CXX11) 51*a4af0ceeSJacob Faibussowitsch 52*a4af0ceeSJacob Faibussowitsch test: 53*a4af0ceeSJacob Faibussowitsch requires: !device 54*a4af0ceeSJacob Faibussowitsch suffix: no_device 55*a4af0ceeSJacob Faibussowitsch filter: Error: grep -E -o -e ".*No support for this operation for this object type" -e ".*PETSc is not configured with device support.*" -e "^\[0\]PETSC ERROR:.*[0-9]{1} [A-z]+\(\)" 56*a4af0ceeSJacob Faibussowitsch 57*a4af0ceeSJacob Faibussowitsch testset: 58*a4af0ceeSJacob Faibussowitsch output_file: ./output/ExitSuccess.out 59*a4af0ceeSJacob Faibussowitsch nsize: {{1 2 4}} 60*a4af0ceeSJacob Faibussowitsch test: 61*a4af0ceeSJacob Faibussowitsch requires: cuda 62*a4af0ceeSJacob Faibussowitsch suffix: cuda 63*a4af0ceeSJacob Faibussowitsch test: 64*a4af0ceeSJacob Faibussowitsch requires: hip 65*a4af0ceeSJacob Faibussowitsch suffix: hip 66*a4af0ceeSJacob Faibussowitsch 67*a4af0ceeSJacob Faibussowitsch TEST*/ 68