public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc/devel/omp/gcc-12] libgomp/gcn: fix/improve struct output
@ 2022-11-21 14:29 Tobias Burnus
0 siblings, 0 replies; only message in thread
From: Tobias Burnus @ 2022-11-21 14:29 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:20fe373390a51a167555ff55f87495b2a93be7c1
commit 20fe373390a51a167555ff55f87495b2a93be7c1
Author: Tobias Burnus <tobias@codesourcery.com>
Date: Mon Nov 21 15:25:48 2022 +0100
libgomp/gcn: fix/improve struct output
output.printf_data.(value union) contains text[128], which has the size
of 128 bytes, sufficient for 16 uint64_t variables; hence value_u64[2]
could be extended to value_u64[6] - sufficient for all required arguments
to gomp_target_rev. Additionally, next_output.printf_data.(msg union)
contained msg_u64 which then is no longer needed and also caused 32bit
vs 64bit alignment issues.
libgomp/
* config/gcn/libgomp-gcn.h (struct output):
Remove 'msg_u64' from the union, change
value_u64[2] to value_u64[6].
* config/gcn/target.c (GOMP_target_ext): Update accordingly.
* plugin/plugin-gcn.c (process_reverse_offload, console_output):
Likewise.
(cherry picked from commit 6edcb5dc42625cb0cf84b19c6fe4f944f6322ea0)
Diff:
---
libgomp/ChangeLog.omp | 12 ++++++++++++
libgomp/config/gcn/libgomp-gcn.h | 7 ++-----
libgomp/config/gcn/target.c | 12 ++++++------
libgomp/plugin/plugin-gcn.c | 17 +++++++----------
4 files changed, 27 insertions(+), 21 deletions(-)
diff --git a/libgomp/ChangeLog.omp b/libgomp/ChangeLog.omp
index 73bcc3adb0c..516875f8450 100644
--- a/libgomp/ChangeLog.omp
+++ b/libgomp/ChangeLog.omp
@@ -1,3 +1,15 @@
+2022-11-21 Tobias Burnus <tobias@codesourcery.com>
+
+ Backported from master:
+ 2022-11-21 Tobias Burnus <tobias@codesourcery.com>
+
+ * config/gcn/libgomp-gcn.h (struct output):
+ Remove 'msg_u64' from the union, change
+ value_u64[2] to value_u64[6].
+ * config/gcn/target.c (GOMP_target_ext): Update accordingly.
+ * plugin/plugin-gcn.c (process_reverse_offload, console_output):
+ Likewise.
+
2022-11-19 Tobias Burnus <tobias@codesourcery.com>
Backported from master:
diff --git a/libgomp/config/gcn/libgomp-gcn.h b/libgomp/config/gcn/libgomp-gcn.h
index 91560be787f..b59cbee288e 100644
--- a/libgomp/config/gcn/libgomp-gcn.h
+++ b/libgomp/config/gcn/libgomp-gcn.h
@@ -37,16 +37,13 @@ struct output
unsigned int next_output;
struct printf_data {
int written;
- union {
- char msg[128];
- uint64_t msg_u64[2];
- };
+ char msg[128];
int type;
union {
int64_t ivalue;
double dvalue;
char text[128];
- uint64_t value_u64[2];
+ uint64_t value_u64[16];
};
} queue[1024];
unsigned int consumed;
diff --git a/libgomp/config/gcn/target.c b/libgomp/config/gcn/target.c
index 27854565d40..11ae6ec9833 100644
--- a/libgomp/config/gcn/target.c
+++ b/libgomp/config/gcn/target.c
@@ -102,12 +102,12 @@ GOMP_target_ext (int device, void (*fn) (void *), size_t mapnum,
asm ("s_sleep 64");
unsigned int slot = index % 1024;
- uint64_t addrs_sizes_kind[3] = {(uint64_t) hostaddrs, (uint64_t) sizes,
- (uint64_t) kinds};
- data->queue[slot].msg_u64[0] = (uint64_t) fn;
- data->queue[slot].msg_u64[1] = (uint64_t) mapnum;
- data->queue[slot].value_u64[0] = (uint64_t) &addrs_sizes_kind[0];
- data->queue[slot].value_u64[1] = (uint64_t) GOMP_ADDITIONAL_ICVS.device_num;
+ data->queue[slot].value_u64[0] = (uint64_t) fn;
+ data->queue[slot].value_u64[1] = (uint64_t) mapnum;
+ data->queue[slot].value_u64[2] = (uint64_t) hostaddrs;
+ data->queue[slot].value_u64[3] = (uint64_t) sizes;
+ data->queue[slot].value_u64[4] = (uint64_t) kinds;
+ data->queue[slot].value_u64[5] = (uint64_t) GOMP_ADDITIONAL_ICVS.device_num;
data->queue[slot].type = 4; /* Reverse offload. */
__atomic_store_n (&data->queue[slot].written, 1, __ATOMIC_RELEASE);
diff --git a/libgomp/plugin/plugin-gcn.c b/libgomp/plugin/plugin-gcn.c
index f6bc9a41d07..abf86953f98 100644
--- a/libgomp/plugin/plugin-gcn.c
+++ b/libgomp/plugin/plugin-gcn.c
@@ -1953,16 +1953,12 @@ create_kernel_dispatch (struct kernel_info *kernel, int num_teams)
}
static void
-process_reverse_offload (uint64_t fn, uint64_t mapnum, uint64_t rev_data,
- uint64_t dev_num64)
+process_reverse_offload (uint64_t fn, uint64_t mapnum, uint64_t hostaddrs,
+ uint64_t sizes, uint64_t kinds, uint64_t dev_num64)
{
int dev_num = dev_num64;
- uint64_t addrs_sizes_kinds[3];
- GOMP_OFFLOAD_host2dev (dev_num, &addrs_sizes_kinds, (void *) rev_data,
- sizeof (addrs_sizes_kinds));
- GOMP_PLUGIN_target_rev (fn, mapnum, addrs_sizes_kinds[0],
- addrs_sizes_kinds[1], addrs_sizes_kinds[2],
- dev_num, NULL, NULL, NULL);
+ GOMP_PLUGIN_target_rev (fn, mapnum, hostaddrs, sizes, kinds, dev_num,
+ NULL, NULL, NULL);
}
/* Output any data written to console output from the kernel. It is expected
@@ -2010,8 +2006,9 @@ console_output (struct kernel_info *kernel, struct kernargs *kernargs,
case 2: printf ("%.128s%.128s\n", data->msg, data->text); break;
case 3: printf ("%.128s%.128s", data->msg, data->text); break;
case 4:
- process_reverse_offload (data->msg_u64[0], data->msg_u64[1],
- data->value_u64[0],data->value_u64[1]);
+ process_reverse_offload (data->value_u64[0], data->value_u64[1],
+ data->value_u64[2], data->value_u64[3],
+ data->value_u64[4], data->value_u64[5]);
break;
default: printf ("GCN print buffer error!\n"); break;
}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-11-21 14:29 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-21 14:29 [gcc/devel/omp/gcc-12] libgomp/gcn: fix/improve struct output Tobias Burnus
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).