Building OpenCoarrays as part of building gfortran

Damian Rouson damian@sourceryinstitute.org
Mon May 4 17:30:00 GMT 2015


Toon,

My apologies for not responding to this email sooner.  I recently started automatically filtering the gfortran mailing list emails into a dedicated inbox, but I haven’t been checking that inbox regularly so I just saw this over the weekend.

For now, I am just replying to cc the OpenCoarrays mailing list so others on the team can see your email.  At first glance, I think the issues you encountered were simple setup or coding issues due to mistakes I made in some tests that I’m pretty sure I can fix easily.  I’ll respond in greater detail a bit later.

Regarding the lack of a “configure,” I would like to transition toward CMake being the preferred build system.  Unless others disagree, I will soon edit the INSTALL file so that it deprecates the use of static Makefiles for building OpenCoarrays.

________________________________
Damian Rouson, Ph.D., P.E.
Founder & President, Sourcery, Inc.
510-600-2992 (mobile)
http://www.sourceryinstitute.org
http://rouson.youcanbook.me

> On Apr 24, 2015, at 9:09 AM, Toon Moene <toon@moene.org> wrote:
> 
> On 04/20/2015 11:07 PM, Toon Moene wrote:
> 
>> On 04/20/2015 07:24 PM, Damian Rouson wrote:
>> 
>>> Hi Toon,
>>> 
>>> Thanks for looking into this.  The installation instructions are at
>>> https://github.com/afanfa/opencoarrays/blob/master/INSTALL (we just
>>> moved the OpenCoarrays repository to GitHub a few days ago).  In case
>>> it helps, the overall process is to first install GCC 5, then build
>>> MPI with GCC 5 (assuming the default libcaf_mpi.a is desired), and
>>> then build OpenCoarrays with GCC 5.  Based on these steps, GCC 5 is
>>> actually a prerequisite for OpenCoarrays rather than the reverse so
>>> possibly my original request was misguided.  However, it would be
>>> great to see that OpenCoarrays gets built (along with some chosen MPI
>>> distribution — preferably MPICH) automatically whenever gfortran is
>>> built.  If others agree, then I’m open to suggestions about how best
>>> to proceed.
>> 
>> OK, I am going to try this this weekend (I have done all steps -
>> separately - before, so it should work [famous last words]).
>> 
>> I will report back to you.
> 
> This is what I did so far:
> 
> Downloaded gcc-5.1.0.tar.gz from mirror ftp.nluug.nl
> Downloaded openmpi-1.8.4.tar.gz from www.open-mpi.org
> Downloaded opencoarrays-master.zip from opencoarrays.org
> 
> Made a directory 'coarrays' in my home directory to group this stuff and changed directory to it (so everything below is in this subdirectory).
> 
> Build gcc-5 as follows (note, I rely on the various prerequisites as installed on my Debian Testing system):
> 
> tar zxvf ~/Downloads/gcc-5.1.0.tar.gz
> mkdir build-gcc  # Create a separate build directory
> cd build-gcc/    # for building gcc and go there.
> ../gcc-5.1.0/configure --prefix=$HOME/coarrays/install --with-gnu-as --with-gnu-ld --enable-languages=fortran --disable-multilib --disable-nls
> make -j16
> make install     # gcc(++)/gfortran now reside in $HOME/coarrays/install/bin
> 
> $ ls -l install/bin
> ...
> -rwxr-xr-x 4 toon toon 3545608 Apr 24 14:33 c++
> -rwxr-xr-x 1 toon toon 3540832 Apr 24 14:33 cpp
> -rwxr-xr-x 4 toon toon 3545608 Apr 24 14:33 g++
> -rwxr-xr-x 3 toon toon 3536368 Apr 24 14:33 gcc
> -rwxr-xr-x 2 toon toon  142312 Apr 24 14:33 gcc-ar
> -rwxr-xr-x 2 toon toon  142216 Apr 24 14:33 gcc-nm
> -rwxr-xr-x 2 toon toon  142232 Apr 24 14:33 gcc-ranlib
> -rwxr-xr-x 1 toon toon 2449808 Apr 24 14:33 gcov
> -rwxr-xr-x 1 toon toon 2327648 Apr 24 14:33 gcov-tool
> -rwxr-xr-x 2 toon toon 3546616 Apr 24 14:33 gfortran
> 
> Build open-mpi in directory 'coarrays':
> 
> tar zxvf ~/Downloads/openmpi-1.8.4.tar.gz
> cd openmpi-1.8.4/
> (export PATH=$HOME/coarrays/install/bin:$PATH; export LD_LIBRARY_PATH=$HOME/coarrays/install/lib:$LD_LIBRARY_PATH; ./configure --prefix=$HOME/coarrays/install)
> (export PATH=$HOME/coarrays/install/bin:$PATH; export LD_LIBRARY_PATH=$HOME/coarrays/install/lib:$LD_LIBRARY_PATH; make)
> (export PATH=$HOME/coarrays/install/bin:$PATH; export LD_LIBRARY_PATH=$HOME/coarrays/install/lib:$LD_LIBRARY_PATH; make install)
> 
> Now the openmpi libraries, built with gcc-5, reside in $HOME/coarrays/install/lib:
> 
> $ ls -l install/lib
> ...
> lrwxrwxrwx 1 toon toon      22 Apr 24 14:48 libmpi_usempi.so -> libmpi_usempi.so.1.4.0
> lrwxrwxrwx 1 toon toon      22 Apr 24 14:48 libmpi_usempi.so.1 -> libmpi_usempi.so.1.4.0
> -rwxr-xr-x 1 toon toon    6416 Apr 24 14:48 libmpi_usempi.so.1.4.0
> 
> Then, making the opencoarrays library:
> 
> unzip ~/Downloads/opencoarrays-master.zip
> cd opencoarrays-master/
> (export PATH=$HOME/coarrays/install/bin:$PATH; export LD_LIBRARY_PATH=$HOME/coarrays/install/lib:$LD_LIBRARY_PATH; make)
> cp mpi/libcaf_mpi.a /home/toon/coarrays/install/lib/
> ranlib /home/toon/coarrays/install/lib/libcaf_mpi.a
> 
> [ Note that the coarray build doesn't have a configure, nor an install
>  phase; perhaps that should be changed. ]
> 
> $ ls -l install/lib
> ...
> -rw-r--r-- 1 toon toon  121226 Apr 24 14:52 libcaf_mpi.a
> 
> Then I tried some of the tests.
> 
> I restricted myself to testcases for which there was a makefile.
> 
> toon@moene:~/coarrays/opencoarrays-master/tests/src/coarrayHelloWorld$ (export PATH=$HOME/coarrays/install/bin:$PATH; export LD_LIBRARY_PATH=$HOME/coarrays/install/lib:$LD_LIBRARY_PATH; make)
> mpif90 -fcoarray=lib  -c hello_multiverse.F90
> mpif90 -fcoarray=lib  -L /opt/opencoarrays/lib hello_multiverse.o -o hello_multiverse -lcaf_mpi
> toon@moene:~/coarrays/opencoarrays-master/tests/src/coarrayHelloWorld$ (export PATH=$HOME/coarrays/install/bin:$PATH; export LD_LIBRARY_PATH=$HOME/coarrays/install/lib:$LD_LIBRARY_PATH; mpirun -np 8 ./hello_multiverse)
> Greetings from image  1 of  8
> Greetings from image  2 of  8
> Greetings from image  3 of  8
> Greetings from image  4 of  8
> Greetings from image  5 of  8
> Greetings from image  6 of  8
> Greetings from image  7 of  8
> Greetings from image  8 of  8
> Test passed.
> 
> [Well, that was easy ]
> 
> toon@moene:~/coarrays/opencoarrays-master/tests/src/pde_solvers/BurgersMPI$ (export PATH=$HOME/coarrays/install/bin:$PATH; export LD_LIBRARY_PATH=$HOME/coarrays/install/lib:$LD_LIBRARY_PATH; make)
> cp ../include-files/intel_capabilities.txt compiler_capabilities.txt
> cp ../include-files/intel_capabilities.txt ../library/compiler_capabilities.txt
> mpiifort -Bdynamic -standard-semantics -O3 -L/usr/lib64   -c ../library/object_interface.F90
> make: mpiifort: Command not found
> Makefile:66: recipe for target 'object_interface.o' failed
> make: *** [object_interface.o] Error 127
> 
> [OK, that didn't work due to mpiifort (the Fortran compiler wrapper) not being found]
> 
> toon@moene:~/coarrays/opencoarrays-master/tests/src/pde_solvers/coarrayHeatSimplified$ (export PATH=$HOME/coarrays/install/bin:$PATH; export LD_LIBRARY_PATH=$HOME/coarrays/install/lib:$LD_LIBRARY_PATH; make)
> mpif90 -fcoarray=lib  -c local_field.f90
> local_field.f90:58:34:
> 
>   pure subroutine assign_array(lhs,rhs)
>                                  1
> Error: INTENT(OUT) argument 'lhs' of pure procedure 'assign_array' at (1) may not be polymorphic
> Makefile:32: recipe for target 'local_field.o' failed
> make: *** [local_field.o] Error 1
> 
> [This looks like a Fortran error - not coarray related]
> 
> toon@moene:~/coarrays/opencoarrays-master/tests/src/pde_solvers/coarrayBurgers$ (export PATH=$HOME/coarrays/install/bin:$PATH; export LD_LIBRARY_PATH=$HOME/coarrays/install/lib:$LD_LIBRARY_PATH; make)
> cp ./include-files/gfortran_capabilities.txt ./library/compiler_capabilities.txt
> mpif90 -fcoarray=lib  -c ./library/object_interface.F90
> mpif90 -fcoarray=lib  -c ./library/ForTrilinos_assertion_utility.F90
> mpif90 -fcoarray=lib  -c ./library/ForTrilinos_error.F90
> mpif90 -fcoarray=lib  -c local_field.F90
> mpif90 -fcoarray=lib  -c ./library/co_object_interface.F90
> mpif90 -fcoarray=lib  -c global_field.F90
> mpif90 -fcoarray=lib  -c main.F90
> mpif90 -fcoarray=lib -L ../../../../mpi  main.o local_field.o global_field.o co_object_interface.o object_interface.o ForTrilinos_assertion_utility.o ForTrilinos_error.o  -o burgers  -lcaf_mpi
> toon@moene:~/coarrays/opencoarrays-master/tests/src/pde_solvers/coarrayBurgers$ (export PATH=$HOME/coarrays/install/bin:$PATH; export LD_LIBRARY_PATH=$HOME/coarrays/install/lib:$LD_LIBRARY_PATH; mpirun -np 8 ./burgers)
> -------------------------------------------------------
> Primary job  terminated normally, but 1 process returned
> a non-zero exit code.. Per user-direction, the job has been aborted.
> -------------------------------------------------------
> ./burgers: /usr/lib/x86_64-linux-gnu/libgfortran.so.3: version `GFORTRAN_1.6' not found (required by ./burgers)
> ./burgers: /usr/lib/x86_64-linux-gnu/libgfortran.so.3: version `GFORTRAN_1.6' not found (required by ./burgers)
> ./burgers: /usr/lib/x86_64-linux-gnu/libgfortran.so.3: version `GFORTRAN_1.6' not found (required by ./burgers)
> ./burgers: /usr/lib/x86_64-linux-gnu/libgfortran.so.3: version `GFORTRAN_1.6' not found (required by ./burgers)
> ./burgers: /usr/lib/x86_64-linux-gnu/libgfortran.so.3: version `GFORTRAN_1.6' not found (required by ./burgers)
> ./burgers: /usr/lib/x86_64-linux-gnu/libgfortran.so.3: version `GFORTRAN_1.6' not found (required by ./burgers)
> ./burgers: /usr/lib/x86_64-linux-gnu/libgfortran.so.3: version `GFORTRAN_1.6' not found (required by ./burgers)
> 
> [Primary job termiated normally ... almost correct]
> 
> Thanks for your, Alessandro's and Tobias' work on coarrays !
> 
> -- 
> Toon Moene - e-mail: toon@moene.org - phone: +31 346 214290
> Saturnushof 14, 3738 XG  Maartensdijk, The Netherlands
> At home: http://moene.org/~toon/; weather: http://moene.org/~hirlam/
> Progress of GNU Fortran: http://gcc.gnu.org/wiki/GFortran#news



More information about the Fortran mailing list