xref: /petsc/src/sys/objects/device/tests/ex5.c (revision 017deb10d530c1b6d9744fcd772cd96c5fcd74f2)
1a16fd2c9SJacob Faibussowitsch static const char help[] = "Tests PetscDeviceGetAttribute().\n\n";
2a16fd2c9SJacob Faibussowitsch 
3a16fd2c9SJacob Faibussowitsch #include "petscdevicetestcommon.h"
4a16fd2c9SJacob Faibussowitsch #include <petscviewer.h>
5a16fd2c9SJacob Faibussowitsch 
main(int argc,char * argv[])6d71ae5a4SJacob Faibussowitsch int main(int argc, char *argv[])
7d71ae5a4SJacob Faibussowitsch {
8a16fd2c9SJacob Faibussowitsch   PetscDevice device = NULL;
9a16fd2c9SJacob Faibussowitsch   size_t      shmem  = 0;
10a16fd2c9SJacob Faibussowitsch 
11a16fd2c9SJacob Faibussowitsch   PetscFunctionBeginUser;
12a16fd2c9SJacob Faibussowitsch   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
13a16fd2c9SJacob Faibussowitsch 
140e6b6b59SJacob Faibussowitsch   PetscCall(PetscDeviceCreate(PETSC_DEVICE_DEFAULT(), PETSC_DECIDE, &device));
15a16fd2c9SJacob Faibussowitsch   PetscCall(PetscDeviceConfigure(device));
16a16fd2c9SJacob Faibussowitsch   PetscCall(PetscDeviceGetAttribute(device, PETSC_DEVICE_ATTR_SIZE_T_SHARED_MEM_PER_BLOCK, &shmem));
17*27d4e10aSPierre Jolivet   if (PetscDefined(DEVICELANGUAGE_CXX) && ((shmem == 0) || (shmem == (size_t)-1))) {
180e6b6b59SJacob Faibussowitsch     // if no C++ then PetscDeviceGetAttribute defaults to 0
19a16fd2c9SJacob Faibussowitsch     PetscCall(PetscDeviceView(device, PETSC_VIEWER_STDOUT_SELF));
20a16fd2c9SJacob Faibussowitsch     SETERRQ(PETSC_COMM_SELF, PETSC_ERR_LIB, "Maximum shared memory of %zu seems fishy", shmem);
21a16fd2c9SJacob Faibussowitsch   }
22a16fd2c9SJacob Faibussowitsch   PetscCall(PetscDeviceDestroy(&device));
23a16fd2c9SJacob Faibussowitsch 
24a16fd2c9SJacob Faibussowitsch   PetscCall(PetscPrintf(PETSC_COMM_WORLD, "EXIT_SUCCESS\n"));
25a16fd2c9SJacob Faibussowitsch   PetscCall(PetscFinalize());
26a16fd2c9SJacob Faibussowitsch   return 0;
27a16fd2c9SJacob Faibussowitsch }
28a16fd2c9SJacob Faibussowitsch 
29a16fd2c9SJacob Faibussowitsch /*TEST
30a16fd2c9SJacob Faibussowitsch 
31a16fd2c9SJacob Faibussowitsch   testset:
32*27d4e10aSPierre Jolivet     requires: defined(PETSC_DEVICELANGUAGE_CXX)
3361c8d4edSPierre Jolivet     output_file: output/ExitSuccess.out
340e6b6b59SJacob Faibussowitsch     args: -device_enable {{lazy eager}}
350e6b6b59SJacob Faibussowitsch     test:
360e6b6b59SJacob Faibussowitsch       requires: !device
370e6b6b59SJacob Faibussowitsch       suffix: host_no_device
380e6b6b59SJacob Faibussowitsch     test:
390e6b6b59SJacob Faibussowitsch       requires: device
400e6b6b59SJacob Faibussowitsch       args: -default_device_type host
410e6b6b59SJacob Faibussowitsch       suffix: host_with_device
42a16fd2c9SJacob Faibussowitsch     test:
43a16fd2c9SJacob Faibussowitsch       requires: cuda
440e6b6b59SJacob Faibussowitsch       args: -default_device_type cuda
45a16fd2c9SJacob Faibussowitsch       suffix: cuda
46a16fd2c9SJacob Faibussowitsch     test:
47a16fd2c9SJacob Faibussowitsch       requires: hip
480e6b6b59SJacob Faibussowitsch       args: -default_device_type hip
49a16fd2c9SJacob Faibussowitsch       suffix: hip
50a16fd2c9SJacob Faibussowitsch     test:
51a16fd2c9SJacob Faibussowitsch       requires: sycl
520e6b6b59SJacob Faibussowitsch       args: -default_device_type sycl
53a16fd2c9SJacob Faibussowitsch       suffix: sycl
54a16fd2c9SJacob Faibussowitsch 
55667ab0feSJacob Faibussowitsch   testset:
56*27d4e10aSPierre Jolivet     requires: !defined(PETSC_DEVICELANGUAGE_CXX)
5761c8d4edSPierre Jolivet     output_file: output/ExitSuccess.out
58667ab0feSJacob Faibussowitsch     suffix: no_cxx
59667ab0feSJacob Faibussowitsch 
60a16fd2c9SJacob Faibussowitsch TEST*/
61