On Wed, Sep 9, 2020 at 7:55 PM Sandra Loosemore <san...@codesourcery.com> wrote: > > This set of patches implements C/C++ and Fortran front end support for > adding "acc loop auto" annotations to loop nests in OpenACC kernels > regions. For background on this, refer to Thomas Schwinge's talk from > last year's cauldron, at > > https://gcc.gnu.org/wiki/cauldron2019talks?action=AttachFile&do=view&target=OpenACC+kernels-cauldron2019.pdf > > In particular, pages 20-24 describe this part of the work. We're > trying to identify loops that might be parallelizable and convert them > to ACC_LOOP tree structures for further analysis, instead of lowering > them to goto form early in compilation, as we do with ordinary > for/while/do loops in C/C++ and DO loops in Fortran.
So the issue I ran into when trying a simplistic "transfer" of DO CONCURRENT is that variables in DO CONCURRENT scope get moved to function scope by simplification and nothing prevents optimizers from extending lifetime of those which means we end up eventually creating additional cross-iteration dependences and the result is a loop that is no longer satisfying 'DO CONCURRENT'. I realize OACC handling is hacked in place in a set of passes during early optimization so these kind of transforms simply might not happen "yet" (by luck - nothing made them "invalid" on GIMPLE). I didn't look at the how you "annotate" and until when the annotation prevails (the headers of the two patches don't say so either) so maybe you will not have such issues by design? Richard. > The C/C++ patches depend on my earlier not-yet-reviewed patch series > to unify the loop tree representations in the two front ends, which I > most recently reposted here: > > https://gcc.gnu.org/pipermail/gcc-patches/2020-August/551927.html > > These patches have all been previously committed to the OG10 branch to > unblock other work on subsequent processing of the loops with auto > annotations, but without proper review. Here I've mashed up the > followup bug fixes and incremental improvements I committed to the > branch together with the original patches to simplify review. If > anyone cares, the corresponding commits on the OG10 branch were: > > c96409c1f190e29fd9809890fb16d72556f3b7e6 > fdbad20a57e03e05b608f19db41a454bc0cd1c47 > 6d670e648e76fe44589a42ee458098ff84d24af1 > cb581bdb6689d74c1849b7e6bc139c6f122fdcc2 > 16d59cea8362c1ec731aa5b4db42a2817f036f23 > 7b436e90a4e03fdce5b0c6a8c452d3f23f1e136b > c2789b61cf29397295f39a43f5d1605ab8a32d87 > 1c9af55d7ff76e2e6b633af33e6e6991a0ba4c48 > 20f37fd2f9c8c52fff380982d6fc5eb2d88b3dd9 > df5f2065bad30dc6aff9653237157c33fd4161cd > > Sandra Loosemore (2): > Kernels loops annotation: C and C++. > Kernels loops annotation: Fortran. > > gcc/c-family/c-common.h | 1 + > gcc/c-family/c-omp.c | 916 > +++++++++++++++++++-- > gcc/c-family/c.opt | 8 + > gcc/c/c-decl.c | 28 + > gcc/c/c-parser.c | 3 + > gcc/cp/decl.c | 44 + > gcc/cp/parser.c | 3 + > gcc/cp/semantics.c | 9 + > gcc/doc/invoke.texi | 34 +- > gcc/fortran/gfortran.h | 1 + > gcc/fortran/lang.opt | 8 + > gcc/fortran/openmp.c | 415 ++++++++++ > gcc/fortran/parse.c | 9 + > gcc/fortran/trans-openmp.c | 30 +- > .../goacc/classify-kernels-unparallelized.c | 1 + > .../c-c++-common/goacc/classify-kernels.c | 1 + > .../c-c++-common/goacc/combined-directives.c | 2 +- > .../goacc/kernels-counter-var-redundant-load.c | 1 + > .../goacc/kernels-counter-vars-function-scope.c | 1 + > .../goacc/kernels-double-reduction-n.c | 1 + > .../c-c++-common/goacc/kernels-double-reduction.c | 1 + > gcc/testsuite/c-c++-common/goacc/kernels-loop-2.c | 1 + > gcc/testsuite/c-c++-common/goacc/kernels-loop-3.c | 1 + > .../c-c++-common/goacc/kernels-loop-annotation-1.c | 26 + > .../goacc/kernels-loop-annotation-10.c | 32 + > .../goacc/kernels-loop-annotation-11.c | 27 + > .../goacc/kernels-loop-annotation-12.c | 28 + > .../goacc/kernels-loop-annotation-13.c | 27 + > .../goacc/kernels-loop-annotation-14.c | 22 + > .../goacc/kernels-loop-annotation-15.c | 22 + > .../goacc/kernels-loop-annotation-16.c | 26 + > .../goacc/kernels-loop-annotation-17.c | 26 + > .../goacc/kernels-loop-annotation-18.c | 18 + > .../goacc/kernels-loop-annotation-19.c | 19 + > .../c-c++-common/goacc/kernels-loop-annotation-2.c | 21 + > .../goacc/kernels-loop-annotation-20.c | 23 + > .../goacc/kernels-loop-annotation-21.c | 42 + > .../goacc/kernels-loop-annotation-22.c | 41 + > .../c-c++-common/goacc/kernels-loop-annotation-3.c | 24 + > .../c-c++-common/goacc/kernels-loop-annotation-4.c | 34 + > .../c-c++-common/goacc/kernels-loop-annotation-5.c | 27 + > .../c-c++-common/goacc/kernels-loop-annotation-6.c | 27 + > .../c-c++-common/goacc/kernels-loop-annotation-7.c | 26 + > .../c-c++-common/goacc/kernels-loop-annotation-8.c | 27 + > .../c-c++-common/goacc/kernels-loop-annotation-9.c | 26 + > .../c-c++-common/goacc/kernels-loop-data-2.c | 1 + > .../goacc/kernels-loop-data-enter-exit-2.c | 1 + > .../goacc/kernels-loop-data-enter-exit.c | 1 + > .../c-c++-common/goacc/kernels-loop-data-update.c | 1 + > .../c-c++-common/goacc/kernels-loop-data.c | 1 + > gcc/testsuite/c-c++-common/goacc/kernels-loop-g.c | 1 + > .../c-c++-common/goacc/kernels-loop-mod-not-zero.c | 1 + > gcc/testsuite/c-c++-common/goacc/kernels-loop-n.c | 1 + > .../c-c++-common/goacc/kernels-loop-nest.c | 1 + > gcc/testsuite/c-c++-common/goacc/kernels-loop.c | 1 + > .../c-c++-common/goacc/kernels-one-counter-var.c | 1 + > .../goacc/kernels-parallel-loop-data-enter-exit.c | 1 + > .../c-c++-common/goacc/kernels-reduction.c | 1 + > .../goacc/classify-kernels-unparallelized.f95 | 1 + > .../gfortran.dg/goacc/classify-kernels.f95 | 1 + > .../gfortran.dg/goacc/combined-directives.f90 | 19 +- > gcc/testsuite/gfortran.dg/goacc/common-block-3.f90 | 1 + > gcc/testsuite/gfortran.dg/goacc/kernels-loop-2.f95 | 1 + > .../goacc/kernels-loop-annotation-1.f95 | 33 + > .../goacc/kernels-loop-annotation-10.f95 | 32 + > .../goacc/kernels-loop-annotation-11.f95 | 34 + > .../goacc/kernels-loop-annotation-12.f95 | 39 + > .../goacc/kernels-loop-annotation-13.f95 | 38 + > .../goacc/kernels-loop-annotation-14.f95 | 35 + > .../goacc/kernels-loop-annotation-15.f95 | 35 + > .../goacc/kernels-loop-annotation-16.f95 | 34 + > .../goacc/kernels-loop-annotation-18.f95 | 28 + > .../goacc/kernels-loop-annotation-19.f95 | 29 + > .../goacc/kernels-loop-annotation-2.f95 | 32 + > .../goacc/kernels-loop-annotation-20.f95 | 26 + > .../goacc/kernels-loop-annotation-3.f95 | 33 + > .../goacc/kernels-loop-annotation-4.f95 | 34 + > .../goacc/kernels-loop-annotation-5.f95 | 35 + > .../goacc/kernels-loop-annotation-6.f95 | 34 + > .../goacc/kernels-loop-annotation-7.f95 | 48 ++ > .../goacc/kernels-loop-annotation-8.f95 | 50 ++ > .../goacc/kernels-loop-annotation-9.f95 | 34 + > .../gfortran.dg/goacc/kernels-loop-data-2.f95 | 1 + > .../goacc/kernels-loop-data-enter-exit-2.f95 | 1 + > .../goacc/kernels-loop-data-enter-exit.f95 | 1 + > .../gfortran.dg/goacc/kernels-loop-data-update.f95 | 1 + > .../gfortran.dg/goacc/kernels-loop-data.f95 | 1 + > gcc/testsuite/gfortran.dg/goacc/kernels-loop-n.f95 | 1 + > gcc/testsuite/gfortran.dg/goacc/kernels-loop.f95 | 1 + > .../kernels-parallel-loop-data-enter-exit.f95 | 1 + > .../goacc/private-explicit-kernels-1.f95 | 7 +- > .../goacc/private-predetermined-kernels-1.f95 | 7 +- > gcc/tree.h | 5 + > 93 files changed, 2755 insertions(+), 81 deletions(-) > create mode 100644 > gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-1.c > create mode 100644 > gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-10.c > create mode 100644 > gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-11.c > create mode 100644 > gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-12.c > create mode 100644 > gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-13.c > create mode 100644 > gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-14.c > create mode 100644 > gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-15.c > create mode 100644 > gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-16.c > create mode 100644 > gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-17.c > create mode 100644 > gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-18.c > create mode 100644 > gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-19.c > create mode 100644 > gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-2.c > create mode 100644 > gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-20.c > create mode 100644 > gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-21.c > create mode 100644 > gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-22.c > create mode 100644 > gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-3.c > create mode 100644 > gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-4.c > create mode 100644 > gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-5.c > create mode 100644 > gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-6.c > create mode 100644 > gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-7.c > create mode 100644 > gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-8.c > create mode 100644 > gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-9.c > create mode 100644 > gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-1.f95 > create mode 100644 > gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-10.f95 > create mode 100644 > gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-11.f95 > create mode 100644 > gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-12.f95 > create mode 100644 > gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-13.f95 > create mode 100644 > gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-14.f95 > create mode 100644 > gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-15.f95 > create mode 100644 > gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-16.f95 > create mode 100644 > gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-18.f95 > create mode 100644 > gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-19.f95 > create mode 100644 > gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-2.f95 > create mode 100644 > gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-20.f95 > create mode 100644 > gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-3.f95 > create mode 100644 > gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-4.f95 > create mode 100644 > gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-5.f95 > create mode 100644 > gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-6.f95 > create mode 100644 > gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-7.f95 > create mode 100644 > gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-8.f95 > create mode 100644 > gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-9.f95 > > -- > 2.8.1 >