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