]>
Commit | Line | Data |
---|---|---|
ca4c3545 | 1 | /* OpenACC Runtime Library Definitions. |
2 | ||
f1717362 | 3 | Copyright (C) 2013-2016 Free Software Foundation, Inc. |
ca4c3545 | 4 | |
5 | Contributed by Mentor Embedded. | |
995b27b9 | 6 | |
c35c9a62 | 7 | This file is part of the GNU Offloading and Multi Processing Library |
8 | (libgomp). | |
995b27b9 | 9 | |
10 | Libgomp is free software; you can redistribute it and/or modify it | |
11 | under the terms of the GNU General Public License as published by | |
12 | the Free Software Foundation; either version 3, or (at your option) | |
13 | any later version. | |
14 | ||
15 | Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY | |
16 | WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | |
17 | FOR A PARTICULAR PURPOSE. See the GNU General Public License for | |
18 | more details. | |
19 | ||
20 | Under Section 7 of GPL version 3, you are granted additional | |
21 | permissions described in the GCC Runtime Library Exception, version | |
22 | 3.1, as published by the Free Software Foundation. | |
23 | ||
24 | You should have received a copy of the GNU General Public License and | |
25 | a copy of the GCC Runtime Library Exception along with this program; | |
26 | see the files COPYING3 and COPYING.RUNTIME respectively. If not, see | |
27 | <http://www.gnu.org/licenses/>. */ | |
28 | ||
0a1fe572 | 29 | #include <assert.h> |
ca4c3545 | 30 | #include "openacc.h" |
31 | #include "libgomp.h" | |
32 | #include "oacc-int.h" | |
33 | ||
34 | int | |
35 | acc_async_test (int async) | |
36 | { | |
37 | if (async < acc_async_sync) | |
38 | gomp_fatal ("invalid async argument: %d", async); | |
39 | ||
0a1fe572 | 40 | struct goacc_thread *thr = goacc_thread (); |
41 | ||
42 | if (!thr || !thr->dev) | |
43 | gomp_fatal ("no device active"); | |
44 | ||
45 | return thr->dev->openacc.async_test_func (async); | |
ca4c3545 | 46 | } |
47 | ||
48 | int | |
49 | acc_async_test_all (void) | |
50 | { | |
0a1fe572 | 51 | struct goacc_thread *thr = goacc_thread (); |
52 | ||
53 | if (!thr || !thr->dev) | |
54 | gomp_fatal ("no device active"); | |
55 | ||
56 | return thr->dev->openacc.async_test_all_func (); | |
ca4c3545 | 57 | } |
58 | ||
59 | void | |
60 | acc_wait (int async) | |
61 | { | |
62 | if (async < acc_async_sync) | |
63 | gomp_fatal ("invalid async argument: %d", async); | |
64 | ||
0a1fe572 | 65 | struct goacc_thread *thr = goacc_thread (); |
66 | ||
67 | if (!thr || !thr->dev) | |
68 | gomp_fatal ("no device active"); | |
69 | ||
70 | thr->dev->openacc.async_wait_func (async); | |
ca4c3545 | 71 | } |
72 | ||
73 | void | |
74 | acc_wait_async (int async1, int async2) | |
75 | { | |
0a1fe572 | 76 | struct goacc_thread *thr = goacc_thread (); |
77 | ||
78 | if (!thr || !thr->dev) | |
79 | gomp_fatal ("no device active"); | |
80 | ||
81 | thr->dev->openacc.async_wait_async_func (async1, async2); | |
ca4c3545 | 82 | } |
83 | ||
84 | void | |
85 | acc_wait_all (void) | |
995b27b9 | 86 | { |
0a1fe572 | 87 | struct goacc_thread *thr = goacc_thread (); |
88 | ||
89 | if (!thr || !thr->dev) | |
90 | gomp_fatal ("no device active"); | |
91 | ||
92 | thr->dev->openacc.async_wait_all_func (); | |
ca4c3545 | 93 | } |
995b27b9 | 94 | |
ca4c3545 | 95 | void |
96 | acc_wait_all_async (int async) | |
995b27b9 | 97 | { |
ca4c3545 | 98 | if (async < acc_async_sync) |
99 | gomp_fatal ("invalid async argument: %d", async); | |
995b27b9 | 100 | |
0a1fe572 | 101 | struct goacc_thread *thr = goacc_thread (); |
102 | ||
103 | if (!thr || !thr->dev) | |
104 | gomp_fatal ("no device active"); | |
105 | ||
106 | thr->dev->openacc.async_wait_all_async_func (async); | |
ca4c3545 | 107 | } |