1 /* { dg-do run { target openacc_nvidia_accel_selected } } */
2 /* { dg-additional-options "-lcuda" } */
11 main (int argc
, char **argv
)
20 unsigned long *a
, *d_a
, dticks
;
27 acc_init (acc_device_nvidia
);
29 devnum
= acc_get_device_num (acc_device_nvidia
);
31 r
= cuDeviceGet (&dev
, devnum
);
32 if (r
!= CUDA_SUCCESS
)
34 fprintf (stderr
, "cuDeviceGet failed: %d\n", r
);
39 cuDeviceGetAttribute (&nprocs
, CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT
,
41 if (r
!= CUDA_SUCCESS
)
43 fprintf (stderr
, "cuDeviceGetAttribute failed: %d\n", r
);
47 r
= cuDeviceGetAttribute (&clkrate
, CU_DEVICE_ATTRIBUTE_CLOCK_RATE
, dev
);
48 if (r
!= CUDA_SUCCESS
)
50 fprintf (stderr
, "cuDeviceGetAttribute failed: %d\n", r
);
54 r
= cuModuleLoad (&module
, "subr.ptx");
55 if (r
!= CUDA_SUCCESS
)
57 fprintf (stderr
, "cuModuleLoad failed: %d\n", r
);
61 r
= cuModuleGetFunction (&delay
, module
, "delay");
62 if (r
!= CUDA_SUCCESS
)
64 fprintf (stderr
, "cuModuleGetFunction failed: %d\n", r
);
68 nbytes
= nprocs
* sizeof (unsigned long);
72 dticks
= (unsigned long) (dtime
* clkrate
);
74 a
= (unsigned long *) malloc (nbytes
);
75 d_a
= (unsigned long *) acc_malloc (nbytes
);
77 acc_map_data (a
, d_a
, nbytes
);
79 kargs
[0] = (void *) &d_a
;
80 kargs
[1] = (void *) &dticks
;
82 for (i
= 0; i
< N
; i
++)
84 streams
[i
] = (CUstream
) acc_get_cuda_stream (i
);
85 if (streams
[i
] != NULL
)
88 r
= cuStreamCreate (&streams
[i
], CU_STREAM_DEFAULT
);
89 if (r
!= CUDA_SUCCESS
)
91 fprintf (stderr
, "cuStreamCreate failed: %d\n", r
);
95 if (!acc_set_cuda_stream (i
, streams
[i
]))
99 for (i
= 0; i
< N
; i
++)
101 r
= cuLaunchKernel (delay
, 1, 1, 1, 1, 1, 1, 0, streams
[i
], kargs
, 0);
102 if (r
!= CUDA_SUCCESS
)
104 fprintf (stderr
, "cuLaunchKernel failed: %d\n", r
);
110 if (acc_async_test_all () != 0)
112 fprintf (stderr
, "asynchronous operation not running\n");
116 sleep ((int) (dtime
/ 1000.0f
) + 1);
118 if (acc_async_test_all () != 1)
120 fprintf (stderr
, "asynchronous operation not running\n");
129 acc_shutdown (acc_device_nvidia
);
134 /* { dg-output "" } */