]> git.ipfire.org Git - thirdparty/gcc.git/blame - libgomp/openacc.h
Filter out LTO in config/bootstrap-lto-lean.mk.
[thirdparty/gcc.git] / libgomp / openacc.h
CommitLineData
ca4c3545 1/* OpenACC Runtime Library User-facing Declarations
2
fbd26352 3 Copyright (C) 2013-2019 Free Software Foundation, Inc.
ca4c3545 4
5 Contributed by Mentor Embedded.
6
7 This file is part of the GNU Offloading and Multi Processing Library
8 (libgomp).
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
29#ifndef _OPENACC_H
30#define _OPENACC_H 1
31
32/* The OpenACC standard is silent on whether or not including <openacc.h>
33 might or must not include other header files. We chose to include
34 some. */
35#include <stddef.h>
36
37#ifdef __cplusplus
38extern "C" {
39#endif
40
41#if __cplusplus >= 201103
4a850eb7 42# define __GOACC_NOTHROW noexcept
ca4c3545 43#elif __cplusplus
44# define __GOACC_NOTHROW throw ()
45#else /* Not C++ */
46# define __GOACC_NOTHROW __attribute__ ((__nothrow__))
47#endif
48
49/* Types */
da6fe896 50typedef enum acc_device_t {
51 /* Keep in sync with include/gomp-constants.h. */
52 acc_device_none = 0,
53 acc_device_default = 1,
54 acc_device_host = 2,
55 /* acc_device_host_nonshm = 3 removed. */
56 acc_device_not_host = 4,
57 acc_device_nvidia = 5,
58 _ACC_device_hwm,
59 /* Ensure enumeration is layout compatible with int. */
60 _ACC_highest = __INT_MAX__,
61 _ACC_neg = -1
62} acc_device_t;
63
64typedef enum acc_async_t {
65 /* Keep in sync with include/gomp-constants.h. */
66 acc_async_noval = -1,
67 acc_async_sync = -2
68} acc_async_t;
ca4c3545 69
70int acc_get_num_devices (acc_device_t) __GOACC_NOTHROW;
71void acc_set_device_type (acc_device_t) __GOACC_NOTHROW;
72acc_device_t acc_get_device_type (void) __GOACC_NOTHROW;
73void acc_set_device_num (int, acc_device_t) __GOACC_NOTHROW;
74int acc_get_device_num (acc_device_t) __GOACC_NOTHROW;
75int acc_async_test (int) __GOACC_NOTHROW;
76int acc_async_test_all (void) __GOACC_NOTHROW;
77void acc_wait (int) __GOACC_NOTHROW;
0e1c7764 78void acc_async_wait (int) __GOACC_NOTHROW;
ca4c3545 79void acc_wait_async (int, int) __GOACC_NOTHROW;
80void acc_wait_all (void) __GOACC_NOTHROW;
0e1c7764 81void acc_async_wait_all (void) __GOACC_NOTHROW;
ca4c3545 82void acc_wait_all_async (int) __GOACC_NOTHROW;
83void acc_init (acc_device_t) __GOACC_NOTHROW;
84void acc_shutdown (acc_device_t) __GOACC_NOTHROW;
da6fe896 85#ifdef __cplusplus
86int acc_on_device (int __arg) __GOACC_NOTHROW;
87#else
88int acc_on_device (acc_device_t __arg) __GOACC_NOTHROW;
89#endif
ca4c3545 90void *acc_malloc (size_t) __GOACC_NOTHROW;
91void acc_free (void *) __GOACC_NOTHROW;
92/* Some of these would be more correct with const qualifiers, but
93 the standard specifies otherwise. */
94void *acc_copyin (void *, size_t) __GOACC_NOTHROW;
95void *acc_present_or_copyin (void *, size_t) __GOACC_NOTHROW;
e4d15e02 96void *acc_pcopyin (void *, size_t) __GOACC_NOTHROW;
ca4c3545 97void *acc_create (void *, size_t) __GOACC_NOTHROW;
98void *acc_present_or_create (void *, size_t) __GOACC_NOTHROW;
e4d15e02 99void *acc_pcreate (void *, size_t) __GOACC_NOTHROW;
ca4c3545 100void acc_copyout (void *, size_t) __GOACC_NOTHROW;
101void acc_delete (void *, size_t) __GOACC_NOTHROW;
102void acc_update_device (void *, size_t) __GOACC_NOTHROW;
103void acc_update_self (void *, size_t) __GOACC_NOTHROW;
104void acc_map_data (void *, void *, size_t) __GOACC_NOTHROW;
105void acc_unmap_data (void *) __GOACC_NOTHROW;
106void *acc_deviceptr (void *) __GOACC_NOTHROW;
107void *acc_hostptr (void *) __GOACC_NOTHROW;
108int acc_is_present (void *, size_t) __GOACC_NOTHROW;
109void acc_memcpy_to_device (void *, void *, size_t) __GOACC_NOTHROW;
110void acc_memcpy_from_device (void *, void *, size_t) __GOACC_NOTHROW;
111
737cc978 112/* Finalize versions of copyout/delete functions, specified in OpenACC 2.5. */
113void acc_copyout_finalize (void *, size_t) __GOACC_NOTHROW;
114void acc_copyout_finalize_async (void *, size_t, int) __GOACC_NOTHROW;
115void acc_delete_finalize (void *, size_t) __GOACC_NOTHROW;
116void acc_delete_finalize_async (void *, size_t, int) __GOACC_NOTHROW;
117
2e51c6a2 118/* Async functions, specified in OpenACC 2.5. */
119void acc_copyin_async (void *, size_t, int) __GOACC_NOTHROW;
120void acc_create_async (void *, size_t, int) __GOACC_NOTHROW;
121void acc_copyout_async (void *, size_t, int) __GOACC_NOTHROW;
122void acc_delete_async (void *, size_t, int) __GOACC_NOTHROW;
123void acc_update_device_async (void *, size_t, int) __GOACC_NOTHROW;
124void acc_update_self_async (void *, size_t, int) __GOACC_NOTHROW;
125void acc_memcpy_to_device_async (void *, void *, size_t, int) __GOACC_NOTHROW;
126void acc_memcpy_from_device_async (void *, void *, size_t, int) __GOACC_NOTHROW;
127
ca4c3545 128/* CUDA-specific routines. */
129void *acc_get_current_cuda_device (void) __GOACC_NOTHROW;
130void *acc_get_current_cuda_context (void) __GOACC_NOTHROW;
131void *acc_get_cuda_stream (int) __GOACC_NOTHROW;
132int acc_set_cuda_stream (int, void *) __GOACC_NOTHROW;
133
134#ifdef __cplusplus
135}
da6fe896 136
137/* Forwarding function with correctly typed arg. */
138
1d1e4d6b 139#pragma acc routine seq
da6fe896 140inline int acc_on_device (acc_device_t __arg) __GOACC_NOTHROW
141{
142 return acc_on_device ((int) __arg);
143}
ca4c3545 144#endif
145
146#endif /* _OPENACC_H */