From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1534) id F2A693853D55; Mon, 21 Nov 2022 14:29:52 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org F2A693853D55 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1669040992; bh=yHoewUITwboq4F8wqoRCliimv0fk/Vvk3iX/1F6JsGo=; h=From:To:Subject:Date:From; b=NpbeX6bMK5SrMPj9bN0tOFqxsqTSky7i+g1DiWXwOBJ+bsBE4IO1DCSZVvXRpFtbL DocK7tf6qtaXyvEhtb6PDqzSRZls0XzvZhbMmj4OSTR+TUJGIO6MgkSoO2oWd5e5os DW2eWWkQpVr93G0JUMCvk/75Jefhv5XFEBHtb1Ho= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Tobias Burnus To: gcc-cvs@gcc.gnu.org Subject: [gcc/devel/omp/gcc-12] libgomp/gcn: fix/improve struct output X-Act-Checkin: gcc X-Git-Author: Tobias Burnus X-Git-Refname: refs/heads/devel/omp/gcc-12 X-Git-Oldrev: 27aad787b4e5a598c00b3eb946f81873063cc319 X-Git-Newrev: 20fe373390a51a167555ff55f87495b2a93be7c1 Message-Id: <20221121142952.F2A693853D55@sourceware.org> Date: Mon, 21 Nov 2022 14:29:52 +0000 (GMT) List-Id: https://gcc.gnu.org/g:20fe373390a51a167555ff55f87495b2a93be7c1 commit 20fe373390a51a167555ff55f87495b2a93be7c1 Author: Tobias Burnus 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 + + Backported from master: + 2022-11-21 Tobias Burnus + + * 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 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; }