diff mbox series

[3/7,libgomp,nvptx] Add device number to GOMP_OFFLOAD_openacc_async_construct

Message ID 10223858482c0dbcfa974b49678648d18a2dafea.1573560401.git.ams@codesourcery.com
State New
Headers show
Series AMD GCN Offloading Support | expand

Commit Message

Andrew Stubbs Nov. 12, 2019, 1:29 p.m. UTC
This patch is preparatory for the amdgcn plugin.  The current
implementation was written for CUDA in which the device associated with
the queue is inferred by some hidden magic (which seems questionable to
me but then I don't fully understand it).  The GCN plugin needs to know
for which device the queue is intended, so this simply provides that
information to the queue constructor.

OK to commit?

Thanks

Andrew


2019-11-12  Andrew Stubbs  <ams@codesourcery.com>

	libgomp/
	* libgomp-plugin.h (GOMP_OFFLOAD_openacc_async_construct): Add int
	parameter.
	* oacc-async.c (lookup_goacc_asyncqueue): Pass device number to the
	queue constructor.
	* oacc-host.c (host_openacc_async_construct): Add device parameter.
	* plugin/plugin-nvptx.c (GOMP_OFFLOAD_openacc_async_construct): Add
	device parameter.
---
 libgomp/libgomp-plugin.h      | 2 +-
 libgomp/oacc-async.c          | 3 ++-
 libgomp/oacc-host.c           | 2 +-
 libgomp/plugin/plugin-nvptx.c | 2 +-
 4 files changed, 5 insertions(+), 4 deletions(-)

Comments

Jakub Jelinek Nov. 12, 2019, 1:43 p.m. UTC | #1
On Tue, Nov 12, 2019 at 01:29:12PM +0000, Andrew Stubbs wrote:
> 2019-11-12  Andrew Stubbs  <ams@codesourcery.com>
> 
> 	libgomp/
> 	* libgomp-plugin.h (GOMP_OFFLOAD_openacc_async_construct): Add int
> 	parameter.
> 	* oacc-async.c (lookup_goacc_asyncqueue): Pass device number to the
> 	queue constructor.
> 	* oacc-host.c (host_openacc_async_construct): Add device parameter.
> 	* plugin/plugin-nvptx.c (GOMP_OFFLOAD_openacc_async_construct): Add
> 	device parameter.

LGTM.

	Jakub
diff mbox series

Patch

diff --git a/libgomp/libgomp-plugin.h b/libgomp/libgomp-plugin.h
index 01483f27f4c..de969e1ba45 100644
--- a/libgomp/libgomp-plugin.h
+++ b/libgomp/libgomp-plugin.h
@@ -112,7 +112,7 @@  extern void GOMP_OFFLOAD_openacc_exec (void (*) (void *), size_t, void **,
 				       void **, unsigned *, void *);
 extern void *GOMP_OFFLOAD_openacc_create_thread_data (int);
 extern void GOMP_OFFLOAD_openacc_destroy_thread_data (void *);
-extern struct goacc_asyncqueue *GOMP_OFFLOAD_openacc_async_construct (void);
+extern struct goacc_asyncqueue *GOMP_OFFLOAD_openacc_async_construct (int);
 extern bool GOMP_OFFLOAD_openacc_async_destruct (struct goacc_asyncqueue *);
 extern int GOMP_OFFLOAD_openacc_async_test (struct goacc_asyncqueue *);
 extern bool GOMP_OFFLOAD_openacc_async_synchronize (struct goacc_asyncqueue *);
diff --git a/libgomp/oacc-async.c b/libgomp/oacc-async.c
index 1760e8c90c6..2b24ae7adc2 100644
--- a/libgomp/oacc-async.c
+++ b/libgomp/oacc-async.c
@@ -100,7 +100,8 @@  lookup_goacc_asyncqueue (struct goacc_thread *thr, bool create, int async)
 
   if (!dev->openacc.async.asyncqueue[async])
     {
-      dev->openacc.async.asyncqueue[async] = dev->openacc.async.construct_func ();
+      dev->openacc.async.asyncqueue[async]
+	= dev->openacc.async.construct_func (dev->target_id);
 
       if (!dev->openacc.async.asyncqueue[async])
 	{
diff --git a/libgomp/oacc-host.c b/libgomp/oacc-host.c
index 12299aee65d..cbcac9bf7b3 100644
--- a/libgomp/oacc-host.c
+++ b/libgomp/oacc-host.c
@@ -211,7 +211,7 @@  host_openacc_async_queue_callback (struct goacc_asyncqueue *aq
 }
 
 static struct goacc_asyncqueue *
-host_openacc_async_construct (void)
+host_openacc_async_construct (int device __attribute__((unused)))
 {
   /* Non-NULL 0xffff... value as opaque dummy.  */
   return (struct goacc_asyncqueue *) -1;
diff --git a/libgomp/plugin/plugin-nvptx.c b/libgomp/plugin/plugin-nvptx.c
index 9e088612b44..911d0f66a6e 100644
--- a/libgomp/plugin/plugin-nvptx.c
+++ b/libgomp/plugin/plugin-nvptx.c
@@ -1575,7 +1575,7 @@  GOMP_OFFLOAD_openacc_cuda_set_stream (struct goacc_asyncqueue *aq, void *stream)
 }
 
 struct goacc_asyncqueue *
-GOMP_OFFLOAD_openacc_async_construct (void)
+GOMP_OFFLOAD_openacc_async_construct (int device __attribute__((unused)))
 {
   CUstream stream = NULL;
   CUDA_CALL_ERET (NULL, cuStreamCreate, &stream, CU_STREAM_DEFAULT);