1a4af0ceeSJacob Faibussowitsch static const char help[] = "Tests creation and destruction of PetscDevice.\n\n"; 2a4af0ceeSJacob Faibussowitsch 3a4af0ceeSJacob Faibussowitsch #include "petscdevicetestcommon.h" 4a4af0ceeSJacob Faibussowitsch 59371c9d4SSatish Balay int main(int argc, char *argv[]) { 6a4af0ceeSJacob Faibussowitsch const PetscInt n = 10; 7a4af0ceeSJacob Faibussowitsch PetscDevice device = NULL; 8a4af0ceeSJacob Faibussowitsch PetscDevice devices[n]; 9a4af0ceeSJacob Faibussowitsch 10327415f7SBarry Smith PetscFunctionBeginUser; 119566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc, &argv, NULL, help)); 12a4af0ceeSJacob Faibussowitsch 13a4af0ceeSJacob Faibussowitsch /* normal create and destroy */ 14*0e6b6b59SJacob Faibussowitsch PetscCall(PetscDeviceCreate(PETSC_DEVICE_DEFAULT(), PETSC_DECIDE, &device)); 159566063dSJacob Faibussowitsch PetscCall(AssertDeviceExists(device)); 169566063dSJacob Faibussowitsch PetscCall(PetscDeviceDestroy(&device)); 179566063dSJacob Faibussowitsch PetscCall(AssertDeviceDoesNotExist(device)); 18a4af0ceeSJacob Faibussowitsch /* should not destroy twice */ 199566063dSJacob Faibussowitsch PetscCall(PetscDeviceDestroy(&device)); 209566063dSJacob Faibussowitsch PetscCall(AssertDeviceDoesNotExist(device)); 21a4af0ceeSJacob Faibussowitsch 22a4af0ceeSJacob Faibussowitsch /* test reference counting */ 23a4af0ceeSJacob Faibussowitsch device = NULL; 249566063dSJacob Faibussowitsch PetscCall(PetscArrayzero(devices, n)); 25*0e6b6b59SJacob Faibussowitsch PetscCall(PetscDeviceCreate(PETSC_DEVICE_DEFAULT(), PETSC_DECIDE, &device)); 269566063dSJacob Faibussowitsch PetscCall(AssertDeviceExists(device)); 27a4af0ceeSJacob Faibussowitsch for (int i = 0; i < n; ++i) { 289566063dSJacob Faibussowitsch PetscCall(PetscDeviceReference_Internal(device)); 29a4af0ceeSJacob Faibussowitsch devices[i] = device; 30a4af0ceeSJacob Faibussowitsch } 319566063dSJacob Faibussowitsch PetscCall(AssertDeviceExists(device)); 32a4af0ceeSJacob Faibussowitsch for (int i = 0; i < n; ++i) { 339566063dSJacob Faibussowitsch PetscCall(PetscDeviceDestroy(&devices[i])); 349566063dSJacob Faibussowitsch PetscCall(AssertDeviceExists(device)); 359566063dSJacob Faibussowitsch PetscCall(AssertDeviceDoesNotExist(devices[i])); 36a4af0ceeSJacob Faibussowitsch } 379566063dSJacob Faibussowitsch PetscCall(PetscDeviceDestroy(&device)); 389566063dSJacob Faibussowitsch PetscCall(AssertDeviceDoesNotExist(device)); 39a4af0ceeSJacob Faibussowitsch 40a4af0ceeSJacob Faibussowitsch /* test the default devices exist */ 41a4af0ceeSJacob Faibussowitsch device = NULL; 429566063dSJacob Faibussowitsch PetscCall(PetscArrayzero(devices, n)); 43a4af0ceeSJacob Faibussowitsch { 44a4af0ceeSJacob Faibussowitsch PetscDeviceContext dctx; 45a4af0ceeSJacob Faibussowitsch /* global context will have the default device */ 469566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextGetCurrentContext(&dctx)); 479566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextGetDevice(dctx, &device)); 48a4af0ceeSJacob Faibussowitsch } 499566063dSJacob Faibussowitsch PetscCall(AssertDeviceExists(device)); 50a4af0ceeSJacob Faibussowitsch /* test reference counting for default device */ 51a4af0ceeSJacob Faibussowitsch for (int i = 0; i < n; ++i) { 529566063dSJacob Faibussowitsch PetscCall(PetscDeviceReference_Internal(device)); 53a4af0ceeSJacob Faibussowitsch devices[i] = device; 54a4af0ceeSJacob Faibussowitsch } 559566063dSJacob Faibussowitsch PetscCall(AssertDeviceExists(device)); 56a4af0ceeSJacob Faibussowitsch for (int i = 0; i < n; ++i) { 579566063dSJacob Faibussowitsch PetscCall(PetscDeviceDestroy(&devices[i])); 589566063dSJacob Faibussowitsch PetscCall(AssertDeviceExists(device)); 599566063dSJacob Faibussowitsch PetscCall(AssertDeviceDoesNotExist(devices[i])); 60a4af0ceeSJacob Faibussowitsch } 61a4af0ceeSJacob Faibussowitsch 629566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD, "EXIT_SUCCESS\n")); 639566063dSJacob Faibussowitsch PetscCall(PetscFinalize()); 64b122ec5aSJacob Faibussowitsch return 0; 65a4af0ceeSJacob Faibussowitsch } 66a4af0ceeSJacob Faibussowitsch 67a4af0ceeSJacob Faibussowitsch /*TEST 68a4af0ceeSJacob Faibussowitsch 69a4af0ceeSJacob Faibussowitsch build: 70cb9b7bb0SJacob Faibussowitsch requires: defined(PETSC_HAVE_CXX) 71a4af0ceeSJacob Faibussowitsch 72a4af0ceeSJacob Faibussowitsch testset: 73a4af0ceeSJacob Faibussowitsch output_file: ./output/ExitSuccess.out 74a4af0ceeSJacob Faibussowitsch nsize: {{1 2 5}} 75*0e6b6b59SJacob Faibussowitsch args: -device_enable {{lazy eager}} 76*0e6b6b59SJacob Faibussowitsch test: 77*0e6b6b59SJacob Faibussowitsch requires: !device 78*0e6b6b59SJacob Faibussowitsch suffix: host_no_device 79*0e6b6b59SJacob Faibussowitsch test: 80*0e6b6b59SJacob Faibussowitsch requires: device 81*0e6b6b59SJacob Faibussowitsch args: -default_device_type host 82*0e6b6b59SJacob Faibussowitsch suffix: host_with_device 83a4af0ceeSJacob Faibussowitsch test: 84a4af0ceeSJacob Faibussowitsch requires: cuda 85*0e6b6b59SJacob Faibussowitsch args: -default_device_type cuda 86a4af0ceeSJacob Faibussowitsch suffix: cuda 87a4af0ceeSJacob Faibussowitsch test: 88a4af0ceeSJacob Faibussowitsch requires: hip 89*0e6b6b59SJacob Faibussowitsch args: -default_device_type hip 90a4af0ceeSJacob Faibussowitsch suffix: hip 91a2158755SJunchao Zhang test: 92a2158755SJunchao Zhang requires: sycl 93*0e6b6b59SJacob Faibussowitsch args: -default_device_type sycl 94a2158755SJunchao Zhang suffix: sycl 95a4af0ceeSJacob Faibussowitsch 96a4af0ceeSJacob Faibussowitsch TEST*/ 97