Open MPI logo

Open MPI Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Development mailing list

Subject: Re: [OMPI devel] openmpi-1.8.2rc2 and f08 interface built with PGI-14.7 causes link error
From: Gilles Gouaillardet (gilles.gouaillardet_at_[hidden])
Date: 2014-07-30 00:41:24


Paul,

i am sorry i missed that.

and you are right, 1.8.1 and 1.8 from svn differs :

from svn (config/ompi_setup_mpi_fortran.m4)
    # Per https://svn.open-mpi.org/trac/ompi/ticket/4590, if the
    # Fortran compiler doesn't support PROCEDURE in the way we
    # want/need, disable the mpi_f08 module.
    OMPI_FORTRAN_HAVE_PROCEDURE=0
    AS_IF([test $OMPI_WANT_FORTRAN_USEMPIF08_BINDINGS -eq 1 -a \
           $OMPI_BUILD_FORTRAN_USEMPIF08_BINDINGS -eq 1],
          [ # Does the compiler support "procedure"
           OMPI_FORTRAN_CHECK_PROCEDURE(
               [OMPI_FORTRAN_HAVE_PROCEDURE=1],
               [OMPI_FORTRAN_HAVE_PROCEDURE=0
                OMPI_BUILD_FORTRAN_USEMPIF08_BINDINGS=0])])

1.8.1 does not disqualify f08 bindings if PROCEDURE is not supported.
/* for the sake of completion, in some cases, 1.8.1 *might* disqualify
f08 bindings if PROCEDURE *is* supported :
    # Per https://svn.open-mpi.org/trac/ompi/ticket/4157, temporarily
    # disqualify the fortran compiler if it exhibits the behavior
    # described in that ticket. Short version: OMPI does something
    # non-Fortran that we don't have time to fix 1.7.4. So we just
    # disqualify Fortran compilers who actually enforce this issue,
    # and we'll fix OMPI to be Fortran-compliant after 1.7.4
    AS_IF([test $OMPI_WANT_FORTRAN_USEMPIF08_BINDINGS -eq 1 && \
           test $OMPI_BUILD_FORTRAN_USEMPIF08_BINDINGS -eq 1 && \
           test $OMPI_FORTRAN_HAVE_PROCEDURE -eq 1 && \
           test $OMPI_FORTRAN_HAVE_ABSTRACT -eq 1],
          [ # Check for ticket 4157
           OMPI_FORTRAN_CHECK_TICKET_4157(
               [],
               [ # If we don't have this, don't build the mpi_f08 module
                OMPI_BUILD_FORTRAN_USEMPIF08_BINDINGS=0])])

from the sources and #4590, f08 binding is intentionally disabled since
PGI compilers does not support PROCEDURE.
i agree this is really bad for PGI users :-(

Jeff, can you comment on that ?

Cheers,

Gilles

On 2014/07/30 13:25, Paul Hargrove wrote:
> Giles,
>
> If you look more carefully at the output I provided you will see that 1.8.1
> *does* test for PROCEDURE support and finds it lacking. BOTH outputs
> include:
> checking if Fortran compiler supports PROCEDURE... no
>
> However in the 1.8.1 case that is apparently not sufficient to disqualify
> building the f08 module.
>
> The test does fail in both 1.8.1 and 1.8.2rc2.
> Here is the related portion of config.log from one of them:
>
> configure:57708: checking if Fortran compiler supports PROCEDURE
> configure:57735: pgf90 -c -g conftest.f90 >&5 PGF90-S-0155-Illegal
> procedure interface - mpi_user_function (conftest.f90: 12)
> PGF90-S-0155-Illegal procedure interface - mpi_user_function (conftest.f90:
> 12) 0 inform, 0 warnings, 2 severes, 0 fatal for test_proc configure:57735:
> $? = 2 configure: failed program was: | MODULE proc_mod | INTERFACE |
> SUBROUTINE MPI_User_function | END SUBROUTINE | END INTERFACE | END MODULE
> proc_mod | | PROGRAM test_proc | INTERFACE | SUBROUTINE binky(user_fn) |
> USE proc_mod | PROCEDURE(MPI_User_function) :: user_fn | END SUBROUTINE |
> END INTERFACE | END PROGRAM configure:57751: result: no
>
> Other than the line numbers the 1.8.1 and 1.8.2rc2 output are identical in
> this respect.
>
> The test also fails run manually:
>
> {hargrove_at_hopper04 OMPI}$ pgf90 -c -g conftest.f90 PGF90-S-0155-Illegal
> procedure interface - mpi_user_function (conftest.f90: 12)
> PGF90-S-0155-Illegal procedure interface - mpi_user_function (conftest.f90:
> 12) 0 inform, 0 warnings, 2 severes, 0 fatal for test_proc
> {hargrove_at_hopper04 OMPI}$ pgf90 -V pgf90 13.10-0 64-bit target on x86-64
> Linux -tp shanghai The Portland Group - PGI Compilers and Tools Copyright
> (c) 2013, NVIDIA CORPORATION. All rights reserved.
>
> -Paul
>
> On Tue, Jul 29, 2014 at 9:09 PM, Gilles Gouaillardet <
> gilles.gouaillardet_at_[hidden]> wrote:
>
>> Paul,
>>
>> from the logs, the only difference i see is about Fortran PROCEDURE.
>>
>> openpmi 1.8 (svn checkout) does not build the usempif08 bindings if
>> PROCEDURE is not supported.
>>
>> from the logs, openmpi 1.8.1 does not check whether PROCEDURE is supported
>> or not
>>
>> here is the sample program to check PROCEDURE (from
>> config/ompi_fortran_check_procedure.m4)
>>
>> MODULE proc_mod
>> INTERFACE
>> SUBROUTINE MPI_User_function
>> END SUBROUTINE
>> END INTERFACE
>> END MODULE proc_mod
>>
>> PROGRAM test_proc
>> INTERFACE
>> SUBROUTINE binky(user_fn)
>> USE proc_mod
>> PROCEDURE(MPI_User_function) :: user_fn
>> END SUBROUTINE
>> END INTERFACE
>> END PROGRAM
>>
>> i do not have a PGI license, could you please confirm the PGI compiler
>> fails compiling the test above ?
>>
>> Cheers,
>>
>> Gilles
>>
>> On 2014/07/30 12:54, Paul Hargrove wrote:
>>
>> On Tue, Jul 29, 2014 at 6:38 PM, Paul Hargrove <phhargrove_at_[hidden]> <phhargrove_at_[hidden]> wrote:
>>
>>
>> On Tue, Jul 29, 2014 at 6:33 PM, Paul Hargrove <phhargrove_at_[hidden]> <phhargrove_at_[hidden]> wrote:
>>
>>
>> I am trying again with an explicit --enable-mpi-fortran=usempi at
>> configure time to see what happens.
>>
>>
>> Of course that should have said --enable-mpi-fortran=usempif08
>>
>>
>> I've switched to using PG13.6 for my testing.
>> I find that even when I pass that flag I see that use_mpi_f08 is NOT
>> enabled:
>>
>> checking Fortran compiler ignore TKR syntax... not cached; checking variants
>> checking for Fortran compiler support of TYPE(*), DIMENSION(*)... no
>> checking for Fortran compiler support of !DEC$ ATTRIBUTES NO_ARG_CHECK... no
>> checking for Fortran compiler support of !$PRAGMA IGNORE_TKR... no
>> checking for Fortran compiler support of !DIR$ IGNORE_TKR... yes
>> checking Fortran compiler ignore TKR syntax... 1:real, dimension(*):!DIR$
>> IGNORE_TKR
>> checking if Fortran compiler supports ISO_C_BINDING... yes
>> checking if building Fortran 'use mpi' bindings... yes
>> checking if Fortran compiler supports SUBROUTINE BIND(C)... yes
>> checking if Fortran compiler supports TYPE, BIND(C)... yes
>> checking if Fortran compiler supports TYPE(type), BIND(C, NAME="name")...
>> yes
>> checking if Fortran compiler supports PROCEDURE... no
>> *checking if building Fortran 'use mpi_f08' bindings... no*
>>
>> Contrast that to openmpi-1.8.1 and the same compiler:
>>
>> checking Fortran compiler ignore TKR syntax... not cached; checking variants
>> checking for Fortran compiler support of TYPE(*), DIMENSION(*)... no
>> checking for Fortran compiler support of !DEC$ ATTRIBUTES NO_ARG_CHECK... no
>> checking for Fortran compiler support of !$PRAGMA IGNORE_TKR... no
>> checking for Fortran compiler support of !DIR$ IGNORE_TKR... yes
>> checking Fortran compiler ignore TKR syntax... 1:real, dimension(*):!DIR$
>> IGNORE_TKR
>> checking if building Fortran 'use mpi' bindings... yes
>> checking if Fortran compiler supports ISO_C_BINDING... yes
>> checking if Fortran compiler supports SUBROUTINE BIND(C)... yes
>> checking if Fortran compiler supports TYPE, BIND(C)... yes
>> checking if Fortran compiler supports TYPE(type), BIND(C, NAME="name")...
>> yes
>> checking if Fortran compiler supports optional arguments... yes
>> checking if Fortran compiler supports PRIVATE... yes
>> checking if Fortran compiler supports PROTECTED... yes
>> checking if Fortran compiler supports ABSTRACT... yes
>> checking if Fortran compiler supports ASYNCHRONOUS... yes
>> checking if Fortran compiler supports PROCEDURE... no
>> checking size of Fortran type(test_mpi_handle)... 4
>> checking Fortran compiler F08 assumed rank syntax... not cached; checking
>> checking for Fortran compiler support of TYPE(*), DIMENSION(..)... no
>> checking Fortran compiler F08 assumed rank syntax... no
>> checking which mpi_f08 implementation to build... "good" compiler, no array
>> subsections
>> *checking if building Fortran 'use mpi_f08' bindings... yes*
>>
>> So, somewhere between 1.8.1 and 1.8.2rc2 something has happened in the
>> configure logic to disqualify the pgf90 compiler.
>>
>> I also surprised to see 1.8.2rc2 performing *fewer* tests of FC then 1.8.1
>> did (unless they moved elsewhere?).
>>
>> In the end I cannot reproduce the originally reported problem for the
>> simple reason that I instead see:
>>
>> {hargrove_at_hopper04 openmpi-1.8.2rc2-linux-x86_64-pgi-14.4}$
>> ./INST/bin/mpif90 ../test.f
>> PGF90-F-0004-Unable to open MODULE file mpi_f08.mod (../test.f: 2)
>> PGF90/x86-64 Linux 14.4-0: compilation aborted
>>
>>
>> Tetsuya Mishima,
>>
>> Is it possible that your installation of 1.8.2rc2 was to the same prefix as
>> an older build?
>> It that is the case, you may have the mpi_f08.mod from the older build even
>> though no f08 support is in the new build.
>>
>>
>> -Paul
>>
>>
>>
>>
>>
>> _______________________________________________
>> devel mailing listdevel_at_[hidden]
>> Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/devel
>> Link to this post: http://www.open-mpi.org/community/lists/devel/2014/07/15342.php
>>
>>
>>
>> _______________________________________________
>> devel mailing list
>> devel_at_[hidden]
>> Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/devel
>> Link to this post:
>> http://www.open-mpi.org/community/lists/devel/2014/07/15343.php
>>
>
>
>
>
> _______________________________________________
> devel mailing list
> devel_at_[hidden]
> Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/devel
> Link to this post: http://www.open-mpi.org/community/lists/devel/2014/07/15344.php