Actual source code: ex2.c

  1: static const char help[] = "Tests creation and destruction of PetscDeviceContext.\n\n";

  3: #include "petscdevicetestcommon.h"

  5: int main(int argc, char *argv[])
  6: {
  7:   PetscDeviceContext dctx = NULL, ddup = NULL;

  9:   PetscFunctionBeginUser;
 10:   PetscCall(PetscInitialize(&argc, &argv, NULL, help));

 12:   /* basic creation and destruction */
 13:   PetscCall(PetscDeviceContextCreate(&dctx));
 14:   PetscCall(AssertDeviceContextExists(dctx));
 15:   PetscCall(PetscDeviceContextDestroy(&dctx));
 16:   PetscCall(AssertDeviceContextDoesNotExist(dctx));
 17:   /* double free is no-op */
 18:   PetscCall(PetscDeviceContextDestroy(&dctx));
 19:   PetscCall(AssertDeviceContextDoesNotExist(dctx));

 21:   /* test global context returns a valid context */
 22:   dctx = NULL;
 23:   PetscCall(PetscDeviceContextGetCurrentContext(&dctx));
 24:   PetscCall(AssertDeviceContextExists(dctx));
 25:   /* test locally setting to null doesn't clobber the global */
 26:   dctx = NULL;
 27:   PetscCall(PetscDeviceContextGetCurrentContext(&dctx));
 28:   PetscCall(AssertDeviceContextExists(dctx));

 30:   /* test duplicate */
 31:   PetscCall(PetscDeviceContextDuplicate(dctx, &ddup));
 32:   /* both device contexts should exist */
 33:   PetscCall(AssertDeviceContextExists(dctx));
 34:   PetscCall(AssertDeviceContextExists(ddup));

 36:   /* destroying the dup should leave the original untouched */
 37:   PetscCall(PetscDeviceContextDestroy(&ddup));
 38:   PetscCall(AssertDeviceContextDoesNotExist(ddup));
 39:   PetscCall(AssertDeviceContextExists(dctx));

 41:   PetscCall(PetscPrintf(PETSC_COMM_WORLD, "EXIT_SUCCESS\n"));
 42:   PetscCall(PetscFinalize());
 43:   return 0;
 44: }

 46: /*TEST

 48:   testset:
 49:     requires: cxx
 50:     output_file: ./output/ExitSuccess.out
 51:     nsize: {{1 2 4}}
 52:     args: -device_enable {{lazy eager}}
 53:     test:
 54:       requires: !device
 55:       suffix: host_no_device
 56:     test:
 57:       requires: device
 58:       args: -root_device_context_device_type host
 59:       suffix: host_with_device
 60:     test:
 61:       requires: cuda
 62:       args: -root_device_context_device_type cuda
 63:       suffix: cuda
 64:     test:
 65:       requires: hip
 66:       args: -root_device_context_device_type hip
 67:       suffix: hip
 68:     test:
 69:       requires: sycl
 70:       args: -root_device_context_device_type sycl
 71:       suffix: sycl

 73:   testset:
 74:     requires: !cxx
 75:     output_file: ./output/ExitSuccess.out
 76:     suffix: no_cxx

 78: TEST*/