Hi! On Tue, 11 Nov 2014 13:53:23 +0000, Julian Brown <[email protected]> wrote: > On Tue, 23 Sep 2014 19:19:31 +0100 > Julian Brown <[email protected]> wrote: > > This patch contains the bulk of the OpenACC 2.0 runtime support, > > building around, or on top of, the OpenMP 4.0 support (as previously > > posted or already extant upstream) where we could. [...] > > Here is a new version of the OpenACC support patch for libgomp, [...]
> libgomp/
> * libgomp_target.h [...]
> (struct gomp_device_descr): Move here. Add offload_regions_registered,
> openacc dispatch functions, target_data.
> * target.c [...]
> (splay_tree_key_s, gomp_device_descr): Don't declare here.
> --- a/libgomp/libgomp_target.h
> +++ b/libgomp/libgomp_target.h
> +/* This structure describes accelerator device.
> + It contains name of the corresponding libgomp plugin, function handlers
> for
> + interaction with the device, ID-number of the device, and information
> about
> + mapped memory. */
> +struct gomp_device_descr
> +{
> [...]
> + /* Extra information required for a device instance by a given target. */
> + void *target_data;
> +};
Committed to gomp-4_0-branch in r219024:
commit 095199060ff07ddfd0fb5d5c9fecabfe80ed8eed
Author: tschwinge <tschwinge@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Mon Dec 22 17:57:50 2014 +0000
libgomp: Move target_data member from struct gomp_device_descr into struct
acc_dispatch_t.
It is only used with struct acc_dispatch_t's open_device_func and
close_device_func, so specific to OpenACC support.
libgomp/
* libgomp.h (struct gomp_device_descr): Move target_data member...
(struct acc_dispatch_t): ... into here. Change all users.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gomp-4_0-branch@219024
138bc75d-0d04-0410-961f-82ee72b054a4
---
libgomp/ChangeLog.gomp | 3 +++
libgomp/libgomp.h | 6 +++---
libgomp/oacc-init.c | 11 ++++++-----
libgomp/target.c | 2 +-
4 files changed, 13 insertions(+), 9 deletions(-)
diff --git libgomp/ChangeLog.gomp libgomp/ChangeLog.gomp
index 3aa9bf4..4eac98c 100644
--- libgomp/ChangeLog.gomp
+++ libgomp/ChangeLog.gomp
@@ -1,5 +1,8 @@
2014-12-22 Thomas Schwinge <[email protected]>
+ * libgomp.h (struct gomp_device_descr): Move target_data member...
+ (struct acc_dispatch_t): ... into here. Change all users.
+
* target.c (GOMP_target_update): To initialize, call
gomp_init_dev_tables instead of gomp_init_device.
diff --git libgomp/libgomp.h libgomp/libgomp.h
index 866f6ca..ec3c52e 100644
--- libgomp/libgomp.h
+++ libgomp/libgomp.h
@@ -684,6 +684,9 @@ typedef struct acc_dispatch_t
happen out-of-order with respect to mapping. */
struct target_mem_desc *data_environ;
+ /* Extra information required for a device instance by a given target. */
+ void *target_data;
+
/* Open or close a device instance. */
void *(*open_device_func) (int n);
int (*close_device_func) (void *h);
@@ -769,9 +772,6 @@ struct gomp_device_descr
/* Memory-mapping info for this device instance. */
struct gomp_memory_mapping mem_map;
-
- /* Extra information required for a device instance by a given target. */
- void *target_data;
};
extern void gomp_acc_insert_pointer (size_t, void **, size_t *, void *);
diff --git libgomp/oacc-init.c libgomp/oacc-init.c
index ff51856..06039b3 100644
--- libgomp/oacc-init.c
+++ libgomp/oacc-init.c
@@ -279,11 +279,11 @@ lazy_open (int ord)
thr->saved_bound_dev = NULL;
thr->mapped_data = NULL;
- if (!acc_dev->target_data)
- acc_dev->target_data = acc_dev->openacc.open_device_func (ord);
+ if (!acc_dev->openacc.target_data)
+ acc_dev->openacc.target_data = acc_dev->openacc.open_device_func (ord);
thr->target_tls
- = acc_dev->openacc.create_thread_data_func (acc_dev->target_data);
+ = acc_dev->openacc.create_thread_data_func (acc_dev->openacc.target_data);
acc_dev->openacc.async_set_async_func (acc_async_sync);
@@ -344,10 +344,11 @@ acc_shutdown_1 (acc_device_t d)
if (walk->dev)
{
- if (walk->dev->openacc.close_device_func (walk->dev->target_data) <
0)
+ void *target_data = walk->dev->openacc.target_data;
+ if (walk->dev->openacc.close_device_func (target_data) < 0)
gomp_fatal ("failed to close device");
- walk->dev->target_data = NULL;
+ walk->dev->openacc.target_data = target_data = NULL;
gomp_free_memmap (walk->dev);
diff --git libgomp/target.c libgomp/target.c
index 8517a84..bf719f8 100644
--- libgomp/target.c
+++ libgomp/target.c
@@ -1106,8 +1106,8 @@ gomp_target_init (void)
current_device.offload_regions_registered = false;
current_device.mem_map.splay_tree.root = NULL;
current_device.mem_map.is_initialized = false;
- current_device.target_data = NULL;
current_device.openacc.data_environ = NULL;
+ current_device.openacc.target_data = NULL;
for (i = 0; i < new_num_devices; i++)
{
current_device.id = num_devices + 1;
Grüße,
Thomas
signature.asc
Description: PGP signature
