1 /* { dg-do run { target openacc_nvidia_accel_selected } } */
2 /* { dg-additional-options "-lcuda" } */
12 main (int argc
, char **argv
)
19 unsigned long *a
, *d_a
, dticks
;
26 acc_init (acc_device_nvidia
);
28 devnum
= acc_get_device_num (acc_device_nvidia
);
30 r
= cuDeviceGet (&dev
, devnum
);
31 if (r
!= CUDA_SUCCESS
)
33 fprintf (stderr
, "cuDeviceGet failed: %d\n", r
);
38 cuDeviceGetAttribute (&nprocs
, CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT
,
40 if (r
!= CUDA_SUCCESS
)
42 fprintf (stderr
, "cuDeviceGetAttribute failed: %d\n", r
);
46 r
= cuDeviceGetAttribute (&clkrate
, CU_DEVICE_ATTRIBUTE_CLOCK_RATE
, dev
);
47 if (r
!= CUDA_SUCCESS
)
49 fprintf (stderr
, "cuDeviceGetAttribute failed: %d\n", r
);
53 r
= cuModuleLoad (&module
, "subr.ptx");
54 if (r
!= CUDA_SUCCESS
)
56 fprintf (stderr
, "cuModuleLoad failed: %d\n", r
);
60 r
= cuModuleGetFunction (&delay
, module
, "delay");
61 if (r
!= CUDA_SUCCESS
)
63 fprintf (stderr
, "cuModuleGetFunction failed: %d\n", r
);
67 nbytes
= nprocs
* sizeof (unsigned long);
71 dticks
= (unsigned long) (dtime
* clkrate
);
73 a
= (unsigned long *) malloc (nbytes
);
74 d_a
= (unsigned long *) acc_malloc (nbytes
);
76 acc_map_data (a
, d_a
, nbytes
);
78 kargs
[0] = (void *) &d_a
;
79 kargs
[1] = (void *) &dticks
;
81 stream
= (CUstream
) acc_get_cuda_stream (0);
85 r
= cuStreamCreate (&stream
, CU_STREAM_DEFAULT
);
86 if (r
!= CUDA_SUCCESS
)
88 fprintf (stderr
, "cuStreamCreate failed: %d\n", r
);
92 if (!acc_set_cuda_stream (0, stream
))
99 r
= cuLaunchKernel (delay
, 1, 1, 1, 1, 1, 1, 0, stream
, kargs
, 0);
100 if (r
!= CUDA_SUCCESS
)
102 fprintf (stderr
, "cuLaunchKernel failed: %d\n", r
);
108 atime
= stop_timer (0);
112 fprintf (stderr
, "actual time < delay time\n");
120 atime
= stop_timer (0);
124 fprintf (stderr
, "actual time too long\n");
135 acc_shutdown (acc_device_nvidia
);
140 /* { dg-output "" } */