xref: /petsc/src/sys/objects/device/tests/ex5.c (revision d71ae5a4db6382e7f06317b8d368875286fe9008)
1a16fd2c9SJacob Faibussowitsch static const char help[] = "Tests PetscDeviceGetAttribute().\n\n";
2a16fd2c9SJacob Faibussowitsch 
3a16fd2c9SJacob Faibussowitsch #include "petscdevicetestcommon.h"
4a16fd2c9SJacob Faibussowitsch #include <petscviewer.h>
5a16fd2c9SJacob Faibussowitsch 
6*d71ae5a4SJacob Faibussowitsch int main(int argc, char *argv[])
7*d71ae5a4SJacob 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));
170e6b6b59SJacob Faibussowitsch   if (PetscDefined(HAVE_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   build:
32a16fd2c9SJacob Faibussowitsch    requires: defined(PETSC_HAVE_CXX)
33a16fd2c9SJacob Faibussowitsch 
34a16fd2c9SJacob Faibussowitsch   testset:
35a16fd2c9SJacob Faibussowitsch    output_file: ./output/ExitSuccess.out
360e6b6b59SJacob Faibussowitsch    args: -device_enable {{lazy eager}}
370e6b6b59SJacob Faibussowitsch    test:
380e6b6b59SJacob Faibussowitsch      requires: !device
390e6b6b59SJacob Faibussowitsch      suffix: host_no_device
400e6b6b59SJacob Faibussowitsch    test:
410e6b6b59SJacob Faibussowitsch      requires: device
420e6b6b59SJacob Faibussowitsch      args: -default_device_type host
430e6b6b59SJacob Faibussowitsch      suffix: host_with_device
44a16fd2c9SJacob Faibussowitsch    test:
45a16fd2c9SJacob Faibussowitsch      requires: cuda
460e6b6b59SJacob Faibussowitsch      args: -default_device_type cuda
47a16fd2c9SJacob Faibussowitsch      suffix: cuda
48a16fd2c9SJacob Faibussowitsch    test:
49a16fd2c9SJacob Faibussowitsch      requires: hip
500e6b6b59SJacob Faibussowitsch      args: -default_device_type hip
51a16fd2c9SJacob Faibussowitsch      suffix: hip
52a16fd2c9SJacob Faibussowitsch    test:
53a16fd2c9SJacob Faibussowitsch      requires: sycl
540e6b6b59SJacob Faibussowitsch      args: -default_device_type sycl
55a16fd2c9SJacob Faibussowitsch      suffix: sycl
56a16fd2c9SJacob Faibussowitsch 
57a16fd2c9SJacob Faibussowitsch TEST*/
58