1a4af0ceeSJacob Faibussowitsch static const char help[] = "Tests creation and destruction of PetscDeviceContext.\n\n"; 2a4af0ceeSJacob Faibussowitsch 3a4af0ceeSJacob Faibussowitsch #include "petscdevicetestcommon.h" 4a4af0ceeSJacob Faibussowitsch 59371c9d4SSatish Balay int main(int argc, char *argv[]) { 6a4af0ceeSJacob Faibussowitsch PetscDeviceContext dctx = NULL, ddup = NULL; 7a4af0ceeSJacob Faibussowitsch 8327415f7SBarry Smith PetscFunctionBeginUser; 99566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc, &argv, NULL, help)); 10a4af0ceeSJacob Faibussowitsch 11a4af0ceeSJacob Faibussowitsch /* basic creation and destruction */ 129566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextCreate(&dctx)); 139566063dSJacob Faibussowitsch PetscCall(AssertDeviceContextExists(dctx)); 149566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextDestroy(&dctx)); 159566063dSJacob Faibussowitsch PetscCall(AssertDeviceContextDoesNotExist(dctx)); 16a4af0ceeSJacob Faibussowitsch /* double free is no-op */ 179566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextDestroy(&dctx)); 189566063dSJacob Faibussowitsch PetscCall(AssertDeviceContextDoesNotExist(dctx)); 19a4af0ceeSJacob Faibussowitsch 20a4af0ceeSJacob Faibussowitsch /* test global context returns a valid context */ 21a4af0ceeSJacob Faibussowitsch dctx = NULL; 229566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextGetCurrentContext(&dctx)); 239566063dSJacob Faibussowitsch PetscCall(AssertDeviceContextExists(dctx)); 24a4af0ceeSJacob Faibussowitsch /* test locally setting to null doesn't clobber the global */ 25a4af0ceeSJacob Faibussowitsch dctx = NULL; 269566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextGetCurrentContext(&dctx)); 279566063dSJacob Faibussowitsch PetscCall(AssertDeviceContextExists(dctx)); 28a4af0ceeSJacob Faibussowitsch 29a4af0ceeSJacob Faibussowitsch /* test duplicate */ 309566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextDuplicate(dctx, &ddup)); 31a4af0ceeSJacob Faibussowitsch /* both device contexts should exist */ 329566063dSJacob Faibussowitsch PetscCall(AssertDeviceContextExists(dctx)); 339566063dSJacob Faibussowitsch PetscCall(AssertDeviceContextExists(ddup)); 34a4af0ceeSJacob Faibussowitsch 35a4af0ceeSJacob Faibussowitsch /* destroying the dup should leave the original untouched */ 369566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextDestroy(&ddup)); 379566063dSJacob Faibussowitsch PetscCall(AssertDeviceContextDoesNotExist(ddup)); 389566063dSJacob Faibussowitsch PetscCall(AssertDeviceContextExists(dctx)); 39a4af0ceeSJacob Faibussowitsch 409566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD, "EXIT_SUCCESS\n")); 419566063dSJacob Faibussowitsch PetscCall(PetscFinalize()); 42b122ec5aSJacob Faibussowitsch return 0; 43a4af0ceeSJacob Faibussowitsch } 44a4af0ceeSJacob Faibussowitsch 45a4af0ceeSJacob Faibussowitsch /*TEST 46a4af0ceeSJacob Faibussowitsch 47a4af0ceeSJacob Faibussowitsch build: 48cb9b7bb0SJacob Faibussowitsch requires: defined(PETSC_HAVE_CXX) 49a4af0ceeSJacob Faibussowitsch 50a4af0ceeSJacob Faibussowitsch testset: 51a4af0ceeSJacob Faibussowitsch output_file: ./output/ExitSuccess.out 52a4af0ceeSJacob Faibussowitsch nsize: {{1 2 4}} 53*0e6b6b59SJacob Faibussowitsch args: -device_enable {{lazy eager}} 54*0e6b6b59SJacob Faibussowitsch test: 55*0e6b6b59SJacob Faibussowitsch requires: !device 56*0e6b6b59SJacob Faibussowitsch suffix: host_no_device 57*0e6b6b59SJacob Faibussowitsch test: 58*0e6b6b59SJacob Faibussowitsch requires: device 59*0e6b6b59SJacob Faibussowitsch args: -root_device_context_device_type host 60*0e6b6b59SJacob Faibussowitsch suffix: host_with_device 61a4af0ceeSJacob Faibussowitsch test: 62a4af0ceeSJacob Faibussowitsch requires: cuda 63*0e6b6b59SJacob Faibussowitsch args: -root_device_context_device_type cuda 64a4af0ceeSJacob Faibussowitsch suffix: cuda 65a4af0ceeSJacob Faibussowitsch test: 66a4af0ceeSJacob Faibussowitsch requires: hip 67*0e6b6b59SJacob Faibussowitsch args: -root_device_context_device_type hip 68a4af0ceeSJacob Faibussowitsch suffix: hip 69a4af0ceeSJacob Faibussowitsch 70a4af0ceeSJacob Faibussowitsch TEST*/ 71