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