1 /* { dg-do run { target openacc_nvidia_accel_selected } } */
2 /* { dg-additional-options "-lcuda" } */
3 /* { dg-require-effective-target openacc_cuda } */
18 const int NTHREADS
= 32;
28 tid
= (int) (long) arg
;
30 devnum
= acc_get_device_num (acc_device_nvidia
);
31 acc_set_device_num (devnum
, acc_device_nvidia
);
33 if (acc_get_current_cuda_context () == NULL
)
36 p
= (unsigned char *) malloc (N
);
38 for (i
= 0; i
< N
; i
++)
45 d_x
[tid
] = acc_copyin (p
, N
);
53 main (int argc
, char **argv
)
61 acc_init (acc_device_nvidia
);
63 x
= (unsigned char **) malloc (NTHREADS
* N
);
64 d_x
= (void **) malloc (NTHREADS
* N
);
66 if (pthread_attr_init (&attr
) != 0)
67 perror ("pthread_attr_init failed");
69 tid
= (pthread_t
*) malloc (NTHREADS
* sizeof (pthread_t
));
71 r
= cuStreamCreate (&s
, CU_STREAM_DEFAULT
);
72 if (r
!= CUDA_SUCCESS
)
74 fprintf (stderr
, "cuStreamCreate failed: %d\n", r
);
78 if (!acc_set_cuda_stream (0, s
))
81 for (i
= 0; i
< NTHREADS
; i
++)
83 if (pthread_create (&tid
[i
], &attr
, &test
, (void *) (unsigned long) (i
))
85 perror ("pthread_create failed");
88 if (pthread_attr_destroy (&attr
) != 0)
89 perror ("pthread_attr_destroy failed");
91 for (i
= 0; i
< NTHREADS
; i
++)
95 if (pthread_join (tid
[i
], &res
) != 0)
96 perror ("pthread join failed");
100 for (i
= 0; i
< NTHREADS
; i
++)
102 if (acc_is_present (x
[i
], N
) != 1)
106 acc_get_cuda_stream (1);
108 for (i
= 0; i
< NTHREADS
; i
++)
111 acc_copyout (x
[i
], N
);
116 for (i
= 0; i
< NTHREADS
; i
++)
123 for (j
= 0; j
< N
; j
++)
129 if (acc_is_present (x
[i
], N
) != 0)
133 acc_shutdown (acc_device_nvidia
);
138 /* { dg-output "" } */