summaryrefslogtreecommitdiff
path: root/libgomp/oacc-host.c
diff options
context:
space:
mode:
authortschwinge <tschwinge@138bc75d-0d04-0410-961f-82ee72b054a4>2015-08-10 16:48:26 +0000
committertschwinge <tschwinge@138bc75d-0d04-0410-961f-82ee72b054a4>2015-08-10 16:48:26 +0000
commitf212338e41d10436a48f04ea499f63dce5bf50ef (patch)
tree5b850fb18324259a3fae0131aac6dfa6b6f028fc /libgomp/oacc-host.c
parentfdcd05c84f79cec55fa61249febd4c1c21b772a7 (diff)
downloadgcc-f212338e41d10436a48f04ea499f63dce5bf50ef.tar.gz
[PR libgomp/65742, PR middle-end/66332] libgomp: Remove plugin for non-shared memory host execution
gcc/ * builtins.c (expand_builtin_acc_on_device) [ACCEL_COMPILER]: Emit open-coded sequence. * omp-low.c (oacc_process_reduction_data): Remove handline of GOMP_DEVICE_HOST_NONSHM. gcc/testsuite/ * c-c++-common/goacc/acc_on_device-2.c: Remove XFAIL for C. include/ * gomp-constants.c (GOMP_DEVICE_HOST_NONSHM): Remove. libgomp/ * libgomp-plugin.h (enum offload_target_type): Remove OFFLOAD_TARGET_TYPE_HOST_NONSHM. * openacc.f90 (openacc_kinds): Remove acc_device_host_nonshm. * openacc.h (enum acc_device_t): Likewise. * openacc_lib.h: Likewise. * oacc-init.c (name_of_acc_device_t): Don't handle it. (acc_on_device): Just use __builtin_acc_on_device. * testsuite/libgomp.oacc-c-c++-common/if-1.c: Don't forbid usage of acc_on_device builtin. * plugin/plugin-host.h: Remove file. * plugin/plugin-host.c: Likewise, but salvage some content into... * oacc-host.c: ... this file. * plugin/Makefrag.am: Don't build libgomp-plugin-host_nonshm.la. * plugin/configfrag.ac (offload_targets): Don't add host_nonshm. * Makefile.in: Regenerate. * configure: Likewise. * testsuite/lib/libgomp.exp (check_effective_target_openacc_host_nonshm_selected): Remove. * testsuite/libgomp.oacc-c++/c++.exp: Don't handle ACC_DEVICE_TYPE=host_nonshm. * testsuite/libgomp.oacc-c/c.exp: Likewise. * testsuite/libgomp.oacc-fortran/fortran.exp: Likewise. * testsuite/libgomp.oacc-c-c++-common/acc_on_device-1.c: Likewise. * testsuite/libgomp.oacc-fortran/acc_on_device-1-1.f90: Likewise. * testsuite/libgomp.oacc-fortran/acc_on_device-1-2.f: Likewise. * testsuite/libgomp.oacc-fortran/acc_on_device-1-3.f: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@226763 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgomp/oacc-host.c')
-rw-r--r--libgomp/oacc-host.c232
1 files changed, 198 insertions, 34 deletions
diff --git a/libgomp/oacc-host.c b/libgomp/oacc-host.c
index 6dcdbf3658e..17a5102042b 100644
--- a/libgomp/oacc-host.c
+++ b/libgomp/oacc-host.c
@@ -26,51 +26,215 @@
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
<http://www.gnu.org/licenses/>. */
-/* This shares much of the implementation of the plugin-host.c "host_nonshm"
- plugin. */
-#include "plugin/plugin-host.c"
+#include "libgomp.h"
+#include "oacc-int.h"
+
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+
+static struct gomp_device_descr host_dispatch;
+
+static const char *
+host_get_name (void)
+{
+ return host_dispatch.name;
+}
+
+static unsigned int
+host_get_caps (void)
+{
+ return host_dispatch.capabilities;
+}
+
+static int
+host_get_type (void)
+{
+ return host_dispatch.type;
+}
+
+static int
+host_get_num_devices (void)
+{
+ return 1;
+}
+
+static void
+host_init_device (int n __attribute__ ((unused)))
+{
+}
+
+static void
+host_fini_device (int n __attribute__ ((unused)))
+{
+}
+
+static int
+host_load_image (int n __attribute__ ((unused)),
+ const void *t __attribute__ ((unused)),
+ struct addr_pair **r __attribute__ ((unused)))
+{
+ return 0;
+}
+
+static void
+host_unload_image (int n __attribute__ ((unused)),
+ const void *t __attribute__ ((unused)))
+{
+}
+
+static void *
+host_alloc (int n __attribute__ ((unused)), size_t s)
+{
+ return gomp_malloc (s);
+}
+
+static void
+host_free (int n __attribute__ ((unused)), void *p)
+{
+ free (p);
+}
+
+static void *
+host_dev2host (int n __attribute__ ((unused)),
+ void *h __attribute__ ((unused)),
+ const void *d __attribute__ ((unused)),
+ size_t s __attribute__ ((unused)))
+{
+ return NULL;
+}
+
+static void *
+host_host2dev (int n __attribute__ ((unused)),
+ void *d __attribute__ ((unused)),
+ const void *h __attribute__ ((unused)),
+ size_t s __attribute__ ((unused)))
+{
+ return NULL;
+}
+
+static void
+host_run (int n __attribute__ ((unused)), void *fn_ptr, void *vars)
+{
+ void (*fn)(void *) = (void (*)(void *)) fn_ptr;
+
+ fn (vars);
+}
+
+static void
+host_openacc_exec (void (*fn) (void *),
+ size_t mapnum __attribute__ ((unused)),
+ void **hostaddrs,
+ void **devaddrs __attribute__ ((unused)),
+ size_t *sizes __attribute__ ((unused)),
+ unsigned short *kinds __attribute__ ((unused)),
+ int num_gangs __attribute__ ((unused)),
+ int num_workers __attribute__ ((unused)),
+ int vector_length __attribute__ ((unused)),
+ int async __attribute__ ((unused)),
+ void *targ_mem_desc __attribute__ ((unused)))
+{
+ fn (hostaddrs);
+}
+
+static void
+host_openacc_register_async_cleanup (void *targ_mem_desc __attribute__ ((unused)))
+{
+}
+
+static int
+host_openacc_async_test (int async __attribute__ ((unused)))
+{
+ return 1;
+}
+
+static int
+host_openacc_async_test_all (void)
+{
+ return 1;
+}
+
+static void
+host_openacc_async_wait (int async __attribute__ ((unused)))
+{
+}
+
+static void
+host_openacc_async_wait_async (int async1 __attribute__ ((unused)),
+ int async2 __attribute__ ((unused)))
+{
+}
+
+static void
+host_openacc_async_wait_all (void)
+{
+}
+
+static void
+host_openacc_async_wait_all_async (int async __attribute__ ((unused)))
+{
+}
+
+static void
+host_openacc_async_set_async (int async __attribute__ ((unused)))
+{
+}
+
+static void *
+host_openacc_create_thread_data (int ord __attribute__ ((unused)))
+{
+ return NULL;
+}
+
+static void
+host_openacc_destroy_thread_data (void *tls_data __attribute__ ((unused)))
+{
+}
static struct gomp_device_descr host_dispatch =
{
.name = "host",
- .capabilities = (GOMP_OFFLOAD_CAP_OPENACC_200
+ .capabilities = (GOMP_OFFLOAD_CAP_SHARED_MEM
| GOMP_OFFLOAD_CAP_NATIVE_EXEC
- | GOMP_OFFLOAD_CAP_SHARED_MEM),
+ | GOMP_OFFLOAD_CAP_OPENACC_200),
.target_id = 0,
.type = OFFLOAD_TARGET_TYPE_HOST,
- .get_name_func = GOMP_OFFLOAD_get_name,
- .get_caps_func = GOMP_OFFLOAD_get_caps,
- .get_type_func = GOMP_OFFLOAD_get_type,
- .get_num_devices_func = GOMP_OFFLOAD_get_num_devices,
- .init_device_func = GOMP_OFFLOAD_init_device,
- .fini_device_func = GOMP_OFFLOAD_fini_device,
- .load_image_func = GOMP_OFFLOAD_load_image,
- .unload_image_func = GOMP_OFFLOAD_unload_image,
- .alloc_func = GOMP_OFFLOAD_alloc,
- .free_func = GOMP_OFFLOAD_free,
- .dev2host_func = GOMP_OFFLOAD_dev2host,
- .host2dev_func = GOMP_OFFLOAD_host2dev,
- .run_func = GOMP_OFFLOAD_run,
-
+ .get_name_func = host_get_name,
+ .get_caps_func = host_get_caps,
+ .get_type_func = host_get_type,
+ .get_num_devices_func = host_get_num_devices,
+ .init_device_func = host_init_device,
+ .fini_device_func = host_fini_device,
+ .load_image_func = host_load_image,
+ .unload_image_func = host_unload_image,
+ .alloc_func = host_alloc,
+ .free_func = host_free,
+ .dev2host_func = host_dev2host,
+ .host2dev_func = host_host2dev,
+ .run_func = host_run,
+
+ .mem_map = { NULL },
+ /* .lock initilized in goacc_host_init. */
.is_initialized = false,
.openacc = {
- .exec_func = GOMP_OFFLOAD_openacc_parallel,
+ .data_environ = NULL,
+
+ .exec_func = host_openacc_exec,
- .register_async_cleanup_func
- = GOMP_OFFLOAD_openacc_register_async_cleanup,
+ .register_async_cleanup_func = host_openacc_register_async_cleanup,
- .async_set_async_func = GOMP_OFFLOAD_openacc_async_set_async,
- .async_test_func = GOMP_OFFLOAD_openacc_async_test,
- .async_test_all_func = GOMP_OFFLOAD_openacc_async_test_all,
- .async_wait_func = GOMP_OFFLOAD_openacc_async_wait,
- .async_wait_async_func = GOMP_OFFLOAD_openacc_async_wait_async,
- .async_wait_all_func = GOMP_OFFLOAD_openacc_async_wait_all,
- .async_wait_all_async_func = GOMP_OFFLOAD_openacc_async_wait_all_async,
+ .async_test_func = host_openacc_async_test,
+ .async_test_all_func = host_openacc_async_test_all,
+ .async_wait_func = host_openacc_async_wait,
+ .async_wait_async_func = host_openacc_async_wait_async,
+ .async_wait_all_func = host_openacc_async_wait_all,
+ .async_wait_all_async_func = host_openacc_async_wait_all_async,
+ .async_set_async_func = host_openacc_async_set_async,
- .create_thread_data_func = GOMP_OFFLOAD_openacc_create_thread_data,
- .destroy_thread_data_func = GOMP_OFFLOAD_openacc_destroy_thread_data,
+ .create_thread_data_func = host_openacc_create_thread_data,
+ .destroy_thread_data_func = host_openacc_destroy_thread_data,
.cuda = {
.get_current_device_func = NULL,
@@ -81,9 +245,9 @@ static struct gomp_device_descr host_dispatch =
}
};
-/* Register this device type. */
-static __attribute__ ((constructor))
-void goacc_host_init (void)
+/* Initialize and register this device type. */
+static __attribute__ ((constructor)) void
+goacc_host_init (void)
{
gomp_mutex_init (&host_dispatch.lock);
goacc_register (&host_dispatch);