This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Async I/O patch with compilation fix


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]