From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa1.mentor.iphmx.com (esa1.mentor.iphmx.com [68.232.129.153]) by sourceware.org (Postfix) with ESMTPS id D36653858C36; Fri, 20 Jan 2023 21:16:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D36653858C36 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.97,233,1669104000"; d="scan'208,223";a="97832772" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa1.mentor.iphmx.com with ESMTP; 20 Jan 2023 13:16:07 -0800 IronPort-SDR: oJK1t4d9vL5ZjaIyN1jeq9NOluGyas/kwIVDtEoCjSGdcBrKhXTIrlQslL6gn6HPz4HgvaTqOX PnJT8DhiARXwTmQIvRY6o65u+ATagBpUphDAmP6KYB3+TxHO/UY3aiq81cNpX+lvzxq1/7y+gs qhDnM8ebUWJqqr9/L/e37505VhUEObd+mJYHrFUcynk3jH/BqUnwqzXFJexoeH6/FI36ifAc6C Wj6A6kZ0vNxhPQnJkYZ2bVcVhP4DQYqjT5/N3xTei9eAKZjOIC64/nbM/NOmJZSNwDsdPDoW0Q Fw0= From: Thomas Schwinge To: CC: , Tom de Vries , Andrew Stubbs Subject: nvptx, libgfortran: Switch out of "minimal" mode In-Reply-To: <87pmb82a0t.fsf@dem-tschwing-1.ger.mentorg.com> References: <87pmb82a0t.fsf@dem-tschwing-1.ger.mentorg.com> User-Agent: Notmuch/0.29.1+93~g67ed7df (https://notmuchmail.org) Emacs/26.3 (x86_64-pc-linux-gnu) Date: Fri, 20 Jan 2023 22:16:00 +0100 Message-ID: <87mt6c29gv.fsf@dem-tschwing-1.ger.mentorg.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-15.mgc.mentorg.com (139.181.222.15) To svr-ies-mbx-10.mgc.mentorg.com (139.181.222.10) X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,SPF_HELO_PASS,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --=-=-= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=C3=BC=C3=9Fe Thomas ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstra=C3=9Fe 201= , 80634 M=C3=BCnchen; Gesellschaft mit beschr=C3=A4nkter Haftung; Gesch=C3= =A4ftsf=C3=BChrer: Thomas Heurung, Frank Th=C3=BCrauf; Sitz der Gesellschaf= t: M=C3=BCnchen; Registergericht M=C3=BCnchen, HRB 106955 --=-=-= Content-Type: text/x-diff; charset="utf-8" Content-Disposition: inline; filename="0001-nvptx-libgfortran-Switch-out-of-minimal-mode.patch" Content-Transfer-Encoding: quoted-printable >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 =20 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 =20 =20 -# 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}" =3D 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=3D LIBGFOR_MINIMAL_FALSE=3D'#' 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" !=3D xno]) AM_CONDITIONAL(LIBGFOR_USE_SYMVER_GNU, [test "x$gfortran_use_symver" =3D x= gnu]) AM_CONDITIONAL(LIBGFOR_USE_SYMVER_SUN, [test "x$gfortran_use_symver" =3D x= sun]) =20 -# 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 - -AM_CONDITIONAL(LIBGFOR_MINIMAL, [test "x${target_cpu}" =3D xnvptx]) +# "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. + +AM_CONDITIONAL(LIBGFOR_MINIMAL, false) =20 # Some compiler target support may have limited support for integer # or floating point numbers =E2=80=93 or may want to reduce the libgfortra= n size diff --git a/libgomp/ChangeLog.omp b/libgomp/ChangeLog.omp index 32aa9705296..30b1e558ea3 100644 --- a/libgomp/ChangeLog.omp +++ b/libgomp/ChangeLog.omp @@ -1,5 +1,12 @@ 2023-01-20 Thomas Schwinge =20 + * 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. + * plugin/plugin-nvptx.c (nvptx_do_global_cdtors): New. (nvptx_close_device, GOMP_OFFLOAD_load_image) (GOMP_OFFLOAD_unload_image): Call it. diff --git a/libgomp/testsuite/libgomp.fortran/target-print-1-nvptx.f90 b/l= ibgomp/testsuite/libgomp.fortran/target-print-1-nvptx.f90 deleted file mode 100644 index a89c9c33484..00000000000 --- a/libgomp/testsuite/libgomp.fortran/target-print-1-nvptx.f90 +++ /dev/null @@ -1,11 +0,0 @@ -! Ensure that write on the offload device works, nvptx offloading variant. - -! This doesn't compile: for nvptx offloading we're using a minimal libgfor= tran -! configuration. -! { dg-do link } ! ..., but still apply 'dg-do run' options. -! { dg-xfail-if "minimal libgfortran" { offload_target_nvptx } } - -! Skip duplicated testing. -! { dg-skip-if "separate file" { ! offload_target_nvptx } } - -include 'target-print-1.f90' diff --git a/libgomp/testsuite/libgomp.fortran/target-print-1.f90 b/libgomp= /testsuite/libgomp.fortran/target-print-1.f90 index 327bb22cb6d..9ac70e5a85f 100644 --- a/libgomp/testsuite/libgomp.fortran/target-print-1.f90 +++ b/libgomp/testsuite/libgomp.fortran/target-print-1.f90 @@ -3,9 +3,6 @@ ! { dg-do run } ! { dg-output "The answer is 42(\n|\r\n|\r)+" } =20 -! Separate file 'target-print-1-nvptx.f90' for nvptx offloading. -! { dg-skip-if "separate file" { offload_target_nvptx } } - program main implicit none integer :: var =3D 42 diff --git a/libgomp/testsuite/libgomp.oacc-fortran/error_stop-2.f b/libgom= p/testsuite/libgomp.oacc-fortran/error_stop-2.f index 5951e8cbe64..bbb4b55ef2c 100644 --- a/libgomp/testsuite/libgomp.oacc-fortran/error_stop-2.f +++ b/libgomp/testsuite/libgomp.oacc-fortran/error_stop-2.f @@ -17,7 +17,9 @@ =20 ! { dg-output "CheCKpOInT(\n|\r\n|\r)+" } =20 -! { dg-output "ERROR STOP 35(\n|\r\n|\r)+" } +! '_gfortran_error_stop_numeric' -> '_gfortrani_st_printf' -> [...] +! overflows the stack for nvptx offloading, thus XFAILed. +! { dg-output "ERROR STOP 35(\n|\r\n|\r)+" { xfail openacc_nvidia_accel_se= lected } } ! ! In gfortran's main program, libfortran's set_options is called - which s= ets ! compiler_options.backtrace =3D 1 by default. For an offload libgfortran= , this diff --git a/libgomp/testsuite/libgomp.oacc-fortran/print-1-nvptx.f90 b/lib= gomp/testsuite/libgomp.oacc-fortran/print-1-nvptx.f90 deleted file mode 100644 index 866c8654355..00000000000 --- a/libgomp/testsuite/libgomp.oacc-fortran/print-1-nvptx.f90 +++ /dev/null @@ -1,11 +0,0 @@ -! Ensure that write on the offload device works, nvptx offloading variant. - -! This doesn't compile: for nvptx offloading we're using a minimal libgfor= tran -! configuration. -! { dg-do link } ! ..., but still apply 'dg-do run' options. -! { dg-xfail-if "minimal libgfortran" { offload_target_nvptx } } - -! Skip duplicated testing. -! { dg-skip-if "separate file" { ! offload_target_nvptx } } - -include 'print-1.f90' diff --git a/libgomp/testsuite/libgomp.oacc-fortran/print-1.f90 b/libgomp/t= estsuite/libgomp.oacc-fortran/print-1.f90 index d2f89d915f8..d04503a0249 100644 --- a/libgomp/testsuite/libgomp.oacc-fortran/print-1.f90 +++ b/libgomp/testsuite/libgomp.oacc-fortran/print-1.f90 @@ -2,9 +2,8 @@ =20 ! { dg-do run } ! { dg-output "The answer is 42(\n|\r\n|\r)+" } - -! Separate file 'print-1-nvptx.f90' for nvptx offloading. -! { dg-skip-if "separate file" { offload_target_nvptx } } +! The 'write' overflows the stack for nvptx offloading, thus XFAILed. +! { dg-xfail-run-if TODO { openacc_nvidia_accel_selected } } =20 ! { dg-additional-options "-fopt-info-note-omp" } ! { dg-additional-options "-foffload=3D-fopt-info-note-omp" } diff --git a/libgomp/testsuite/libgomp.oacc-fortran/stop-2.f b/libgomp/test= suite/libgomp.oacc-fortran/stop-2.f index fe7ee37813a..394de034b1f 100644 --- a/libgomp/testsuite/libgomp.oacc-fortran/stop-2.f +++ b/libgomp/testsuite/libgomp.oacc-fortran/stop-2.f @@ -17,7 +17,9 @@ =20 ! { dg-output "CheCKpOInT(\n|\r\n|\r)+" } =20 -! { dg-output "STOP 35(\n|\r\n|\r)+" } +! '_gfortran_error_stop_numeric' -> '_gfortrani_st_printf' -> [...] +! overflows the stack for nvptx offloading, thus XFAILed. +! { dg-output "STOP 35(\n|\r\n|\r)+" { xfail openacc_nvidia_accel_selected= } } ! ! PR85463. The 'exit' implementation used with nvptx ! offloading is a little bit different. --=20 2.25.1 --=-=-=--