From: Julian Brown Date: Tue, 3 Sep 2019 15:57:39 +0000 (-0700) Subject: Enable worker partitioning for AMD GCN X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2ec47f0ddcc6bc3414ac067e5833b2d8f5b09345;p=thirdparty%2Fgcc.git Enable worker partitioning for AMD GCN 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. --- diff --git a/gcc/ChangeLog.omp b/gcc/ChangeLog.omp index e64dd070eaaa..228dbd54b584 100644 --- a/gcc/ChangeLog.omp +++ b/gcc/ChangeLog.omp @@ -1,3 +1,10 @@ +2019-09-05 Julian Brown + + * 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 Julian Brown diff --git a/gcc/config/gcn/gcn.c b/gcc/config/gcn/gcn.c index e6800c21b20b..286018b936b6 100644 --- a/gcc/config/gcn/gcn.c +++ b/gcc/config/gcn/gcn.c @@ -4869,8 +4869,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. */ @@ -6323,6 +6321,8 @@ gcn_dwarf_register_span (rtx rtl) #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 767d45826c2f..f23d5984a82b 100644 --- a/gcc/config/gcn/gcn.opt +++ b/gcc/config/gcn/gcn.opt @@ -65,7 +65,7 @@ Target RejectNegative Var(flag_bypass_init_error) bool flag_worker_partitioning = false macc-experimental-workers -Target Var(flag_worker_partitioning) Init(0) +Target Var(flag_worker_partitioning) Init(1) int stack_size_opt = -1 diff --git a/libgomp/ChangeLog.omp b/libgomp/ChangeLog.omp index f026be5ad582..b67584271e4a 100644 --- a/libgomp/ChangeLog.omp +++ b/libgomp/ChangeLog.omp @@ -1,3 +1,8 @@ +2019-09-05 Julian Brown + + * plugin/plugin-gcn.c (gcn_exec): Change default number of workers to + 16. + 2019-09-05 Julian Brown * 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 5818c0fff00e..86263a67d325 100644 --- a/libgomp/plugin/plugin-gcn.c +++ b/libgomp/plugin/plugin-gcn.c @@ -3041,10 +3041,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] = get_cu_count (kernel->agent); /* 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",