1a4af0ceeSJacob Faibussowitsch static const char help[] = "Tests creation and destruction of PetscDeviceContext.\n\n"; 2a4af0ceeSJacob Faibussowitsch 3a4af0ceeSJacob Faibussowitsch #include "petscdevicetestcommon.h" 4a4af0ceeSJacob Faibussowitsch main(int argc,char * argv[])5d71ae5a4SJacob Faibussowitschint main(int argc, char *argv[]) 6d71ae5a4SJacob Faibussowitsch { 7a4af0ceeSJacob Faibussowitsch PetscDeviceContext dctx = NULL, ddup = NULL; 8a4af0ceeSJacob Faibussowitsch 9327415f7SBarry Smith PetscFunctionBeginUser; 109566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc, &argv, NULL, help)); 11a4af0ceeSJacob Faibussowitsch 12a4af0ceeSJacob Faibussowitsch /* basic creation and destruction */ 139566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextCreate(&dctx)); 149566063dSJacob Faibussowitsch PetscCall(AssertDeviceContextExists(dctx)); 159566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextDestroy(&dctx)); 169566063dSJacob Faibussowitsch PetscCall(AssertDeviceContextDoesNotExist(dctx)); 17a4af0ceeSJacob Faibussowitsch /* double free is no-op */ 189566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextDestroy(&dctx)); 199566063dSJacob Faibussowitsch PetscCall(AssertDeviceContextDoesNotExist(dctx)); 20a4af0ceeSJacob Faibussowitsch 21a4af0ceeSJacob Faibussowitsch /* test global context returns a valid context */ 22a4af0ceeSJacob Faibussowitsch dctx = NULL; 239566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextGetCurrentContext(&dctx)); 249566063dSJacob Faibussowitsch PetscCall(AssertDeviceContextExists(dctx)); 25a4af0ceeSJacob Faibussowitsch /* test locally setting to null doesn't clobber the global */ 26a4af0ceeSJacob Faibussowitsch dctx = NULL; 279566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextGetCurrentContext(&dctx)); 289566063dSJacob Faibussowitsch PetscCall(AssertDeviceContextExists(dctx)); 29a4af0ceeSJacob Faibussowitsch 30a4af0ceeSJacob Faibussowitsch /* test duplicate */ 319566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextDuplicate(dctx, &ddup)); 32a4af0ceeSJacob Faibussowitsch /* both device contexts should exist */ 339566063dSJacob Faibussowitsch PetscCall(AssertDeviceContextExists(dctx)); 349566063dSJacob Faibussowitsch PetscCall(AssertDeviceContextExists(ddup)); 35a4af0ceeSJacob Faibussowitsch 36a4af0ceeSJacob Faibussowitsch /* destroying the dup should leave the original untouched */ 379566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextDestroy(&ddup)); 389566063dSJacob Faibussowitsch PetscCall(AssertDeviceContextDoesNotExist(ddup)); 399566063dSJacob Faibussowitsch PetscCall(AssertDeviceContextExists(dctx)); 40a4af0ceeSJacob Faibussowitsch 419566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD, "EXIT_SUCCESS\n")); 429566063dSJacob Faibussowitsch PetscCall(PetscFinalize()); 43b122ec5aSJacob Faibussowitsch return 0; 44a4af0ceeSJacob Faibussowitsch } 45a4af0ceeSJacob Faibussowitsch 46a4af0ceeSJacob Faibussowitsch /*TEST 47a4af0ceeSJacob Faibussowitsch 48a4af0ceeSJacob Faibussowitsch testset: 49*27d4e10aSPierre Jolivet requires: defined(PETSC_DEVICELANGUAGE_CXX) 5061c8d4edSPierre Jolivet output_file: output/ExitSuccess.out 51a4af0ceeSJacob Faibussowitsch nsize: {{1 2 4}} 520e6b6b59SJacob Faibussowitsch args: -device_enable {{lazy eager}} 530e6b6b59SJacob Faibussowitsch test: 540e6b6b59SJacob Faibussowitsch requires: !device 550e6b6b59SJacob Faibussowitsch suffix: host_no_device 560e6b6b59SJacob Faibussowitsch test: 570e6b6b59SJacob Faibussowitsch requires: device 580e6b6b59SJacob Faibussowitsch args: -root_device_context_device_type host 590e6b6b59SJacob Faibussowitsch suffix: host_with_device 60a4af0ceeSJacob Faibussowitsch test: 61a4af0ceeSJacob Faibussowitsch requires: cuda 620e6b6b59SJacob Faibussowitsch args: -root_device_context_device_type cuda 63a4af0ceeSJacob Faibussowitsch suffix: cuda 64a4af0ceeSJacob Faibussowitsch test: 65a4af0ceeSJacob Faibussowitsch requires: hip 660e6b6b59SJacob Faibussowitsch args: -root_device_context_device_type hip 67a4af0ceeSJacob Faibussowitsch suffix: hip 68667ab0feSJacob Faibussowitsch test: 69667ab0feSJacob Faibussowitsch requires: sycl 70667ab0feSJacob Faibussowitsch args: -root_device_context_device_type sycl 71667ab0feSJacob Faibussowitsch suffix: sycl 72667ab0feSJacob Faibussowitsch 73667ab0feSJacob Faibussowitsch testset: 74*27d4e10aSPierre Jolivet requires: !defined(PETSC_DEVICELANGUAGE_CXX) 7561c8d4edSPierre Jolivet output_file: output/ExitSuccess.out 76667ab0feSJacob Faibussowitsch suffix: no_cxx 77a4af0ceeSJacob Faibussowitsch 78a4af0ceeSJacob Faibussowitsch TEST*/ 79