Actual source code: ex5.c
1: static const char help[] = "Tests PetscDeviceGetAttribute().\n\n";
3: #include "petscdevicetestcommon.h"
4: #include <petscviewer.h>
6: int main(int argc, char *argv[])
7: {
8: PetscDevice device = NULL;
9: size_t shmem = 0;
11: PetscFunctionBeginUser;
12: PetscCall(PetscInitialize(&argc, &argv, NULL, help));
14: PetscCall(PetscDeviceCreate(PETSC_DEVICE_DEFAULT(), PETSC_DECIDE, &device));
15: PetscCall(PetscDeviceConfigure(device));
16: PetscCall(PetscDeviceGetAttribute(device, PETSC_DEVICE_ATTR_SIZE_T_SHARED_MEM_PER_BLOCK, &shmem));
17: if (PetscDefined(HAVE_CXX) && ((shmem == 0) || (shmem == (size_t)-1))) {
18: // if no C++ then PetscDeviceGetAttribute defaults to 0
19: PetscCall(PetscDeviceView(device, PETSC_VIEWER_STDOUT_SELF));
20: SETERRQ(PETSC_COMM_SELF, PETSC_ERR_LIB, "Maximum shared memory of %zu seems fishy", shmem);
21: }
22: PetscCall(PetscDeviceDestroy(&device));
24: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "EXIT_SUCCESS\n"));
25: PetscCall(PetscFinalize());
26: return 0;
27: }
29: /*TEST
31: testset:
32: requires: cxx
33: output_file: ./output/ExitSuccess.out
34: args: -device_enable {{lazy eager}}
35: test:
36: requires: !device
37: suffix: host_no_device
38: test:
39: requires: device
40: args: -default_device_type host
41: suffix: host_with_device
42: test:
43: requires: cuda
44: args: -default_device_type cuda
45: suffix: cuda
46: test:
47: requires: hip
48: args: -default_device_type hip
49: suffix: hip
50: test:
51: requires: sycl
52: args: -default_device_type sycl
53: suffix: sycl
55: testset:
56: requires: !cxx
57: output_file: ./output/ExitSuccess.out
58: suffix: no_cxx
60: TEST*/