This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Properly assign to packet header (PR hsa/70394)
- From: Martin LiÅka <mliska at suse dot cz>
- To: gcc-patches at gcc dot gnu dot org
- Cc: Martin Jambor <mjambor at suse dot cz>
- Date: Thu, 24 Mar 2016 12:48:34 +0100
- Subject: [PATCH] Properly assign to packet header (PR hsa/70394)
- Authentication-results: sourceware.org; auth=none
Hello.
Following patch initializes whole packet->header field, which is eventually stored
to a packet in atomic manner. The function mechanism was adopted from the HSA runtime
manual.
I've been running bootstrap and regression tests.
Ready to be installed after it finishes?
Thanks,
Martin
libgomp/ChangeLog:
2016-03-24 Martin Liska <mliska@suse.cz>
* plugin/plugin-hsa.c (packet_store_release): New function
that is taken from the HSA runtime manual.
(GOMP_OFFLOAD_run): Use the function.
---
libgomp/plugin/plugin-hsa.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/libgomp/plugin/plugin-hsa.c b/libgomp/plugin/plugin-hsa.c
index f7ef600..0b3b67a 100644
--- a/libgomp/plugin/plugin-hsa.c
+++ b/libgomp/plugin/plugin-hsa.c
@@ -1185,6 +1185,14 @@ failure:
return false;
}
+/* Atomically store pair of uint16_t values (HEADER and REST) to a PACKET. */
+
+void
+packet_store_release (uint32_t* packet, uint16_t header, uint16_t rest)
+{
+ __atomic_store_n (packet, header | (rest << 16), __ATOMIC_RELEASE);
+}
+
/* Part of the libgomp plugin interface. Run a kernel on device N and pass it
an array of pointers in VARS as a parameter. The kernel is identified by
FN_PTR which must point to a kernel_info structure. */
@@ -1232,7 +1240,6 @@ GOMP_OFFLOAD_run (int n, void *fn_ptr, void *vars, void **args)
+ index % agent->command_q->size;
memset (((uint8_t *) packet) + 4, 0, sizeof (*packet) - 4);
- packet->setup |= (uint16_t) 1 << HSA_KERNEL_DISPATCH_PACKET_SETUP_DIMENSIONS;
packet->grid_size_x = kla->gdims[0];
uint32_t wgs = kla->wdims[0];
if (wgs == 0)
@@ -1275,7 +1282,9 @@ GOMP_OFFLOAD_run (int n, void *fn_ptr, void *vars, void **args)
HSA_DEBUG ("Going to dispatch kernel %s\n", kernel->name);
- __atomic_store_n ((uint16_t *) (&packet->header), header, __ATOMIC_RELEASE);
+ packet_store_release ((uint32_t *) packet, header,
+ 1 << HSA_KERNEL_DISPATCH_PACKET_SETUP_DIMENSIONS);
+
hsa_signal_store_release (agent->command_q->doorbell_signal, index);
/* TODO: GPU agents in Carrizo APUs cannot properly update L2 cache for
--
2.7.1