Actual source code: ex10.c

  1: static const char help[] = "Tests PetscDeviceContextSetStreamType().\n\n";

  3: #include "petscdevicetestcommon.h"

  5: int main(int argc, char *argv[])
  6: {
  7:   const PetscStreamType stypes[] = {
  8: #if PetscDefined(HAVE_CXX)
  9:     PETSC_STREAM_DEFAULT, PETSC_STREAM_NONBLOCKING, PETSC_STREAM_DEFAULT_WITH_BARRIER, PETSC_STREAM_NONBLOCKING_WITH_BARRIER
 10: #else
 11:     PETSC_STREAM_DEFAULT
 12: #endif
 13:   };
 14:   const PetscInt ntypes = PETSC_STATIC_ARRAY_LENGTH(stypes);

 16:   PetscFunctionBeginUser;
 17:   PetscCall(PetscInitialize(&argc, &argv, NULL, help));

 19:   // test that get-set trivially work
 20:   for (PetscInt i = 0; i < ntypes; ++i) {
 21:     PetscDeviceContext tmp;
 22:     PetscStreamType    tmp_type;

 24:     PetscCall(PetscDeviceContextCreate(&tmp));
 25:     PetscCall(PetscDeviceContextSetStreamType(tmp, stypes[i]));
 26:     PetscCall(PetscDeviceContextGetStreamType(tmp, &tmp_type));
 27:     PetscCall(AssertPetscStreamTypesValidAndEqual(tmp_type, stypes[i], "Set PetscDeviceStreamType %s does not match expected %s"));
 28:     // test that any combination of get-set trivially works
 29:     for (PetscInt j = 0; j < ntypes; ++j) {
 30:       PetscCall(PetscDeviceContextSetStreamType(tmp, stypes[j]));
 31:       PetscCall(PetscDeviceContextGetStreamType(tmp, &tmp_type));
 32:       PetscCall(AssertPetscStreamTypesValidAndEqual(tmp_type, stypes[j], "Set PetscDeviceStreamType %s does not match expected %s"));
 33:       // reset it back to original
 34:       PetscCall(PetscDeviceContextSetStreamType(tmp, stypes[i]));
 35:     }
 36:     PetscCall(PetscDeviceContextDestroy(&tmp));
 37:   }

 39:   // test that any combination of get-set works when set up
 40:   for (PetscInt i = 0; i < ntypes; ++i) {
 41:     for (PetscInt j = 0; j < ntypes; ++j) {
 42:       PetscDeviceContext tmp;
 43:       PetscStreamType    tmp_type;

 45:       PetscCall(PetscDeviceContextCreate(&tmp));
 46:       // check this works through setup
 47:       PetscCall(PetscDeviceContextSetStreamType(tmp, stypes[i]));
 48:       PetscCall(PetscDeviceContextSetUp(tmp));
 49:       PetscCall(PetscDeviceContextGetStreamType(tmp, &tmp_type));
 50:       PetscCall(AssertPetscStreamTypesValidAndEqual(tmp_type, stypes[i], "Set PetscDeviceStreamType %s does not match expected %s after PetscDeviceContextSetUp"));
 51:       // now change the stream type
 52:       PetscCall(PetscDeviceContextSetStreamType(tmp, stypes[j]));
 53:       PetscCall(PetscDeviceContextGetStreamType(tmp, &tmp_type));
 54:       PetscCall(AssertPetscStreamTypesValidAndEqual(tmp_type, stypes[j], "Set PetscDeviceStreamType %s does not match expected %s when changing after PetscDeviceContextSetUp"));
 55:       // reset it back to original
 56:       PetscCall(PetscDeviceContextSetStreamType(tmp, stypes[i]));
 57:       // and ensure this works
 58:       PetscCall(PetscDeviceContextGetStreamType(tmp, &tmp_type));
 59:       PetscCall(AssertPetscStreamTypesValidAndEqual(tmp_type, stypes[i], "Set PetscDeviceStreamType %s does not match expected %s after setting back to original"));
 60:       // finally set up again
 61:       PetscCall(PetscDeviceContextSetUp(tmp));
 62:       // and ensure it has not changed
 63:       PetscCall(PetscDeviceContextGetStreamType(tmp, &tmp_type));
 64:       PetscCall(AssertPetscStreamTypesValidAndEqual(tmp_type, stypes[i], "Set PetscDeviceStreamType %s does not match expected %s after setting back to original and PetscDeviceContextSetUp"));
 65:       PetscCall(PetscDeviceContextDestroy(&tmp));
 66:     }
 67:   }

 69:   PetscCall(PetscPrintf(PETSC_COMM_WORLD, "EXIT_SUCCESS\n"));
 70:   PetscCall(PetscFinalize());
 71:   return 0;
 72: }

 74: /*TEST

 76:   testset:
 77:     requires: cxx
 78:     output_file: ./output/ExitSuccess.out
 79:     args: -device_enable {{lazy eager}}
 80:     test:
 81:       requires: !device
 82:       suffix: host_no_device
 83:     test:
 84:       requires: device
 85:       args: -default_device_type host
 86:       suffix: host_with_device
 87:     test:
 88:       requires: cuda
 89:       args: -default_device_type cuda
 90:       suffix: cuda
 91:     test:
 92:       requires: hip
 93:       args: -default_device_type hip
 94:       suffix: hip
 95:     test:
 96:       requires: sycl
 97:       args: -default_device_type sycl
 98:       suffix: sycl

100:   test:
101:     requires: !cxx
102:     output_file: ./output/ExitSuccess.out
103:     suffix: no_cxx

105: TEST*/