xref: /petsc/src/sys/objects/device/tests/ex5.c (revision a16fd2c93c02146fccd68469496ac02ca99b9ebe)
1*a16fd2c9SJacob Faibussowitsch static const char help[] = "Tests PetscDeviceGetAttribute().\n\n";
2*a16fd2c9SJacob Faibussowitsch 
3*a16fd2c9SJacob Faibussowitsch #include <petsc/private/deviceimpl.h>
4*a16fd2c9SJacob Faibussowitsch #include "petscdevicetestcommon.h"
5*a16fd2c9SJacob Faibussowitsch #include <petscviewer.h>
6*a16fd2c9SJacob Faibussowitsch 
7*a16fd2c9SJacob Faibussowitsch int main(int argc, char *argv[]) {
8*a16fd2c9SJacob Faibussowitsch   PetscDevice device = NULL;
9*a16fd2c9SJacob Faibussowitsch   size_t      shmem  = 0;
10*a16fd2c9SJacob Faibussowitsch 
11*a16fd2c9SJacob Faibussowitsch   PetscFunctionBeginUser;
12*a16fd2c9SJacob Faibussowitsch   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
13*a16fd2c9SJacob Faibussowitsch 
14*a16fd2c9SJacob Faibussowitsch   PetscCall(PetscDeviceCreate(PETSC_DEVICE_DEFAULT, PETSC_DECIDE, &device));
15*a16fd2c9SJacob Faibussowitsch   PetscCall(PetscDeviceConfigure(device));
16*a16fd2c9SJacob Faibussowitsch   PetscCall(PetscDeviceGetAttribute(device, PETSC_DEVICE_ATTR_SIZE_T_SHARED_MEM_PER_BLOCK, &shmem));
17*a16fd2c9SJacob Faibussowitsch   if (shmem == 0 || shmem == (size_t)-1) {
18*a16fd2c9SJacob Faibussowitsch     PetscCall(PetscDeviceView(device, PETSC_VIEWER_STDOUT_SELF));
19*a16fd2c9SJacob Faibussowitsch     SETERRQ(PETSC_COMM_SELF, PETSC_ERR_LIB, "Maximum shared memory of %zu seems fishy", shmem);
20*a16fd2c9SJacob Faibussowitsch   }
21*a16fd2c9SJacob Faibussowitsch   PetscCall(PetscDeviceDestroy(&device));
22*a16fd2c9SJacob Faibussowitsch 
23*a16fd2c9SJacob Faibussowitsch   PetscCall(PetscPrintf(PETSC_COMM_WORLD, "EXIT_SUCCESS\n"));
24*a16fd2c9SJacob Faibussowitsch   PetscCall(PetscFinalize());
25*a16fd2c9SJacob Faibussowitsch   return 0;
26*a16fd2c9SJacob Faibussowitsch }
27*a16fd2c9SJacob Faibussowitsch 
28*a16fd2c9SJacob Faibussowitsch /*TEST
29*a16fd2c9SJacob Faibussowitsch 
30*a16fd2c9SJacob Faibussowitsch  build:
31*a16fd2c9SJacob Faibussowitsch    requires: defined(PETSC_HAVE_CXX)
32*a16fd2c9SJacob Faibussowitsch 
33*a16fd2c9SJacob Faibussowitsch  testset:
34*a16fd2c9SJacob Faibussowitsch    TODO: broken in ci
35*a16fd2c9SJacob Faibussowitsch    requires: !device
36*a16fd2c9SJacob Faibussowitsch    suffix: no_device
37*a16fd2c9SJacob Faibussowitsch    filter: Error: grep -E -o -e ".*No support for this operation for this object type" -e ".*PETSc is not configured with device support.*" -e "^\[0\]PETSC ERROR:.*[0-9]{1} [A-z]+\(\)"
38*a16fd2c9SJacob Faibussowitsch    test:
39*a16fd2c9SJacob Faibussowitsch      requires: debug
40*a16fd2c9SJacob Faibussowitsch      suffix:   debug
41*a16fd2c9SJacob Faibussowitsch    test:
42*a16fd2c9SJacob Faibussowitsch      requires: !debug
43*a16fd2c9SJacob Faibussowitsch      suffix:   opt
44*a16fd2c9SJacob Faibussowitsch 
45*a16fd2c9SJacob Faibussowitsch  testset:
46*a16fd2c9SJacob Faibussowitsch    output_file: ./output/ExitSuccess.out
47*a16fd2c9SJacob Faibussowitsch    test:
48*a16fd2c9SJacob Faibussowitsch      requires: cuda
49*a16fd2c9SJacob Faibussowitsch      suffix: cuda
50*a16fd2c9SJacob Faibussowitsch    test:
51*a16fd2c9SJacob Faibussowitsch      requires: hip
52*a16fd2c9SJacob Faibussowitsch      suffix: hip
53*a16fd2c9SJacob Faibussowitsch    test:
54*a16fd2c9SJacob Faibussowitsch      requires: sycl
55*a16fd2c9SJacob Faibussowitsch      suffix: sycl
56*a16fd2c9SJacob Faibussowitsch 
57*a16fd2c9SJacob Faibussowitsch TEST*/
58