fortran-lang / fpm

Fortran Package Manager (fpm)
https://fpm.fortran-lang.org
MIT License
890 stars 100 forks source link

Can not build MPI-applications with oneAPI 2025.0 #1090

Open aradi opened 2 weeks ago

aradi commented 2 weeks ago

Description

Build of any arbitrary project with MPI-dependency fails when using oneAPI 2025.0.

Executing

fpm new test
cd test
echo -e "[dependencies]\nmpi =\"*\"" >> fpm.toml
FPM_FC=ifx fpm build

results in

<ERROR> *cmd_build* Model error: local INTEL MPI library does not support -v
STOP 1

Note: oneAPI 2024.2 seems to work.

Expected Behaviour

Building the project as expected without error message.

Version of fpm

0.10.1

Platform and Architecture

Linux/x86_64

Additional Information

No response

perazz commented 2 weeks ago

@aradi what is failing is the check that the Intel MPI wrapper works. Does mpiifort -v still return wrapper information? From this discussion it seems like there is a chance that for ifx the new wrappers will be mpiifx etc, in which case fpm needs an update

aradi commented 2 weeks ago

Funny enough, both wrappers exist:

❯ mpiifx -v
mpiifx for the Intel(R) MPI Library 2021.14 for Linux*
Copyright Intel Corporation.
ifx version 2025.0.0

and also

❯ mpiifort -v
mpiifx for the Intel(R) MPI Library 2021.14 for Linux*
Copyright Intel Corporation.
/opt/intel/oneapi/mpi/2021.14/bin/mpiifx: line 715: ifort: command not found

Latter returns with a non-zero exit code (although delivering the necessary information. As ifort had been removed from oneAPI package, fpm should check probably first mpiifx, indeed.

MatthAlex commented 1 week ago

Related, but oneAPI 2024.1 instead, where ifort still exists:

On Spack, Intel installed version 2024.1.0 and Intel MPI version 2021.12.1 (the 2024.1.0 equivalent that is).

$ fpm build --compiler mpiifort
<ERROR> *cmd_build* Model error: local INTEL MPI library does not support -v
STOP 1
$ fpm build --compiler mpiifx
<ERROR> *cmd_build* Model error: local INTEL MPI library does not support -v
STOP 1
$ fpm build --compiler mpif90
[100%] Project compiled successfully.

On their own:

$ mpiifort -v
mpiifx for the Intel(R) MPI Library @IMPI_OFFICIALVERSION@ for Linux*
Copyright Intel Corporation.
ifort: remark #10448: Intel(R) Fortran Compiler Classic (ifort) is now deprecated and will be discontinued late 2024. Intel recommends that customers transition now to using the LLVM-based Intel(R) Fortran Compiler (ifx) for continued Windows* and Linux* support, new language support, new language features, and optimizations. Use '-diag-disable=10448' to disable this message.
ifort version 2021.12.0
ld    /lib/../lib64/crt1.o /lib/../lib64/crti.o [links all paths]
ld: /share/apps/rocky9/spack/apps/linux-rocky9-x86_64_v4/gcc-12.2.0/intel-oneapi-compilers/2024.1.0-bdqsx5f/compiler/2024.1/bin/../lib/for_main.o: in function `main':
for_main.c:(.text+0x19): undefined reference to `MAIN__'

$ mpiifx -v
mpiifx for the Intel(R) MPI Library @IMPI_OFFICIALVERSION@ for Linux*
Copyright Intel Corporation.
ifx version 2024.1.0
ld    /lib/../lib64/crt1.o /lib/../lib64/crti.o [links all paths]
ld: /share/apps/rocky9/spack/apps/linux-rocky9-x86_64_v4/gcc-12.2.0/intel-oneapi-compilers/2024.1.0-bdqsx5f/compiler/2024.1/lib/for_main.o: in function `main':
for_main.c:(.text+0x19): undefined reference to `MAIN__'
perazz commented 1 week ago

Thanks, so it looks like there are two things:

1) new ifx-based wrappers need be implemented anyways

2) the most recent Intel wrappers (both mpiifort/mpiifx) have some internal issues/crashes (undefined reference to 'MAIN__' etc.). This makes their execution return a non-zero exit code, that fpm catches as an error ("command not supported")

So I would guess that updating fpm alone with the new ifx wrappers would not solve this issue

MatthAlex commented 1 week ago

For 2. I think I'll open an issue on spack as well. It might be on their end.

Edit: spack issue here.