#include #include #include int main() { const char **strs = (const char **) malloc (sizeof (char*) * (omp_get_num_devices () + 1)); for (int i = omp_invalid_device - 1; i <= omp_get_num_devices () + 1; i++) { const char *str = omp_get_uid_from_device (i); int dev = omp_get_device_from_uid (str); // __builtin_printf("%i -> %s -> %d\n", i, str, dev); if (i < omp_initial_device || i > omp_get_num_devices ()) { if (dev != omp_invalid_device || str != NULL) abort (); continue; } if (i == omp_initial_device || i == omp_get_num_devices ()) { if ((dev != omp_initial_device && dev != omp_get_num_devices ()) || str == NULL || strcmp (str, "OMP_INITIAL_DEVICE") != 0) /* GCC impl. choice */ abort (); dev = omp_get_num_devices (); } else if (dev != i || str == NULL || str[0] == '\0') abort (); strs[dev] = str; } for (int i = 0; i < omp_get_num_devices (); i++) for (int j = i + 1; j <= omp_get_num_devices (); j++) if (strcmp (strs[i], strs[j]) == 0) abort (); free (strs); return 0; }