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