| #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 (); |
| } |