oacc-host.c revision 1.1.1.2
1/* OpenACC Runtime Library: acc_device_host. 2 3 Copyright (C) 2013-2016 Free Software Foundation, Inc. 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#include "libgomp.h" 30#include "oacc-int.h" 31#include "gomp-constants.h" 32 33#include <stdbool.h> 34#include <stddef.h> 35#include <stdint.h> 36 37static struct gomp_device_descr host_dispatch; 38 39static const char * 40host_get_name (void) 41{ 42 return host_dispatch.name; 43} 44 45static unsigned int 46host_get_caps (void) 47{ 48 return host_dispatch.capabilities; 49} 50 51static int 52host_get_type (void) 53{ 54 return host_dispatch.type; 55} 56 57static int 58host_get_num_devices (void) 59{ 60 return 1; 61} 62 63static void 64host_init_device (int n __attribute__ ((unused))) 65{ 66} 67 68static void 69host_fini_device (int n __attribute__ ((unused))) 70{ 71} 72 73static unsigned 74host_version (void) 75{ 76 return GOMP_VERSION; 77} 78 79static int 80host_load_image (int n __attribute__ ((unused)), 81 unsigned v __attribute__ ((unused)), 82 const void *t __attribute__ ((unused)), 83 struct addr_pair **r __attribute__ ((unused))) 84{ 85 return 0; 86} 87 88static void 89host_unload_image (int n __attribute__ ((unused)), 90 unsigned v __attribute__ ((unused)), 91 const void *t __attribute__ ((unused))) 92{ 93} 94 95static void * 96host_alloc (int n __attribute__ ((unused)), size_t s) 97{ 98 return gomp_malloc (s); 99} 100 101static void 102host_free (int n __attribute__ ((unused)), void *p) 103{ 104 free (p); 105} 106 107static void * 108host_dev2host (int n __attribute__ ((unused)), 109 void *h __attribute__ ((unused)), 110 const void *d __attribute__ ((unused)), 111 size_t s __attribute__ ((unused))) 112{ 113 return NULL; 114} 115 116static void * 117host_host2dev (int n __attribute__ ((unused)), 118 void *d __attribute__ ((unused)), 119 const void *h __attribute__ ((unused)), 120 size_t s __attribute__ ((unused))) 121{ 122 return NULL; 123} 124 125static void 126host_run (int n __attribute__ ((unused)), void *fn_ptr, void *vars, 127 void **args __attribute__((unused))) 128{ 129 void (*fn)(void *) = (void (*)(void *)) fn_ptr; 130 131 fn (vars); 132} 133 134static void 135host_openacc_exec (void (*fn) (void *), 136 size_t mapnum __attribute__ ((unused)), 137 void **hostaddrs, 138 void **devaddrs __attribute__ ((unused)), 139 int async __attribute__ ((unused)), 140 unsigned *dims __attribute ((unused)), 141 void *targ_mem_desc __attribute__ ((unused))) 142{ 143 fn (hostaddrs); 144} 145 146static void 147host_openacc_register_async_cleanup (void *targ_mem_desc __attribute__ ((unused))) 148{ 149} 150 151static int 152host_openacc_async_test (int async __attribute__ ((unused))) 153{ 154 return 1; 155} 156 157static int 158host_openacc_async_test_all (void) 159{ 160 return 1; 161} 162 163static void 164host_openacc_async_wait (int async __attribute__ ((unused))) 165{ 166} 167 168static void 169host_openacc_async_wait_async (int async1 __attribute__ ((unused)), 170 int async2 __attribute__ ((unused))) 171{ 172} 173 174static void 175host_openacc_async_wait_all (void) 176{ 177} 178 179static void 180host_openacc_async_wait_all_async (int async __attribute__ ((unused))) 181{ 182} 183 184static void 185host_openacc_async_set_async (int async __attribute__ ((unused))) 186{ 187} 188 189static void * 190host_openacc_create_thread_data (int ord __attribute__ ((unused))) 191{ 192 return NULL; 193} 194 195static void 196host_openacc_destroy_thread_data (void *tls_data __attribute__ ((unused))) 197{ 198} 199 200static struct gomp_device_descr host_dispatch = 201 { 202 .name = "host", 203 .capabilities = (GOMP_OFFLOAD_CAP_SHARED_MEM 204 | GOMP_OFFLOAD_CAP_NATIVE_EXEC 205 | GOMP_OFFLOAD_CAP_OPENACC_200), 206 .target_id = 0, 207 .type = OFFLOAD_TARGET_TYPE_HOST, 208 209 .get_name_func = host_get_name, 210 .get_caps_func = host_get_caps, 211 .get_type_func = host_get_type, 212 .get_num_devices_func = host_get_num_devices, 213 .init_device_func = host_init_device, 214 .fini_device_func = host_fini_device, 215 .version_func = host_version, 216 .load_image_func = host_load_image, 217 .unload_image_func = host_unload_image, 218 .alloc_func = host_alloc, 219 .free_func = host_free, 220 .dev2host_func = host_dev2host, 221 .host2dev_func = host_host2dev, 222 .run_func = host_run, 223 224 .mem_map = { NULL }, 225 /* .lock initilized in goacc_host_init. */ 226 .state = GOMP_DEVICE_UNINITIALIZED, 227 228 .openacc = { 229 .data_environ = NULL, 230 231 .exec_func = host_openacc_exec, 232 233 .register_async_cleanup_func = host_openacc_register_async_cleanup, 234 235 .async_test_func = host_openacc_async_test, 236 .async_test_all_func = host_openacc_async_test_all, 237 .async_wait_func = host_openacc_async_wait, 238 .async_wait_async_func = host_openacc_async_wait_async, 239 .async_wait_all_func = host_openacc_async_wait_all, 240 .async_wait_all_async_func = host_openacc_async_wait_all_async, 241 .async_set_async_func = host_openacc_async_set_async, 242 243 .create_thread_data_func = host_openacc_create_thread_data, 244 .destroy_thread_data_func = host_openacc_destroy_thread_data, 245 246 .cuda = { 247 .get_current_device_func = NULL, 248 .get_current_context_func = NULL, 249 .get_stream_func = NULL, 250 .set_stream_func = NULL, 251 } 252 } 253 }; 254 255/* Initialize and register this device type. */ 256void 257goacc_host_init (void) 258{ 259 gomp_mutex_init (&host_dispatch.lock); 260 goacc_register (&host_dispatch); 261} 262