* Weaken expectation concerning acc_property_free_memory.
Do not expect the value returned by CUDA since that value might have
changed in the meantime.
* Use correct type for the results of calls to acc_get_property in tests.
libgomp/
* testsuite/libgomp.oacc-c-c++-common/acc_get_property-aux.c
(expect_device_properties): Remove "expected_free_mem" argument,
change "expected_total_mem" argument type to size_t;
change types of acc_get_property results to size_t,
adapt format strings.
* testsuite/libgomp.oacc-c-c++-common/acc_get_property.c:
Use %zu instead of %zd to print size_t values.
* testsuite/libgomp.oacc-c-c++-common/acc_get_property-2.c: Adapt and
rename to ...
* testsuite/libgomp.oacc-c-c++-common/acc_get_property-nvptx.c: ... this.
* testsuite/libgomp.oacc-c-c++-common/acc_get_property-3.c: Adapt and
rename to ...
* testsuite/libgomp.oacc-c-c++-common/acc_get_property-host.c: ... this.
Reviewed-by: Thomas Schwinge <thomas@codesourcery.com>
+++ /dev/null
-/* Test the `acc_get_property' and '`acc_get_property_string' library
- functions on Nvidia devices by comparing property values with
- those obtained through the CUDA API. */
-/* { dg-additional-sources acc_get_property-aux.c } */
-/* { dg-additional-options "-lcuda -lcudart" } */
-/* { dg-do run { target openacc_nvidia_accel_selected } } */
-
-#include <openacc.h>
-#include <cuda.h>
-#include <cuda_runtime_api.h>
-#include <string.h>
-#include <stdio.h>
-
-void expect_device_properties
-(acc_device_t dev_type, int dev_num,
- int expected_total_mem, int expected_free_mem,
- const char* expected_vendor, const char* expected_name,
- const char* expected_driver);
-
-int main ()
-{
- int dev_count;
- cudaGetDeviceCount (&dev_count);
-
- for (int dev_num = 0; dev_num < dev_count; ++dev_num)
- {
- if (cudaSetDevice (dev_num) != cudaSuccess)
- {
- fprintf (stderr, "cudaSetDevice failed.\n");
- abort ();
- }
-
- printf("Checking device %d\n", dev_num);
-
- const char *vendor = "Nvidia";
- size_t free_mem;
- size_t total_mem;
- if (cudaMemGetInfo(&free_mem, &total_mem) != cudaSuccess)
- {
- fprintf (stderr, "cudaMemGetInfo failed.\n");
- abort ();
- }
-
- struct cudaDeviceProp p;
- if (cudaGetDeviceProperties(&p, dev_num) != cudaSuccess)
- {
- fprintf (stderr, "cudaGetDeviceProperties failed.\n");
- abort ();
- }
-
- int driver_version;
- if (cudaDriverGetVersion(&driver_version) != cudaSuccess)
- {
- fprintf (stderr, "cudaDriverGetVersion failed.\n");
- abort ();
- }
- /* The version string should contain the version of the CUDA Toolkit
- in the same MAJOR.MINOR format that is used by Nvidia.
- The format string below is the same that is used by the deviceQuery
- program, which belongs to Nvidia's CUDA samples, to print the version. */
- char driver[30];
- snprintf (driver, sizeof driver, "CUDA Driver %u.%u",
- driver_version / 1000, driver_version % 1000 / 10);
-
- expect_device_properties(acc_device_nvidia, dev_num,
- total_mem, free_mem, vendor, p.name, driver);
- }
-}
+++ /dev/null
-/* Test the `acc_get_property' and '`acc_get_property_string' library
- functions for the host device. */
-/* { dg-additional-sources acc_get_property-aux.c } */
-/* { dg-do run } */
-
-#include <openacc.h>
-#include <stdio.h>
-
-void expect_device_properties
-(acc_device_t dev_type, int dev_num,
- int expected_total_mem, int expected_free_mem,
- const char* expected_vendor, const char* expected_name,
- const char* expected_driver);
-
-int main()
-{
- printf ("Checking acc_device_host device properties\n");
- expect_device_properties (acc_device_host, 0, 0, 0, "GNU", "GOMP", "1.0");
-}
void expect_device_properties
(acc_device_t dev_type, int dev_num,
- int expected_total_mem, int expected_free_mem,
- const char* expected_vendor, const char* expected_name,
- const char* expected_driver)
+ size_t expected_memory, const char* expected_vendor,
+ const char* expected_name, const char* expected_driver)
{
const char *vendor = acc_get_property_string (dev_num, dev_type,
acc_property_vendor);
abort ();
}
- int total_mem = acc_get_property (dev_num, dev_type,
- acc_property_memory);
- if (total_mem != expected_total_mem)
+ size_t total_mem = acc_get_property (dev_num, dev_type,
+ acc_property_memory);
+ if (total_mem != expected_memory)
{
- fprintf (stderr, "Expected acc_property_memory to equal %d, "
- "but was %d.\n", expected_total_mem, total_mem);
+ fprintf (stderr, "Expected acc_property_memory to equal %zu, "
+ "but was %zu.\n", expected_memory, total_mem);
abort ();
}
- int free_mem = acc_get_property (dev_num, dev_type,
+ size_t free_mem = acc_get_property (dev_num, dev_type,
acc_property_free_memory);
- if (free_mem != expected_free_mem)
+ if (free_mem > total_mem)
{
- fprintf (stderr, "Expected acc_property_free_memory to equal %d, "
- "but was %d.\n", expected_free_mem, free_mem);
+ fprintf (stderr, "Expected acc_property_free_memory <= acc_property_memory"
+ ", but free memory was %zu and total memory was %zu.\n",
+ free_mem, total_mem);
abort ();
}
}
int unknown_property = 16058;
- int v = acc_get_property (dev_num, dev_type, (acc_device_property_t)unknown_property);
+ size_t v = acc_get_property (dev_num, dev_type, (acc_device_property_t)unknown_property);
if (v != 0)
{
fprintf (stderr, "Expected value of unknown numeric property to equal 0, "
- "but was %d.\n", v);
+ "but was %zu.\n", v);
abort ();
}
if (s != NULL)
{
fprintf (stderr, "Expected value of unknown string property to be NULL, "
- "but was %d.\n", s);
+ "but was %s.\n", s);
abort ();
}
--- /dev/null
+/* Test the `acc_get_property' and '`acc_get_property_string' library
+ functions for the host device. */
+/* { dg-additional-sources acc_get_property-aux.c } */
+/* { dg-do run } */
+
+#include <openacc.h>
+#include <stdio.h>
+
+void expect_device_properties
+(acc_device_t dev_type, int dev_num,
+ size_t expected_memory, const char* expected_vendor,
+ const char* expected_name, const char* expected_driver);
+
+int main()
+{
+ printf ("Checking acc_device_host device properties\n");
+ expect_device_properties (acc_device_host, 0, 0, "GNU", "GOMP", "1.0");
+}
--- /dev/null
+/* Test the `acc_get_property' and '`acc_get_property_string' library
+ functions on Nvidia devices by comparing property values with
+ those obtained through the CUDA API. */
+/* { dg-additional-sources acc_get_property-aux.c } */
+/* { dg-additional-options "-lcuda -lcudart" } */
+/* { dg-do run { target openacc_nvidia_accel_selected } } */
+
+#include <openacc.h>
+#include <cuda.h>
+#include <cuda_runtime_api.h>
+#include <string.h>
+#include <stdio.h>
+
+void expect_device_properties
+(acc_device_t dev_type, int dev_num,
+ size_t expected_memory, const char* expected_vendor,
+ const char* expected_name, const char* expected_driver);
+
+int main ()
+{
+ int dev_count;
+ cudaGetDeviceCount (&dev_count);
+
+ for (int dev_num = 0; dev_num < dev_count; ++dev_num)
+ {
+ if (cudaSetDevice (dev_num) != cudaSuccess)
+ {
+ fprintf (stderr, "cudaSetDevice failed.\n");
+ abort ();
+ }
+
+ printf("Checking device %d\n", dev_num);
+
+ const char *vendor = "Nvidia";
+ size_t free_mem;
+ size_t total_mem;
+ if (cudaMemGetInfo(&free_mem, &total_mem) != cudaSuccess)
+ {
+ fprintf (stderr, "cudaMemGetInfo failed.\n");
+ abort ();
+ }
+
+ struct cudaDeviceProp p;
+ if (cudaGetDeviceProperties(&p, dev_num) != cudaSuccess)
+ {
+ fprintf (stderr, "cudaGetDeviceProperties failed.\n");
+ abort ();
+ }
+
+ int driver_version;
+ if (cudaDriverGetVersion(&driver_version) != cudaSuccess)
+ {
+ fprintf (stderr, "cudaDriverGetVersion failed.\n");
+ abort ();
+ }
+ /* The version string should contain the version of the CUDA Toolkit
+ in the same MAJOR.MINOR format that is used by Nvidia.
+ The format string below is the same that is used by the deviceQuery
+ program, which belongs to Nvidia's CUDA samples, to print the version. */
+ char driver[30];
+ snprintf (driver, sizeof driver, "CUDA Driver %u.%u",
+ driver_version / 1000, driver_version % 1000 / 10);
+
+ /* Note that this check relies on the fact that the device numbering
+ used by the nvptx plugin agrees with the CUDA device ordering. */
+ expect_device_properties(acc_device_nvidia, dev_num,
+ total_mem, vendor, p.name, driver);
+ }
+}
}
v = acc_get_property (i, type, acc_property_memory);
- printf (" Total memory: %zd\n", v);
+ printf (" Total memory: %zu\n", v);
v = acc_get_property (i, type, acc_property_free_memory);
- printf (" Free memory: %zd\n", v);
+ printf (" Free memory: %zu\n", v);
s = acc_get_property_string (i, type, acc_property_name);
printf (" Name: %s\n", s);