[PATCH 6/7 amdgcn] Use a single worker for OpenACC on AMD GCN

Thomas Schwinge thomas@codesourcery.com
Tue Jun 8 10:07:11 GMT 2021


Hi!

On 2019-11-12T13:29:15+0000, Andrew Stubbs <ams@codesourcery.com> wrote:
> This patch prevents the compiler using multiple workers in a gang.

Almost.  The GCN back end fails to enforce this for the case of run-time
variable 'num_workers': that's 'dims[GOMP_DIM_WORKER] == 0', and the
current 'gcc/config/gcn/gcn.c:gcn_goacc_validate_dims' logic doesn't
consider that case:

    /* Check the num workers is not too large.  */
    if (dims[GOMP_DIM_WORKER] > max_workers)
      {
        warning_at (decl ? DECL_SOURCE_LOCATION (decl) : UNKNOWN_LOCATION,
                    OPT_Wopenacc_dims,
                    "using num_workers (%d), ignoring %d",
                    max_workers, dims[GOMP_DIM_WORKER]);
        dims[GOMP_DIM_WORKER] = max_workers;

We could fix that either here, or simply in the GCN libgomp plugin.  I've
pushed "[GCN] Fix run-time variable 'num_workers'" to master branch in
commit 30656822b3792712c7a69fe1a0a79739f8f29abc, see attached.  As
detailed there, this actually affects/fixes a small number of testcases.

> This
> should be reverted when worker support is committed.

ACK; working on that.


Grüße
 Thomas


> 2019-11-12  Andrew Stubbs  <ams@codesourcery.com>
>           Julian Brown  <julian@codesourcery.com>
>
>       gcc/
>       * config/gcn/gcn.c (gcn_goacc_validate_dims): Ensure
>       flag_worker_partitioning is not set.
>       (TARGET_GOACC_WORKER_PARTITIONING): Remove target hook definition.
>       * config/gcn/gcn.opt (macc-experimental-workers): Default to off.
> ---
>  gcc/config/gcn/gcn.c   | 4 ++--
>  gcc/config/gcn/gcn.opt | 2 +-
>  2 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/gcc/config/gcn/gcn.c b/gcc/config/gcn/gcn.c
> index cdd24277cf6..1a69737f693 100644
> --- a/gcc/config/gcn/gcn.c
> +++ b/gcc/config/gcn/gcn.c
> @@ -4695,6 +4695,8 @@ 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.  */
> @@ -6073,8 +6075,6 @@ 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 bdc878f35ad..402deb625bd 100644
> --- a/gcc/config/gcn/gcn.opt
> +++ b/gcc/config/gcn/gcn.opt
> @@ -65,7 +65,7 @@ Target Report RejectNegative Var(flag_bypass_init_error)
>  bool flag_worker_partitioning = false
>
>  macc-experimental-workers
> -Target Report Var(flag_worker_partitioning) Init(1)
> +Target Report Var(flag_worker_partitioning) Init(0)
>
>  int stack_size_opt = -1
>


-----------------
Mentor Graphics (Deutschland) GmbH, Arnulfstrasse 201, 80634 München Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, Frank Thürauf
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-GCN-Fix-run-time-variable-num_workers.patch
Type: text/x-diff
Size: 4339 bytes
Desc: not available
URL: <https://gcc.gnu.org/pipermail/gcc-patches/attachments/20210608/295022c1/attachment.bin>


More information about the Gcc-patches mailing list