I recently built the master branch of Iain's fork of gcc in order to test
the support for locality specifiers.   I have verified that the branch I
built contains the commit mentioned in this email thread
20b8500cfa522ebe0fcf756d5b32816da7f904dd.  The code below isn't designed to
do anything useful -- just to make sure the syntax works. Could someone
tell me why the second error message indicates that LOCAL is not supported
yet?  Also, the first error message is really interesting because if I'm
really not allowed to have anything allocatable inside LOCAL(), then I'm
going to have to go back to the drawing board regarding my intended use
case.  Any advice?

Damian

% cat locality.f90

program main

  implicit none

  integer pair

  integer :: mini_batch_size=1


  real, allocatable, dimension(:,:) :: a, dcdb



  allocate(a(1,1))

  allocate(dcdb(1,1))


  do concurrent (pair = 1:mini_batch_size) local(a) reduce(+: dcdb)

    a = 0.

    dcdb = 0.

  end do


end program


% gfortran locality.f90

*locality.f90:8:50:*


    8 |   do concurrent (pair = 1:mini_batch_size) local(a) reduce(+: dcdb)

      |                                                  *1*

*Error:* ALLOCATABLE attribute not permitted for ‘*a*’ in LOCAL
locality-spec at *(1)*

*locality.f90:8:67:*


    8 |   do concurrent (pair = 1:mini_batch_size) local(a) reduce(+: dcdb)

      |
*1*

*Error:* Sorry, LOCAL and LOCAL_INIT are not yet supported for ‘*do
concurrent*’ constructs at *(1)*


gfortran --version

GNU Fortran (GCC) 15.0.1 20250119 (experimental)

Copyright (C) 2025 Free Software Foundation, Inc.

This is free software; see the source for copying conditions.  There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.




On Mon, Jan 13, 2025 at 5:41 PM Jerry D <jvdelis...@gmail.com> wrote:

> Committed as:
>
> commit 20b8500cfa522ebe0fcf756d5b32816da7f904dd (HEAD -> master,
> origin/master, origin/HEAD)
> Author: Anuj Mohite <anujmohite...@gmail.com>
> Date:   Mon Jan 13 16:28:57 2025 -0800
>
>      Fortran: Add LOCALITY support for DO_CONCURRENT
>
>              This patch provided by Anuj Mohite as part of the GSoC
> project.
>              It is modified slightly by Jerry DeLisle for minor formatting.
>              The patch provides front-end parsing of the LOCALITY specs in
>              DO_CONCURRENT and adds numerous test cases.
>
>      gcc/fortran/ChangeLog:
>
>              * dump-parse-tree.cc (show_code_node):  Updated to use
>              c->ext.concur.forall_iterator instead of
> c->ext.forall_iterator.
>              * frontend-passes.cc (index_interchange): Updated to
>              use c->ext.concur.forall_iterator instead of
> c->ext.forall_iterator.
>              (gfc_code_walker): Likewise.
>              * gfortran.h (enum locality_type): Added new enum for
> locality types
>              in DO CONCURRENT constructs.
>              * match.cc (match_simple_forall): Updated to use
>              new_st.ext.concur.forall_iterator instead of
> new_st.ext.forall_iterator.
>              (gfc_match_forall): Likewise.
>              (gfc_match_do):  Implemented support for matching DO
> CONCURRENT locality
>              specifiers (LOCAL, LOCAL_INIT, SHARED, DEFAULT(NONE), and
> REDUCE).
>              * parse.cc (parse_do_block): Updated to use
>              new_st.ext.concur.forall_iterator instead of
> new_st.ext.forall_iterator.
>              * resolve.cc (struct check_default_none_data): Added struct
>              check_default_none_data.
>              (do_concur_locality_specs_f2023): New function to check
> compliance
>              with F2023's C1133 constraint for DO CONCURRENT.
>              (check_default_none_expr): New function to check DEFAULT(NONE)
>              compliance.
>              (resolve_locality_spec): New function to resolve locality
> specs.
>              (gfc_count_forall_iterators): Updated to use
>              code->ext.concur.forall_iterator.
>              (gfc_resolve_forall): Updated to use
> code->ext.concur.forall_iterator.
>              * st.cc (gfc_free_statement): Updated to free locality
> specifications
>              and use p->ext.concur.forall_iterator.
>              * trans-stmt.cc (gfc_trans_forall_1): Updated to use
>              code->ext.concur.forall_iterator.
>
>      gcc/testsuite/ChangeLog:
>
>              * gfortran.dg/do_concurrent_10.f90: New test.
>              * gfortran.dg/do_concurrent_8_f2018.f90: New test.
>              * gfortran.dg/do_concurrent_8_f2023.f90: New test.
>              * gfortran.dg/do_concurrent_9.f90: New test.
>              * gfortran.dg/do_concurrent_all_clauses.f90: New test.
>              * gfortran.dg/do_concurrent_basic.f90: New test.
>              * gfortran.dg/do_concurrent_constraints.f90: New test.
>              * gfortran.dg/do_concurrent_local_init.f90: New test.
>              * gfortran.dg/do_concurrent_locality_specs.f90: New test.
>              * gfortran.dg/do_concurrent_multiple_reduce.f90: New test.
>              * gfortran.dg/do_concurrent_nested.f90: New test.
>              * gfortran.dg/do_concurrent_parser.f90: New test.
>              * gfortran.dg/do_concurrent_reduce_max.f90: New test.
>              * gfortran.dg/do_concurrent_reduce_sum.f90: New test.
>              * gfortran.dg/do_concurrent_shared.f90: New test.
>
>      Signed-off-by: Anuj <anujmohite...@gmail.com>
>
>

Reply via email to