Re: [committed] nvptx, libgfortran: Switch out of "minimal" mode
Sandra Loosemore wrote: On 6/6/24 06:06, Tobias Burnus wrote: +@item I/O within OpenMP target regions and OpenACC compute regions is supported + using the C library @code{printf} functions. + Additionally, the Fortran @code{print}/@code{write} statements are + supported within OpenMP target regions, but not yet OpenACC compute + regions. @c The latter needs 'GOMP_NVPTX_NATIVE_GPU_THREAD_STACK_SIZE'. I think an "in" (or 'within') is missing before OpenACC. Yes, "...not yet within OpenACC compute regions", please. Thanks! Committed as https://gcc.gnu.org/r15-1072-g423522aacd9f30 Tobias
Re: [committed] nvptx, libgfortran: Switch out of "minimal" mode
On 6/6/24 06:06, Tobias Burnus wrote: Hi Thomas, regarding the commit r15-1070-g3a4775d4403f2e / https://gcc.gnu.org/r15-1070 First, thanks for adding I/O support to nvptx offloading. I have a wording nit, to be confirmed by a native speaker: --- a/libgomp/libgomp.texi +++ b/libgomp/libgomp.texi ... +@item I/O within OpenMP target regions and OpenACC compute regions is supported + using the C library @code{printf} functions. + Additionally, the Fortran @code{print}/@code{write} statements are + supported within OpenMP target regions, but not yet OpenACC compute + regions. @c The latter needs 'GOMP_NVPTX_NATIVE_GPU_THREAD_STACK_SIZE'. I think an "in" (or 'within') is missing before OpenACC. Yes, "...not yet within OpenACC compute regions", please. -Sandra
nvptx, libgfortran: Switch out of "minimal" mode
Hi! On 2023-01-20T22:16:00+0100, Hi wrote: > On 2023-01-20T22:04:02+0100, I wrote: >> We've been (t)asked to enable (portions of) GCC/Fortran I/O for nvptx >> offloading, which means building a normal (non-'LIBGFOR_MINIMAL') >> configuration of libgfortran. > > This is achieved by 'nvptx, libgfortran: Switch out of "minimal" mode', > see attached, again based on WIP work by Andrew Stubbs. I've recently slightly revised this, in particular: > The OpenACC XFAILs: "[...] overflows the stack [...]" ... I now avoid by use of commit 0d25989d60d15866ef4737d66e02432f50717255 "nvptx offloading: 'GOMP_NVPTX_NATIVE_GPU_THREAD_STACK_SIZE' environment variable [PR97384, PR105274]". The underlying issue remains... > [...] unresolved at this point; see the discussion around > "Handling of large stack objects in GPU code generation -- maybe transform > into heap allocation?", > and my "nvptx: '-mframe-malloc-threshold', '-Wframe-malloc-threshold'" > experimenting. (The latter works to some extent, but also has other > issues that I shall detail at some later point in time.) (No progress.) Pushed to trunk branch commit 3a4775d4403f2e88b589e88a9937cc1fd45a0e87 'nvptx, libgfortran: Switch out of "minimal" mode', see attached. This, unsurprisingly, also greatly improves GCC/Fortran test results for nvptx target. Grüße Thomas >From 3a4775d4403f2e88b589e88a9937cc1fd45a0e87 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge Date: Wed, 5 Jun 2024 13:13:24 +0200 Subject: [PATCH] nvptx, libgfortran: Switch out of "minimal" mode ..., in order to enable (portions of) Fortran I/O, for example. libgfortran/ * configure.ac: No longer set 'LIBGFOR_MINIMAL' for nvptx. * configure: Regenerate. libgomp/ * libgomp.texi (nvptx): Update. * testsuite/libgomp.fortran/target-print-1-nvptx.f90: Remove. * testsuite/libgomp.fortran/target-print-1.f90: Adjust. * testsuite/libgomp.oacc-fortran/error_stop-2-nvptx.f: New. * testsuite/libgomp.oacc-fortran/error_stop-2.f: Adjust. * testsuite/libgomp.oacc-fortran/print-1-nvptx.f90: Adjust. * testsuite/libgomp.oacc-fortran/print-1.f90: Adjust. * testsuite/libgomp.oacc-fortran/stop-2-nvptx.f: New. * testsuite/libgomp.oacc-fortran/stop-2.f: Adjust. Co-authored-by: Andrew Stubbs --- libgfortran/configure | 21 -- libgfortran/configure.ac | 17 +++- libgomp/libgomp.texi | 10 +++-- .../libgomp.fortran/target-print-1-nvptx.f90 | 11 - .../libgomp.fortran/target-print-1.f90| 3 -- .../libgomp.oacc-fortran/error_stop-2-nvptx.f | 39 ++ .../libgomp.oacc-fortran/error_stop-2.f | 3 +- .../libgomp.oacc-fortran/print-1-nvptx.f90| 40 +++ .../libgomp.oacc-fortran/print-1.f90 | 4 +- .../libgomp.oacc-fortran/stop-2-nvptx.f | 36 + .../testsuite/libgomp.oacc-fortran/stop-2.f | 3 +- 11 files changed, 134 insertions(+), 53 deletions(-) delete mode 100644 libgomp/testsuite/libgomp.fortran/target-print-1-nvptx.f90 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/error_stop-2-nvptx.f create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/stop-2-nvptx.f diff --git a/libgfortran/configure b/libgfortran/configure index 774dd52fc95..11a1bc5f070 100755 --- a/libgfortran/configure +++ b/libgfortran/configure @@ -6207,17 +6207,12 @@ else fi -# For GPU offloading, not everything in libfortran can be supported. -# Currently, the only target that has this problem is nvptx. The -# following is a (partial) list of features that are unsupportable on -# this particular target: -# * Constructors -# * alloca -# * C library support for I/O, with printf as the one notable exception -# * C library support for other features such as signal, environment -# variables, time functions - - if test "x${target_cpu}" = xnvptx; then +# "Minimal" mode is for targets that cannot (yet) support all features of +# libgfortran. It avoids the need for working constructors, alloca, and C +# library support for I/O, signals, environment variables, time functions, etc. +# At present there are no targets that require this mode. + + if false; then LIBGFOR_MINIMAL_TRUE= LIBGFOR_MINIMAL_FALSE='#' else @@ -12852,7 +12847,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12855 "configure" +#line 12850 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12958,7 +12953,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12961 "configure" +#line 12956 "configure"
Re: [committed] nvptx, libgfortran: Switch out of "minimal" mode
Hi Thomas, regarding the commit r15-1070-g3a4775d4403f2e / https://gcc.gnu.org/r15-1070 First, thanks for adding I/O support to nvptx offloading. I have a wording nit, to be confirmed by a native speaker: --- a/libgomp/libgomp.texi +++ b/libgomp/libgomp.texi ... +@item I/O within OpenMP target regions and OpenACC compute regions is supported + using the C library @code{printf} functions. + Additionally, the Fortran @code{print}/@code{write} statements are + supported within OpenMP target regions, but not yet OpenACC compute + regions. @c The latter needs 'GOMP_NVPTX_NATIVE_GPU_THREAD_STACK_SIZE'. I think an "in" (or 'within') is missing before OpenACC. Otherwise, it seemed to fine at a glance – and I am happy that that feature now finally works :-) Hooray, no longer using reverse offload ("!$omp target device(ancestor:1)") for Fortran I/O when debugging. Thanks, Tobias
Update 'libgomp/libgomp.texi' for 'nvptx, libgfortran: Switch out of "minimal" mode' (was: nvptx, libgfortran: Switch out of "minimal" mode)
Hi! On 2023-01-20T22:16:00+0100, I wrote: > On 2023-01-20T22:04:02+0100, I wrote: >> We've been (t)asked to enable (portions of) GCC/Fortran I/O for nvptx >> offloading, which means building a normal (non-'LIBGFOR_MINIMAL') >> configuration of libgfortran. > > This is achieved by 'nvptx, libgfortran: Switch out of "minimal" mode', > see attached, again based on WIP work by Andrew Stubbs. This I've just > pushed to devel/omp/gcc-12 branch in > commit c7734c6fbb5513b4da6306de7bc85de9b8547988, and would like to push > to master branch once other pending GCC patches have been accepted. > > > The OpenACC XFAILs: "[...] overflows the stack for nvptx offloading" > are unresolved at this point; see the discussion around > "Handling of large stack objects in GPU code generation -- maybe transform > into heap allocation?", > and my "nvptx: '-mframe-malloc-threshold', '-Wframe-malloc-threshold'" > experimenting. (The latter works to some extent, but also has other > issues that I shall detail at some later point in time.) I had a note from Tobias to "update the the last but one bullet point at https://gcc.gnu.org/onlinedocs/libgomp/nvptx.html";. Thus pushed to devel/omp/gcc-12 branch commit 8c29332e98ca4669a059ebc0d90903b409ae049f "Update 'libgomp/libgomp.texi' for 'nvptx, libgfortran: Switch out of "minimal" mode'", see attached. Please consider that one 'fixup'ed into the GCC master branch submission. Grüße Thomas > From c7734c6fbb5513b4da6306de7bc85de9b8547988 Mon Sep 17 00:00:00 2001 > From: Thomas Schwinge > Date: Wed, 21 Sep 2022 18:58:34 +0200 > Subject: [PATCH] nvptx, libgfortran: Switch out of "minimal" mode > > ..., in order to enable (portions of) Fortran I/O, for example. > > libgfortran/ChangeLog: > > * configure: Regenerate. > * configure.ac: No longer set LIBGFOR_MINIMAL for nvptx. > > libgomp/ChangeLog: > > * testsuite/libgomp.fortran/target-print-1.f90: Adjust. > * testsuite/libgomp.fortran/target-print-1-nvptx.f90: Remove. > * testsuite/libgomp.oacc-fortran/print-1.f90: Adjust. > * testsuite/libgomp.oacc-fortran/print-1-nvptx.f90: Remove. > * testsuite/libgomp.oacc-fortran/error_stop-2.f: Adjust. > * testsuite/libgomp.oacc-fortran/stop-2.f: Likewise. > > Co-authored-by: Andrew Stubbs > --- > libgfortran/ChangeLog.omp | 6 ++ > libgfortran/configure | 17 ++--- > libgfortran/configure.ac| 17 ++--- > libgomp/ChangeLog.omp | 7 +++ > .../libgomp.fortran/target-print-1-nvptx.f90| 11 --- > .../libgomp.fortran/target-print-1.f90 | 3 --- > .../libgomp.oacc-fortran/error_stop-2.f | 4 +++- > .../libgomp.oacc-fortran/print-1-nvptx.f90 | 11 --- > .../testsuite/libgomp.oacc-fortran/print-1.f90 | 5 ++--- > libgomp/testsuite/libgomp.oacc-fortran/stop-2.f | 4 +++- > 10 files changed, 33 insertions(+), 52 deletions(-) > delete mode 100644 libgomp/testsuite/libgomp.fortran/target-print-1-nvptx.f90 > delete mode 100644 libgomp/testsuite/libgomp.oacc-fortran/print-1-nvptx.f90 > > diff --git a/libgfortran/ChangeLog.omp b/libgfortran/ChangeLog.omp > index b08c264daf9..925575e65fa 100644 > --- a/libgfortran/ChangeLog.omp > +++ b/libgfortran/ChangeLog.omp > @@ -1,3 +1,9 @@ > +2023-01-20 Thomas Schwinge > + Andrew Stubbs > + > + * configure: Regenerate. > + * configure.ac: No longer set LIBGFOR_MINIMAL for nvptx. > + > 2023-01-20 Thomas Schwinge > > PR target/85463 > diff --git a/libgfortran/configure b/libgfortran/configure > index ae64dca3114..3e5c931d4ad 100755 > --- a/libgfortran/configure > +++ b/libgfortran/configure > @@ -6230,17 +6230,12 @@ else > fi > > > -# For GPU offloading, not everything in libfortran can be supported. > -# Currently, the only target that has this problem is nvptx. The > -# following is a (partial) list of features that are unsupportable on > -# this particular target: > -# * Constructors > -# * alloca > -# * C library support for I/O, with printf as the one notable exception > -# * C library support for other features such as signal, environment > -# variables, time functions > - > - if test "x${target_cpu}" = xnvptx; then > +# "Minimal" mode is for targets that cannot (yet) support all features of > +# libgfortran. It avoids the need for working constructors, alloca, and C > +# library support for I/O, signals, environment variables,
Re: nvptx, libgfortran: Switch out of "minimal" mode
Hi Thomas, On 2023-01-20T22:04:02+0100, I wrote: We've been (t)asked to enable (portions of) GCC/Fortran I/O for nvptx offloading, which means building a normal (non-'LIBGFOR_MINIMAL') configuration of libgfortran. This is achieved by 'nvptx, libgfortran: Switch out of "minimal" mode', see attached, again based on WIP work by Andrew Stubbs. This I've just pushed to devel/omp/gcc-12 branch in commit c7734c6fbb5513b4da6306de7bc85de9b8547988, and would like to push to master branch once other pending GCC patches have been accepted. Looks good to me. Regards Thomas
nvptx, libgfortran: Switch out of "minimal" mode
Hi! On 2023-01-20T22:04:02+0100, I wrote: > We've been (t)asked to enable (portions of) GCC/Fortran I/O for nvptx > offloading, which means building a normal (non-'LIBGFOR_MINIMAL') > configuration of libgfortran. This is achieved by 'nvptx, libgfortran: Switch out of "minimal" mode', see attached, again based on WIP work by Andrew Stubbs. This I've just pushed to devel/omp/gcc-12 branch in commit c7734c6fbb5513b4da6306de7bc85de9b8547988, and would like to push to master branch once other pending GCC patches have been accepted. The OpenACC XFAILs: "[...] overflows the stack for nvptx offloading" are unresolved at this point; see the discussion around "Handling of large stack objects in GPU code generation -- maybe transform into heap allocation?", and my "nvptx: '-mframe-malloc-threshold', '-Wframe-malloc-threshold'" experimenting. (The latter works to some extent, but also has other issues that I shall detail at some later point in time.) 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 >From c7734c6fbb5513b4da6306de7bc85de9b8547988 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge Date: Wed, 21 Sep 2022 18:58:34 +0200 Subject: [PATCH] nvptx, libgfortran: Switch out of "minimal" mode ..., in order to enable (portions of) Fortran I/O, for example. libgfortran/ChangeLog: * configure: Regenerate. * configure.ac: No longer set LIBGFOR_MINIMAL for nvptx. libgomp/ChangeLog: * testsuite/libgomp.fortran/target-print-1.f90: Adjust. * testsuite/libgomp.fortran/target-print-1-nvptx.f90: Remove. * testsuite/libgomp.oacc-fortran/print-1.f90: Adjust. * testsuite/libgomp.oacc-fortran/print-1-nvptx.f90: Remove. * testsuite/libgomp.oacc-fortran/error_stop-2.f: Adjust. * testsuite/libgomp.oacc-fortran/stop-2.f: Likewise. Co-authored-by: Andrew Stubbs --- libgfortran/ChangeLog.omp | 6 ++ libgfortran/configure | 17 ++--- libgfortran/configure.ac| 17 ++--- libgomp/ChangeLog.omp | 7 +++ .../libgomp.fortran/target-print-1-nvptx.f90| 11 --- .../libgomp.fortran/target-print-1.f90 | 3 --- .../libgomp.oacc-fortran/error_stop-2.f | 4 +++- .../libgomp.oacc-fortran/print-1-nvptx.f90 | 11 --- .../testsuite/libgomp.oacc-fortran/print-1.f90 | 5 ++--- libgomp/testsuite/libgomp.oacc-fortran/stop-2.f | 4 +++- 10 files changed, 33 insertions(+), 52 deletions(-) delete mode 100644 libgomp/testsuite/libgomp.fortran/target-print-1-nvptx.f90 delete mode 100644 libgomp/testsuite/libgomp.oacc-fortran/print-1-nvptx.f90 diff --git a/libgfortran/ChangeLog.omp b/libgfortran/ChangeLog.omp index b08c264daf9..925575e65fa 100644 --- a/libgfortran/ChangeLog.omp +++ b/libgfortran/ChangeLog.omp @@ -1,3 +1,9 @@ +2023-01-20 Thomas Schwinge + Andrew Stubbs + + * configure: Regenerate. + * configure.ac: No longer set LIBGFOR_MINIMAL for nvptx. + 2023-01-20 Thomas Schwinge PR target/85463 diff --git a/libgfortran/configure b/libgfortran/configure index ae64dca3114..3e5c931d4ad 100755 --- a/libgfortran/configure +++ b/libgfortran/configure @@ -6230,17 +6230,12 @@ else fi -# For GPU offloading, not everything in libfortran can be supported. -# Currently, the only target that has this problem is nvptx. The -# following is a (partial) list of features that are unsupportable on -# this particular target: -# * Constructors -# * alloca -# * C library support for I/O, with printf as the one notable exception -# * C library support for other features such as signal, environment -# variables, time functions - - if test "x${target_cpu}" = xnvptx; then +# "Minimal" mode is for targets that cannot (yet) support all features of +# libgfortran. It avoids the need for working constructors, alloca, and C +# library support for I/O, signals, environment variables, time functions, etc. +# At present there are no targets that require this mode. + + if false; then LIBGFOR_MINIMAL_TRUE= LIBGFOR_MINIMAL_FALSE='#' else diff --git a/libgfortran/configure.ac b/libgfortran/configure.ac index 97cc490cb5e..e5552949cc6 100644 --- a/libgfortran/configure.ac +++ b/libgfortran/configure.ac @@ -222,17 +222,12 @@ AM_CONDITIONAL(LIBGFOR_USE_SYMVER, [test "x$gfortran_use_symver" != xno]) AM_CONDITIONAL(LIBGFOR_USE_SYMVER_GNU, [test "x$gfortran_use_symver" = xgnu]) AM_CONDITIONAL(LIBGFOR_USE_SYMVER_SUN, [test "x$gfortran_use_symver" = xsun]) -# For GPU offloading, not everything in libfortran can be supported. -# Currently, the only target that has this p