1 /* OpenACC Runtime Library: acc_device_host.
3 Copyright (C) 2013-2015 Free Software Foundation, Inc.
5 Contributed by Mentor Embedded.
7 This file is part of the GNU Offloading and Multi Processing Library
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)
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
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.
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/>. */
31 #include "gomp-constants.h"
37 static struct gomp_device_descr host_dispatch
;
42 return host_dispatch
.name
;
48 return host_dispatch
.capabilities
;
54 return host_dispatch
.type
;
58 host_get_num_devices (void)
64 host_init_device (int n
__attribute__ ((unused
)))
69 host_fini_device (int n
__attribute__ ((unused
)))
80 host_load_image (int n
__attribute__ ((unused
)),
81 unsigned v
__attribute__ ((unused
)),
82 const void *t
__attribute__ ((unused
)),
83 struct addr_pair
**r
__attribute__ ((unused
)))
89 host_unload_image (int n
__attribute__ ((unused
)),
90 unsigned v
__attribute__ ((unused
)),
91 const void *t
__attribute__ ((unused
)))
96 host_alloc (int n
__attribute__ ((unused
)), size_t s
)
98 return gomp_malloc (s
);
102 host_free (int n
__attribute__ ((unused
)), void *p
)
108 host_dev2host (int n
__attribute__ ((unused
)),
109 void *h
__attribute__ ((unused
)),
110 const void *d
__attribute__ ((unused
)),
111 size_t s
__attribute__ ((unused
)))
117 host_host2dev (int n
__attribute__ ((unused
)),
118 void *d
__attribute__ ((unused
)),
119 const void *h
__attribute__ ((unused
)),
120 size_t s
__attribute__ ((unused
)))
126 host_run (int n
__attribute__ ((unused
)), void *fn_ptr
, void *vars
)
128 void (*fn
)(void *) = (void (*)(void *)) fn_ptr
;
134 host_openacc_exec (void (*fn
) (void *),
135 size_t mapnum
__attribute__ ((unused
)),
137 void **devaddrs
__attribute__ ((unused
)),
138 size_t *sizes
__attribute__ ((unused
)),
139 unsigned short *kinds
__attribute__ ((unused
)),
140 int num_gangs
__attribute__ ((unused
)),
141 int num_workers
__attribute__ ((unused
)),
142 int vector_length
__attribute__ ((unused
)),
143 int async
__attribute__ ((unused
)),
144 void *targ_mem_desc
__attribute__ ((unused
)))
150 host_openacc_register_async_cleanup (void *targ_mem_desc
__attribute__ ((unused
)))
155 host_openacc_async_test (int async
__attribute__ ((unused
)))
161 host_openacc_async_test_all (void)
167 host_openacc_async_wait (int async
__attribute__ ((unused
)))
172 host_openacc_async_wait_async (int async1
__attribute__ ((unused
)),
173 int async2
__attribute__ ((unused
)))
178 host_openacc_async_wait_all (void)
183 host_openacc_async_wait_all_async (int async
__attribute__ ((unused
)))
188 host_openacc_async_set_async (int async
__attribute__ ((unused
)))
193 host_openacc_create_thread_data (int ord
__attribute__ ((unused
)))
199 host_openacc_destroy_thread_data (void *tls_data
__attribute__ ((unused
)))
203 static struct gomp_device_descr host_dispatch
=
206 .capabilities
= (GOMP_OFFLOAD_CAP_SHARED_MEM
207 | GOMP_OFFLOAD_CAP_NATIVE_EXEC
208 | GOMP_OFFLOAD_CAP_OPENACC_200
),
210 .type
= OFFLOAD_TARGET_TYPE_HOST
,
212 .get_name_func
= host_get_name
,
213 .get_caps_func
= host_get_caps
,
214 .get_type_func
= host_get_type
,
215 .get_num_devices_func
= host_get_num_devices
,
216 .init_device_func
= host_init_device
,
217 .fini_device_func
= host_fini_device
,
218 .version_func
= host_version
,
219 .load_image_func
= host_load_image
,
220 .unload_image_func
= host_unload_image
,
221 .alloc_func
= host_alloc
,
222 .free_func
= host_free
,
223 .dev2host_func
= host_dev2host
,
224 .host2dev_func
= host_host2dev
,
225 .run_func
= host_run
,
228 /* .lock initilized in goacc_host_init. */
229 .is_initialized
= false,
232 .data_environ
= NULL
,
234 .exec_func
= host_openacc_exec
,
236 .register_async_cleanup_func
= host_openacc_register_async_cleanup
,
238 .async_test_func
= host_openacc_async_test
,
239 .async_test_all_func
= host_openacc_async_test_all
,
240 .async_wait_func
= host_openacc_async_wait
,
241 .async_wait_async_func
= host_openacc_async_wait_async
,
242 .async_wait_all_func
= host_openacc_async_wait_all
,
243 .async_wait_all_async_func
= host_openacc_async_wait_all_async
,
244 .async_set_async_func
= host_openacc_async_set_async
,
246 .create_thread_data_func
= host_openacc_create_thread_data
,
247 .destroy_thread_data_func
= host_openacc_destroy_thread_data
,
250 .get_current_device_func
= NULL
,
251 .get_current_context_func
= NULL
,
252 .get_stream_func
= NULL
,
253 .set_stream_func
= NULL
,
258 /* Initialize and register this device type. */
259 static __attribute__ ((constructor
)) void
260 goacc_host_init (void)
262 gomp_mutex_init (&host_dispatch
.lock
);
263 goacc_register (&host_dispatch
);