xref: /petsc/src/sys/objects/device/tests/ex2.c (revision 017deb10d530c1b6d9744fcd772cd96c5fcd74f2)
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 Faibussowitsch int 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