diff mbox series

[og10] OpenACC: Turn off worker partitioning if num_workers==1

Message ID 20200629201653.147326-3-julian@codesourcery.com
State New
Headers show
Series [og10] OpenACC: Turn off worker partitioning if num_workers==1 | expand

Commit Message

Julian Brown June 29, 2020, 8:16 p.m. UTC
This patch turns off the middle-end worker-partitioning support if the
number of workers for an outlined offload function is one.  In that case,
we do not need to perform the broadcasting/neutering code transformation.

OK for og10 branch?

Julian

ChangeLog

	gcc/
	* omp-offload.c (pass_oacc_gimple_workers::gate): Disable worker
	partitioning if num_workers is 1.
---
 gcc/omp-offload.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

Comments

Thomas Schwinge Sept. 17, 2021, 7:11 p.m. UTC | #1
Hi!

On 2020-06-29T13:16:51-0700, Julian Brown <julian@codesourcery.com> wrote:
> This patch turns off the middle-end worker-partitioning support if the
> number of workers for an outlined offload function is one.  In that case,
> we do not need to perform the broadcasting/neutering code transformation.

ACK, thanks.

> --- a/gcc/omp-offload.c
> +++ b/gcc/omp-offload.c
> @@ -2165,7 +2165,20 @@ public:
>    /* opt_pass methods: */
>    virtual bool gate (function *)
>    {
> -    return flag_openacc && targetm.goacc.worker_partitioning;
> +    if (!flag_openacc || !targetm.goacc.worker_partitioning)
> +      return false;
> +
> +    tree attr = oacc_get_fn_attrib (current_function_decl);
> +
> +    if (!attr)
> +      /* Not an offloaded function.  */
> +      return false;

This last check implies that code in
'gcc/omp-oacc-neuter-broadcast.cc:execute_omp_oacc_neuter_broadcast'
ought to be simplified which currently does:

    tree attr = oacc_get_fn_attrib (current_function_decl);
    if (attr)

..., which now is always-true.

> +
> +    int worker_dim
> +      = oacc_get_fn_dim_size (current_function_decl, GOMP_DIM_WORKER);
> +
> +    /* No worker partitioning if we know the number of workers is 1.  */
> +    return worker_dim != 1;
>    };

Pushed to master branch commit 82792cc407d7a7ab99f37e8501d19be2e6164e50
"openacc: Turn off worker partitioning if num_workers==1", see attached.


Grüße
 Thomas


-----------------
Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955
diff mbox series

Patch

diff --git a/gcc/omp-offload.c b/gcc/omp-offload.c
index bf72782ba4ce..2b730d057781 100644
--- a/gcc/omp-offload.c
+++ b/gcc/omp-offload.c
@@ -2165,7 +2165,20 @@  public:
   /* opt_pass methods: */
   virtual bool gate (function *)
   {
-    return flag_openacc && targetm.goacc.worker_partitioning;
+    if (!flag_openacc || !targetm.goacc.worker_partitioning)
+      return false;
+
+    tree attr = oacc_get_fn_attrib (current_function_decl);
+
+    if (!attr)
+      /* Not an offloaded function.  */
+      return false;
+
+    int worker_dim
+      = oacc_get_fn_dim_size (current_function_decl, GOMP_DIM_WORKER);
+
+    /* No worker partitioning if we know the number of workers is 1.  */
+    return worker_dim != 1;
   };
 
   virtual unsigned int execute (function *)