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