1*4738d3a5SJacob Faibussowitsch static const char help[] = "Tests PetscDeviceContextSetStreamType().\n\n"; 2*4738d3a5SJacob Faibussowitsch 3*4738d3a5SJacob Faibussowitsch #include "petscdevicetestcommon.h" 4*4738d3a5SJacob Faibussowitsch 5*4738d3a5SJacob Faibussowitsch int main(int argc, char *argv[]) 6*4738d3a5SJacob Faibussowitsch { 7*4738d3a5SJacob Faibussowitsch const PetscStreamType stypes[] = { 8*4738d3a5SJacob Faibussowitsch #if PetscDefined(HAVE_CXX) 9*4738d3a5SJacob Faibussowitsch PETSC_STREAM_GLOBAL_BLOCKING, 10*4738d3a5SJacob Faibussowitsch PETSC_STREAM_DEFAULT_BLOCKING, 11*4738d3a5SJacob Faibussowitsch PETSC_STREAM_GLOBAL_NONBLOCKING 12*4738d3a5SJacob Faibussowitsch #else 13*4738d3a5SJacob Faibussowitsch PETSC_STREAM_GLOBAL_BLOCKING, 14*4738d3a5SJacob Faibussowitsch #endif 15*4738d3a5SJacob Faibussowitsch }; 16*4738d3a5SJacob Faibussowitsch const PetscInt ntypes = PETSC_STATIC_ARRAY_LENGTH(stypes); 17*4738d3a5SJacob Faibussowitsch 18*4738d3a5SJacob Faibussowitsch PetscFunctionBeginUser; 19*4738d3a5SJacob Faibussowitsch PetscCall(PetscInitialize(&argc, &argv, NULL, help)); 20*4738d3a5SJacob Faibussowitsch 21*4738d3a5SJacob Faibussowitsch // test that get-set trivially work 22*4738d3a5SJacob Faibussowitsch for (PetscInt i = 0; i < ntypes; ++i) { 23*4738d3a5SJacob Faibussowitsch PetscDeviceContext tmp; 24*4738d3a5SJacob Faibussowitsch PetscStreamType tmp_type; 25*4738d3a5SJacob Faibussowitsch 26*4738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextCreate(&tmp)); 27*4738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextSetStreamType(tmp, stypes[i])); 28*4738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextGetStreamType(tmp, &tmp_type)); 29*4738d3a5SJacob Faibussowitsch PetscCall(AssertPetscStreamTypesValidAndEqual(tmp_type, stypes[i], "Set PetscDeviceStreamType %s does not match expected %s")); 30*4738d3a5SJacob Faibussowitsch // test that any combination of get-set trivially works 31*4738d3a5SJacob Faibussowitsch for (PetscInt j = 0; j < ntypes; ++j) { 32*4738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextSetStreamType(tmp, stypes[j])); 33*4738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextGetStreamType(tmp, &tmp_type)); 34*4738d3a5SJacob Faibussowitsch PetscCall(AssertPetscStreamTypesValidAndEqual(tmp_type, stypes[j], "Set PetscDeviceStreamType %s does not match expected %s")); 35*4738d3a5SJacob Faibussowitsch // reset it back to original 36*4738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextSetStreamType(tmp, stypes[i])); 37*4738d3a5SJacob Faibussowitsch } 38*4738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextDestroy(&tmp)); 39*4738d3a5SJacob Faibussowitsch } 40*4738d3a5SJacob Faibussowitsch 41*4738d3a5SJacob Faibussowitsch // test that any combination of get-set works when set up 42*4738d3a5SJacob Faibussowitsch for (PetscInt i = 0; i < ntypes; ++i) { 43*4738d3a5SJacob Faibussowitsch for (PetscInt j = 0; j < ntypes; ++j) { 44*4738d3a5SJacob Faibussowitsch PetscDeviceContext tmp; 45*4738d3a5SJacob Faibussowitsch PetscStreamType tmp_type; 46*4738d3a5SJacob Faibussowitsch 47*4738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextCreate(&tmp)); 48*4738d3a5SJacob Faibussowitsch // check this works through setup 49*4738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextSetStreamType(tmp, stypes[i])); 50*4738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextSetUp(tmp)); 51*4738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextGetStreamType(tmp, &tmp_type)); 52*4738d3a5SJacob Faibussowitsch PetscCall(AssertPetscStreamTypesValidAndEqual(tmp_type, stypes[i], "Set PetscDeviceStreamType %s does not match expected %s after PetscDeviceContextSetUp")); 53*4738d3a5SJacob Faibussowitsch // now change the stream type 54*4738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextSetStreamType(tmp, stypes[j])); 55*4738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextGetStreamType(tmp, &tmp_type)); 56*4738d3a5SJacob Faibussowitsch PetscCall(AssertPetscStreamTypesValidAndEqual(tmp_type, stypes[j], "Set PetscDeviceStreamType %s does not match expected %s when changing after PetscDeviceContextSetUp")); 57*4738d3a5SJacob Faibussowitsch // reset it back to original 58*4738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextSetStreamType(tmp, stypes[i])); 59*4738d3a5SJacob Faibussowitsch // and ensure this works 60*4738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextGetStreamType(tmp, &tmp_type)); 61*4738d3a5SJacob Faibussowitsch PetscCall(AssertPetscStreamTypesValidAndEqual(tmp_type, stypes[i], "Set PetscDeviceStreamType %s does not match expected %s after setting back to original")); 62*4738d3a5SJacob Faibussowitsch // finally set up again 63*4738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextSetUp(tmp)); 64*4738d3a5SJacob Faibussowitsch // and ensure it has not changed 65*4738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextGetStreamType(tmp, &tmp_type)); 66*4738d3a5SJacob Faibussowitsch PetscCall(AssertPetscStreamTypesValidAndEqual(tmp_type, stypes[i], "Set PetscDeviceStreamType %s does not match expected %s after setting back to original and PetscDeviceContextSetUp")); 67*4738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextDestroy(&tmp)); 68*4738d3a5SJacob Faibussowitsch } 69*4738d3a5SJacob Faibussowitsch } 70*4738d3a5SJacob Faibussowitsch 71*4738d3a5SJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD, "EXIT_SUCCESS\n")); 72*4738d3a5SJacob Faibussowitsch PetscCall(PetscFinalize()); 73*4738d3a5SJacob Faibussowitsch return 0; 74*4738d3a5SJacob Faibussowitsch } 75*4738d3a5SJacob Faibussowitsch 76*4738d3a5SJacob Faibussowitsch /*TEST 77*4738d3a5SJacob Faibussowitsch 78*4738d3a5SJacob Faibussowitsch testset: 79*4738d3a5SJacob Faibussowitsch requires: cxx 80*4738d3a5SJacob Faibussowitsch output_file: ./output/ExitSuccess.out 81*4738d3a5SJacob Faibussowitsch args: -device_enable {{lazy eager}} 82*4738d3a5SJacob Faibussowitsch test: 83*4738d3a5SJacob Faibussowitsch requires: !device 84*4738d3a5SJacob Faibussowitsch suffix: host_no_device 85*4738d3a5SJacob Faibussowitsch test: 86*4738d3a5SJacob Faibussowitsch requires: device 87*4738d3a5SJacob Faibussowitsch args: -default_device_type host 88*4738d3a5SJacob Faibussowitsch suffix: host_with_device 89*4738d3a5SJacob Faibussowitsch test: 90*4738d3a5SJacob Faibussowitsch requires: cuda 91*4738d3a5SJacob Faibussowitsch args: -default_device_type cuda 92*4738d3a5SJacob Faibussowitsch suffix: cuda 93*4738d3a5SJacob Faibussowitsch test: 94*4738d3a5SJacob Faibussowitsch requires: hip 95*4738d3a5SJacob Faibussowitsch args: -default_device_type hip 96*4738d3a5SJacob Faibussowitsch suffix: hip 97*4738d3a5SJacob Faibussowitsch test: 98*4738d3a5SJacob Faibussowitsch requires: sycl 99*4738d3a5SJacob Faibussowitsch args: -default_device_type sycl 100*4738d3a5SJacob Faibussowitsch suffix: sycl 101*4738d3a5SJacob Faibussowitsch 102*4738d3a5SJacob Faibussowitsch test: 103*4738d3a5SJacob Faibussowitsch requires: !cxx 104*4738d3a5SJacob Faibussowitsch output_file: ./output/ExitSuccess.out 105*4738d3a5SJacob Faibussowitsch suffix: no_cxx 106*4738d3a5SJacob Faibussowitsch 107*4738d3a5SJacob Faibussowitsch TEST*/ 108