This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH 6/6] [og9] Enable worker partitioning for AMD GCN
- From: Julian Brown <julian at codesourcery dot com>
- To: <gcc-patches at gcc dot gnu dot org>
- Cc: Andrew Stubbs <andrew_stubbs at mentor dot com>
- Date: Wed, 4 Sep 2019 18:46:58 -0700
- Subject: [PATCH 6/6] [og9] Enable worker partitioning for AMD GCN
- Ironport-sdr: a2RzYOPN5zlReVubOPA0o7wLid7P0bGtxmn3eK2p+E9AOf38C/yggb5cZ9NDR38K9OlhCOOclq r3KpGky8Xgduj59mGvAMnIVgZlGeTpR5uyFe+f1C1Ba4Z6VjfDu2JP8A+RKqCBH1gD/kX/L5lx QCq43xU9knWFgeLDqgF5fA/B62/cPn+AXGrMRn7BdAIAXJPdOjlg3BtSoDmBQ4PvQD1ttmwLys Lw4Yu/FW4wGWhu8IPnPWl4NfJpOY2h1l1RI9TLCxwR60S1cDyjRDSR5QGtUxxkEQ5lyDU7/hPV JMA=
- Ironport-sdr: euVMwlWzYps8W3l1JIFf5r4r+3DZxJ/a/S7wVWv0+6T4u7Upxo4Vsdp/EauNZr3wT1uxpjdkof XST1ctdQb1ABTdddTh8JNw0PBAkL6km4vScGWtf7e/XfeBtjrmE/VNXC8xz8ikXrGU+AD9IF5M 3tYJFuEfEoXTaxUtfgTyDhelfZtRaEOB1S4mPgmE9YZW0s/XaDIE3KaM39yQuRmImjhgRYHXn1 J/vbO5KXxuc4naCFWGf89qBxy97wgnAu5/6McXDl2Qm7RU6s3QcmrQM7Wz5ErtXLa1L41WSF7f SZ4=
- References: <cover.1567644180.git.julian@codesourcery.com>
This patch enables middle-end worker partitioning and multiple workers
on AMD GCN.
Julian
ChangeLog
gcc/
* config/gcn/gcn.c (gcn_goacc_validate_dims): Remove
no-flag_worker-partitioning assertion.
(TARGET_GOACC_WORKER_PARTITIONING): Define target hook to true.
* config/gcn/gcn.opt (flag_worker_partitioning): Change default to 1.
libgomp/
* plugin/plugin-gcn.c (gcn_exec): Change default number of workers to
16.
---
gcc/ChangeLog.openacc | 7 +++++++
gcc/config/gcn/gcn.c | 4 ++--
gcc/config/gcn/gcn.opt | 2 +-
libgomp/ChangeLog.openacc | 5 +++++
libgomp/plugin/plugin-gcn.c | 4 +---
5 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/gcc/ChangeLog.openacc b/gcc/ChangeLog.openacc
index 2b7f616810d..dde474d144d 100644
--- a/gcc/ChangeLog.openacc
+++ b/gcc/ChangeLog.openacc
@@ -1,3 +1,10 @@
+2019-09-05 Julian Brown <julian@codesourcery.com>
+
+ * config/gcn/gcn.c (gcn_goacc_validate_dims): Remove
+ no-flag_worker-partitioning assertion.
+ (TARGET_GOACC_WORKER_PARTITIONING): Define target hook to true.
+ * config/gcn/gcn.opt (flag_worker_partitioning): Change default to 1.
+
2019-09-05 Cesar Philippidis <cesar@codesourcery.com>
Julian Brown <julian@codesourcery.com>
diff --git a/gcc/config/gcn/gcn.c b/gcc/config/gcn/gcn.c
index ca9321b5f25..b7cf6f093fa 100644
--- a/gcc/config/gcn/gcn.c
+++ b/gcc/config/gcn/gcn.c
@@ -4659,8 +4659,6 @@ gcn_goacc_validate_dims (tree decl, int dims[], int fn_level,
/* FIXME: remove -facc-experimental-workers when they're ready. */
int max_workers = flag_worker_partitioning ? 16 : 1;
- gcc_assert (!flag_worker_partitioning);
-
/* The vector size must appear to be 64, to the user, unless this is a
SEQ routine. The real, internal value is always 1, which means use
autovectorization, but the user should not see that. */
@@ -6035,6 +6033,8 @@ print_operand (FILE *file, rtx x, int code)
#define TARGET_GOACC_REDUCTION gcn_goacc_reduction
#undef TARGET_GOACC_VALIDATE_DIMS
#define TARGET_GOACC_VALIDATE_DIMS gcn_goacc_validate_dims
+#undef TARGET_GOACC_WORKER_PARTITIONING
+#define TARGET_GOACC_WORKER_PARTITIONING true
#undef TARGET_HARD_REGNO_MODE_OK
#define TARGET_HARD_REGNO_MODE_OK gcn_hard_regno_mode_ok
#undef TARGET_HARD_REGNO_NREGS
diff --git a/gcc/config/gcn/gcn.opt b/gcc/config/gcn/gcn.opt
index 90d35f42e57..2fd3996edba 100644
--- a/gcc/config/gcn/gcn.opt
+++ b/gcc/config/gcn/gcn.opt
@@ -62,7 +62,7 @@ Target Report RejectNegative Var(flag_bypass_init_error)
bool flag_worker_partitioning = false
macc-experimental-workers
-Target Report Var(flag_worker_partitioning) Init(0)
+Target Report Var(flag_worker_partitioning) Init(1)
int stack_size_opt = -1
diff --git a/libgomp/ChangeLog.openacc b/libgomp/ChangeLog.openacc
index c7ef40e922c..438bd59b47b 100644
--- a/libgomp/ChangeLog.openacc
+++ b/libgomp/ChangeLog.openacc
@@ -1,3 +1,8 @@
+2019-09-05 Julian Brown <julian@codesourcery.com>
+
+ * plugin/plugin-gcn.c (gcn_exec): Change default number of workers to
+ 16.
+
2019-09-05 Julian Brown <julian@codesourcery.com>
* testsuite/libgomp.oacc-fortran/lib-13.f90: End data region after
diff --git a/libgomp/plugin/plugin-gcn.c b/libgomp/plugin/plugin-gcn.c
index 099f70b647c..f0b22ebc3d7 100644
--- a/libgomp/plugin/plugin-gcn.c
+++ b/libgomp/plugin/plugin-gcn.c
@@ -3244,10 +3244,8 @@ gcn_exec (struct kernel_info *kernel, size_t mapnum, void **hostaddrs,
problem size, so let's do a reasonable number of single-worker gangs.
64 gangs matches a typical Fiji device. */
- /* NOTE: Until support for middle-end worker partitioning is merged, use 1
- for the default number of workers. */
if (dims[0] == 0) dims[0] = 64; /* Gangs. */
- if (dims[1] == 0) dims[1] = 1; /* Workers. */
+ if (dims[1] == 0) dims[1] = 16; /* Workers. */
/* The incoming dimensions are expressed in terms of gangs, workers, and
vectors. The HSA dimensions are expressed in terms of "work-items",
--
2.22.0