view libgomp/testsuite/libgomp.oacc-c-c++-common/acc_get_property.c @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
line wrap: on
line source

/* 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 <openacc.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

/* 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);
}