[PR testsuite/65205] Fix dg-shouldfail usage in OpenACC libgomp tests
[official-gcc.git] / libgomp / testsuite / libgomp.oacc-c-c++-common / lib-71.c
blobe8584db27cf54944eebe941c743aaaef2f18e0d3
1 /* { dg-do run { target openacc_nvidia_accel_selected } } */
2 /* { dg-additional-options "-lcuda" } */
4 #include <stdio.h>
5 #include <unistd.h>
6 #include <openacc.h>
7 #include <cuda.h>
9 int
10 main (int argc, char **argv)
12 CUdevice dev;
13 CUfunction delay;
14 CUmodule module;
15 CUresult r;
16 CUstream stream;
17 unsigned long *a, *d_a, dticks;
18 int nbytes;
19 float dtime;
20 void *kargs[2];
21 int clkrate;
22 int devnum, nprocs;
24 acc_init (acc_device_nvidia);
26 devnum = acc_get_device_num (acc_device_nvidia);
28 r = cuDeviceGet (&dev, devnum);
29 if (r != CUDA_SUCCESS)
31 fprintf (stderr, "cuDeviceGet failed: %d\n", r);
32 abort ();
35 r =
36 cuDeviceGetAttribute (&nprocs, CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT,
37 dev);
38 if (r != CUDA_SUCCESS)
40 fprintf (stderr, "cuDeviceGetAttribute failed: %d\n", r);
41 abort ();
44 r = cuDeviceGetAttribute (&clkrate, CU_DEVICE_ATTRIBUTE_CLOCK_RATE, dev);
45 if (r != CUDA_SUCCESS)
47 fprintf (stderr, "cuDeviceGetAttribute failed: %d\n", r);
48 abort ();
51 r = cuModuleLoad (&module, "subr.ptx");
52 if (r != CUDA_SUCCESS)
54 fprintf (stderr, "cuModuleLoad failed: %d\n", r);
55 abort ();
58 r = cuModuleGetFunction (&delay, module, "delay");
59 if (r != CUDA_SUCCESS)
61 fprintf (stderr, "cuModuleGetFunction failed: %d\n", r);
62 abort ();
65 nbytes = nprocs * sizeof (unsigned long);
67 dtime = 200.0;
69 dticks = (unsigned long) (dtime * clkrate);
71 a = (unsigned long *) malloc (nbytes);
72 d_a = (unsigned long *) acc_malloc (nbytes);
74 acc_map_data (a, d_a, nbytes);
76 kargs[0] = (void *) &d_a;
77 kargs[1] = (void *) &dticks;
79 r = cuStreamCreate (&stream, CU_STREAM_DEFAULT);
80 if (r != CUDA_SUCCESS)
82 fprintf (stderr, "cuStreamCreate failed: %d\n", r);
83 abort ();
86 acc_set_cuda_stream (0, stream);
88 r = cuLaunchKernel (delay, 1, 1, 1, 1, 1, 1, 0, stream, kargs, 0);
89 if (r != CUDA_SUCCESS)
91 fprintf (stderr, "cuLaunchKernel failed: %d\n", r);
92 abort ();
95 if (acc_async_test (1) != 0)
97 fprintf (stderr, "asynchronous operation not running\n");
98 abort ();
101 sleep ((int) (dtime / 1000.0f) + 1);
103 if (acc_async_test (1) != 1)
105 fprintf (stderr, "found asynchronous operation still running\n");
106 abort ();
109 acc_unmap_data (a);
111 free (a);
112 acc_free (d_a);
114 acc_shutdown (acc_device_nvidia);
116 return 0;
119 /* { dg-output "unknown async \[0-9\]+" } */
120 /* { dg-shouldfail "" } */