This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Async I/O patch with compilation fix
- From: Christophe Lyon <christophe dot lyon at linaro dot org>
- To: koenigni at student dot ethz dot ch
- Cc: Andre Simoes Dias Vieira <Andre dot SimoesDiasVieira at arm dot com>, gcc Patches <gcc-patches at gcc dot gnu dot org>, fortran at gcc dot gnu dot org, Thomas Koenig <tkoenig at netcologne dot de>, Ulrich Weigand <uweigand at de dot ibm dot com>, David Edelsohn <dje dot gcc at gmail dot com>, clyon at gcc dot gnu dot org
- Date: Thu, 2 Aug 2018 17:42:46 +0200
- Subject: Re: Async I/O patch with compilation fix
- References: <20180726133142.DE075D801C7@oc3748833570.ibm.com> <f1403d7e-65b9-e8a7-c253-f974951ed826@netcologne.de> <01cd923e-18c7-f745-a75d-49536d56cdbf@netcologne.de> <CAGWvnynU5_TRCykT-oQK8PgZ7zx8Gdnsay4LjSeqM8JxKLWnLA@mail.gmail.com> <5B6021C0.5060507@arm.com> <20180802113135.5qmwnfpxwv4dic6z@student.ethz.ch>
On Thu, 2 Aug 2018 at 13:35, Nicolas Koenig <koenigni@student.ethz.ch> wrote:
>
>
> Hello everyone,
>
> Here is an updated version of the patch that hopefully fixes the compilation
> problems by disabling async I/O if conditions are not supported by the target.
>
> I would appreciate if people could test it on systems on which it failed
> before. As for the array_constructor_8.f90 failure reported in the PR, why
> it fails is beyond me, it doesn't even use I/O. Maybe/Probably something
> unrelated?
>
Hi,
I'm probably missing something obvious, but after applying this patch
on top of r263136, the builds fail while building libgfortran:
/tmp/9271913_1.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/libgfortran/runtime/error.c:28:10:
fatal error: async.h: No such file or directory
#include "async.h"
^~~~~~~~~
compilation terminated.
make[3]: *** [error.lo] Error 1
> Nicolas
>
>
> 2018-08-02 Nicolas Koenig <koenigni@gcc.gnu.org>
> Thomas Koenig <tkoenig@gcc.gnu.org>
>
> PR fortran/25829
> * gfortran.texi: Add description of asynchronous I/O.
> * trans-decl.c (gfc_finish_var_decl): Treat asynchronous variables
> as volatile.
> * trans-io.c (gfc_build_io_library_fndecls): Rename st_wait to
> st_wait_async and change argument spec from ".X" to ".w".
> (gfc_trans_wait): Pass ID argument via reference.
>
> 2018-08-02 Nicolas Koenig <koenigni@gcc.gnu.org>
> Thomas Koenig <tkoenig@gcc.gnu.org>
>
> PR fortran/25829
> * gfortran.dg/f2003_inquire_1.f03: Add write statement.
> * gfortran.dg/f2003_io_1.f03: Add wait statement.
>
> 2018-08-02 Nicolas Koenig <koenigni@gcc.gnu.org>
> Thomas Koenig <tkoenig@gcc.gnu.org>
>
> PR fortran/25829
> * Makefile.am: Add async.c to gfor_io_src.
> Add async.h to gfor_io_headers.
> * Makefile.in: Regenerated.
> * gfortran.map: Add _gfortran_st_wait_async.
> * io/async.c: New file.
> * io/async.h: New file.
> * io/close.c: Include async.h.
> (st_close): Call async_wait for an asynchronous unit.
> * io/file_pos.c (st_backspace): Likewise.
> (st_endfile): Likewise.
> (st_rewind): Likewise.
> (st_flush): Likewise.
> * io/inquire.c: Add handling for asynchronous PENDING
> and ID arguments.
> * io/io.h (st_parameter_dt): Add async bit.
> (st_parameter_wait): Correct.
> (gfc_unit): Add au pointer.
> (st_wait_async): Add prototype.
> (transfer_array_inner): Likewise.
> (st_write_done_worker): Likewise.
> * io/open.c: Include async.h.
> (new_unit): Initialize asynchronous unit.
> * io/transfer.c (async_opt): New struct.
> (wrap_scalar_transfer): New function.
> (transfer_integer): Call wrap_scalar_transfer to do the work.
> (transfer_real): Likewise.
> (transfer_real_write): Likewise.
> (transfer_character): Likewise.
> (transfer_character_wide): Likewise.
> (transfer_complex): Likewise.
> (transfer_array_inner): New function.
> (transfer_array): Call transfer_array_inner.
> (transfer_derived): Call wrap_scalar_transfer.
> (data_transfer_init): Check for asynchronous I/O.
> Perform a wait operation on any pending asynchronous I/O
> if the data transfer is synchronous. Copy PDT and enqueue
> thread for data transfer.
> (st_read_done_worker): New function.
> (st_read_done): Enqueue transfer or call st_read_done_worker.
> (st_write_done_worker): New function.
> (st_write_done): Enqueue transfer or call st_read_done_worker.
> (st_wait): Document as no-op for compatibility reasons.
> (st_wait_async): New function.
> * io/unit.c (insert_unit): Use macros LOCK, UNLOCK and TRYLOCK;
> add NOTE where necessary.
> (get_gfc_unit): Likewise.
> (init_units): Likewise.
> (close_unit_1): Likewise. Call async_close if asynchronous.
> (close_unit): Use macros LOCK and UNLOCK.
> (finish_last_advance_record): Likewise.
> (newunit_alloc): Likewise.
> * io/unix.c (find_file): Likewise.
> (flush_all_units_1): Likewise.
> (flush_all_units): Likewise.
> * libgfortran.h (generate_error_common): Add prototype.
> * runtime/error.c: Include io.h and async.h.
> (generate_error_common): New function.
>
> 2018-08-02 Nicolas Koenig <koenigni@gcc.gnu.org>
> Thomas Koenig <tkoenig@gcc.gnu.org>
>
> PR fortran/25829
> * testsuite/libgomp.fortran/async_io_1.f90: New test.
> * testsuite/libgomp.fortran/async_io_2.f90: New test.
> * testsuite/libgomp.fortran/async_io_3.f90: New test.
> * testsuite/libgomp.fortran/async_io_4.f90: New test.
> * testsuite/libgomp.fortran/async_io_5.f90: New test.
> * testsuite/libgomp.fortran/async_io_6.f90: New test.
> * testsuite/libgomp.fortran/async_io_7.f90: New test.