aboutsummaryrefslogtreecommitdiff
path: root/libgomp/testsuite/libgomp.c-c++-common/omp-default-device.c
blob: 5489f019b0b3de66fa3865fa9533da31f45307f6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <omp.h>

#if __cplusplus
static_assert (omp_default_device < -1
	       && omp_default_device != omp_invalid_device, "");
#else
_Static_assert (omp_default_device < -1
		&& omp_default_device != omp_invalid_device, "");
#endif

static int
is_same_dev (int d1, int d2)
{
  int num_dev = omp_get_num_devices ();
  if (d1 == omp_initial_device)
    d1 = num_dev;
  if (d2 == omp_initial_device)
    d2 = num_dev;
  return (d1 == d2);
}

int
main()
{
  int dev = -99;
  int def_dev = omp_get_default_device ();
  #pragma omp target map(from: dev) device(omp_default_device)
    dev = omp_get_device_num ();

  if (!is_same_dev (def_dev, dev))
    __builtin_abort ();

  for (def_dev = omp_initial_device; def_dev <= omp_get_num_devices ();
       def_dev++)
    {
      const char* uid = omp_get_uid_from_device(def_dev);
      omp_set_default_device (def_dev);
      dev = -99;
      #pragma omp target map(from: dev) device(omp_default_device)
        dev = omp_get_device_num ();
      if (!is_same_dev (def_dev, dev))
        __builtin_abort ();

      /* Shall not modify the ICV.  */
      omp_set_default_device (omp_default_device);
      if (def_dev != omp_get_default_device ())
        __builtin_abort ();

      /* Assume the ptr and no only the string is the same.  */
      if (uid != omp_get_uid_from_device (omp_default_device))
        __builtin_abort ();
    }

  omp_set_default_device (omp_invalid_device);
  /* Shall not modify the ICV.  */
  omp_set_default_device (omp_default_device);
  if (omp_invalid_device != omp_get_default_device ())
    __builtin_abort ();
}