Recently on the NASA NAS supercomputer, I noticed something in my CMake output that surprised me when using HPE MPT as the MPI stack.
As an example, I whipped up a simple hello world CMakeLists.txt:
project(helloworld LANGUAGES Fortran) cmake_minimum_required(VERSION 3.21) find_package(MPI REQUIRED) add_executable(helloworld.exe helloworld.F90) target_link_libraries(helloworld.exe PRIVATE MPI::MPI_Fortran)
and it works:
$ mpiexec -np 4 ./helloworld.exe MPI Version: 3.1 MPI Library Version: HPE MPT 2.23 11/19/20 04:21:56 Process 0 of 4 is on r901i4n27 Process 1 of 4 is on r901i4n27 Process 2 of 4 is on r901i4n27 Process 3 of 4 is on r901i4n27
But the oddity is in the CMake output:
$ cmake .. -DCMAKE_Fortran_COMPILER=ifort -- The Fortran compiler identification is Intel 2021.2.0.20210228 -- Detecting Fortran compiler ABI info -- Detecting Fortran compiler ABI info - done -- Check for working Fortran compiler: /nasa/intel/Compiler/2021.2.0/compiler/2021.2.0/linux/bin/intel64/ifort - skipped -- Checking whether /nasa/intel/Compiler/2021.2.0/compiler/2021.2.0/linux/bin/intel64/ifort supports Fortran 90 -- Checking whether /nasa/intel/Compiler/2021.2.0/compiler/2021.2.0/linux/bin/intel64/ifort supports Fortran 90 - yes -- Found MPI_Fortran: /lib64/libpthread.so (found version "3.1") -- Found MPI: TRUE (found version "3.1") -- Configuring done -- Generating done -- Build files have been written to: /home3/mathomp4/F90Files/HelloWorldCMake/build
-- Found MPI_Fortran: /lib64/libpthread.so (found version "3.1")
Obviously, the MPI library is not pthread. If I explicitly look at
-- MPI_Fortran_LIBRARIES: /lib64/libpthread.so;/nasa/hpe/mpt/2.23_cent7/lib/libmpi.so
So it looks like
find_package() just outputs the first library in the list rather than all of them? Is this expected behavior? Is there perhaps a way to have it spit out the whole list? If I got confused that the MPI library it found was
libpthread, others users of the code I work on might as well.