/* Test the `acc_get_property' and '`acc_get_property_string' library functions by printing the results of those functions for all devices of all device types mentioned in the OpenACC standard. See also acc_get_property.f90. */ /* { dg-do run } */ #include #include #include #include /* Print the values of the properties of all devices of the given type and do basic device independent validation. */ void print_device_properties (acc_device_t type) { const char *s; size_t v; int dev_count = acc_get_num_devices (type); for (int i = 0; i < dev_count; ++i) { printf (" Device %d:\n", i+1); s = acc_get_property_string (i, type, acc_property_vendor); printf (" Vendor: %s\n", s); if (s == NULL || *s == 0) { fprintf (stderr, "acc_property_vendor should not be null or empty.\n"); abort (); } v = acc_get_property (i, type, acc_property_memory); printf (" Total memory: %zu\n", v); v = acc_get_property (i, type, acc_property_free_memory); printf (" Free memory: %zu\n", v); s = acc_get_property_string (i, type, acc_property_name); printf (" Name: %s\n", s); if (s == NULL || *s == 0) { fprintf (stderr, "acc_property_name should not be null or empty.\n"); abort (); } s = acc_get_property_string (i, type, acc_property_driver); printf (" Driver: %s\n", s); if (s == NULL || *s == 0) { fprintf (stderr, "acc_property_string should not be null or empty.\n"); abort (); } } } int main () { printf ("acc_device_none:\n"); /* For completness; not expected to print anything since there should be no devices of this type. */ print_device_properties (acc_device_none); printf ("acc_device_default:\n"); print_device_properties (acc_device_default); printf ("acc_device_host:\n"); print_device_properties (acc_device_host); printf ("acc_device_not_host:\n"); print_device_properties (acc_device_not_host); }