1*a4af0ceeSJacob Faibussowitsch static const char help[] = "Tests creation and destruction of PetscDevice.\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 const PetscInt n = 10; 9*a4af0ceeSJacob Faibussowitsch PetscDevice device = NULL; 10*a4af0ceeSJacob Faibussowitsch PetscDevice devices[n]; 11*a4af0ceeSJacob Faibussowitsch PetscErrorCode ierr; 12*a4af0ceeSJacob Faibussowitsch 13*a4af0ceeSJacob Faibussowitsch ierr = PetscInitialize(&argc,&argv,NULL,help);if (ierr) return ierr; 14*a4af0ceeSJacob Faibussowitsch 15*a4af0ceeSJacob Faibussowitsch /* normal create and destroy */ 16*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceCreate(PETSC_DEVICE_DEFAULT,PETSC_DECIDE,&device);CHKERRQ(ierr); 17*a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceExists(device);CHKERRQ(ierr); 18*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceDestroy(&device);CHKERRQ(ierr); 19*a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceDoesNotExist(device);CHKERRQ(ierr); 20*a4af0ceeSJacob Faibussowitsch /* should not destroy twice */ 21*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceDestroy(&device);CHKERRQ(ierr); 22*a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceDoesNotExist(device);CHKERRQ(ierr); 23*a4af0ceeSJacob Faibussowitsch 24*a4af0ceeSJacob Faibussowitsch /* test reference counting */ 25*a4af0ceeSJacob Faibussowitsch device = NULL; 26*a4af0ceeSJacob Faibussowitsch ierr = PetscArrayzero(devices,n);CHKERRQ(ierr); 27*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceCreate(PETSC_DEVICE_DEFAULT,PETSC_DECIDE,&device);CHKERRQ(ierr); 28*a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceExists(device);CHKERRQ(ierr); 29*a4af0ceeSJacob Faibussowitsch for (int i = 0; i < n; ++i) { 30*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceReference_Internal(device);CHKERRQ(ierr); 31*a4af0ceeSJacob Faibussowitsch devices[i] = device; 32*a4af0ceeSJacob Faibussowitsch } 33*a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceExists(device);CHKERRQ(ierr); 34*a4af0ceeSJacob Faibussowitsch for (int i = 0; i < n; ++i) { 35*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceDestroy(&devices[i]);CHKERRQ(ierr); 36*a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceExists(device);CHKERRQ(ierr); 37*a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceDoesNotExist(devices[i]);CHKERRQ(ierr); 38*a4af0ceeSJacob Faibussowitsch } 39*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceDestroy(&device);CHKERRQ(ierr); 40*a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceDoesNotExist(device);CHKERRQ(ierr); 41*a4af0ceeSJacob Faibussowitsch 42*a4af0ceeSJacob Faibussowitsch /* test the default devices exist */ 43*a4af0ceeSJacob Faibussowitsch device = NULL; 44*a4af0ceeSJacob Faibussowitsch ierr = PetscArrayzero(devices,n);CHKERRQ(ierr); 45*a4af0ceeSJacob Faibussowitsch { 46*a4af0ceeSJacob Faibussowitsch PetscDeviceContext dctx; 47*a4af0ceeSJacob Faibussowitsch /* global context will have the default device */ 48*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceContextGetCurrentContext(&dctx);CHKERRQ(ierr); 49*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceContextGetDevice(dctx,&device);CHKERRQ(ierr); 50*a4af0ceeSJacob Faibussowitsch } 51*a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceExists(device);CHKERRQ(ierr); 52*a4af0ceeSJacob Faibussowitsch /* test reference counting for default device */ 53*a4af0ceeSJacob Faibussowitsch for (int i = 0; i < n; ++i) { 54*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceReference_Internal(device);CHKERRQ(ierr); 55*a4af0ceeSJacob Faibussowitsch devices[i] = device; 56*a4af0ceeSJacob Faibussowitsch } 57*a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceExists(device);CHKERRQ(ierr); 58*a4af0ceeSJacob Faibussowitsch for (int i = 0; i < n; ++i) { 59*a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceDestroy(&devices[i]);CHKERRQ(ierr); 60*a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceExists(device);CHKERRQ(ierr); 61*a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceDoesNotExist(devices[i]);CHKERRQ(ierr); 62*a4af0ceeSJacob Faibussowitsch } 63*a4af0ceeSJacob Faibussowitsch 64*a4af0ceeSJacob Faibussowitsch ierr = PetscPrintf(PETSC_COMM_WORLD,"EXIT_SUCCESS\n");CHKERRQ(ierr); 65*a4af0ceeSJacob Faibussowitsch ierr = PetscFinalize(); 66*a4af0ceeSJacob Faibussowitsch return ierr; 67*a4af0ceeSJacob Faibussowitsch } 68*a4af0ceeSJacob Faibussowitsch 69*a4af0ceeSJacob Faibussowitsch /*TEST 70*a4af0ceeSJacob Faibussowitsch 71*a4af0ceeSJacob Faibussowitsch build: 72*a4af0ceeSJacob Faibussowitsch requires: defined(PETSC_HAVE_CXX_DIALECT_CXX11) 73*a4af0ceeSJacob Faibussowitsch 74*a4af0ceeSJacob Faibussowitsch testset: 75*a4af0ceeSJacob Faibussowitsch requires: !device 76*a4af0ceeSJacob Faibussowitsch suffix: no_device 77*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]+\(\)" 78*a4af0ceeSJacob Faibussowitsch test: 79*a4af0ceeSJacob Faibussowitsch requires: debug 80*a4af0ceeSJacob Faibussowitsch suffix: debug 81*a4af0ceeSJacob Faibussowitsch test: 82*a4af0ceeSJacob Faibussowitsch requires: !debug 83*a4af0ceeSJacob Faibussowitsch suffix: opt 84*a4af0ceeSJacob Faibussowitsch 85*a4af0ceeSJacob Faibussowitsch testset: 86*a4af0ceeSJacob Faibussowitsch output_file: ./output/ExitSuccess.out 87*a4af0ceeSJacob Faibussowitsch nsize: {{1 2 5}} 88*a4af0ceeSJacob Faibussowitsch test: 89*a4af0ceeSJacob Faibussowitsch requires: cuda 90*a4af0ceeSJacob Faibussowitsch suffix: cuda 91*a4af0ceeSJacob Faibussowitsch test: 92*a4af0ceeSJacob Faibussowitsch requires: hip 93*a4af0ceeSJacob Faibussowitsch suffix: hip 94*a4af0ceeSJacob Faibussowitsch 95*a4af0ceeSJacob Faibussowitsch TEST*/ 96