Skip to content

Commit 0066512

Browse files
authored
[metapackage] fix/extend Intel LLVM MPI (#1134)
2 parents b443ce5 + 856dffe commit 0066512

File tree

3 files changed

+50
-13
lines changed

3 files changed

+50
-13
lines changed

.github/actions/setup-intel/action.yml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ inputs:
66
description: 'Operating system of the runner. Must contain "windows" or "ubuntu".'
77
required: true
88
type: string
9+
10+
version:
11+
description: 'Intel oneAPI installer version for Ubuntu (e.g. 2024.1.0).'
12+
required: false
13+
default: '2024.1.0'
14+
type: string
915

1016
runs:
1117
using: "composite"
@@ -87,7 +93,7 @@ runs:
8793
uses: fortran-lang/setup-fortran@v1
8894
with:
8995
compiler: intel
90-
version: 2024.1.0 # Pinned until issue #1090 is resolved
96+
version: ${{ inputs.version }}
9197

9298
- name: (Ubuntu) Install Intel oneAPI MPI and build dependencies
9399
if: contains(inputs.os, 'ubuntu')

.github/workflows/meta.yml

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@ jobs:
3333
fail-fast: false
3434
matrix:
3535
include:
36-
- os: ubuntu-latest
37-
mpi: intel
3836
- os: ubuntu-latest
3937
mpi: openmpi
4038
- os: ubuntu-latest
@@ -43,6 +41,12 @@ jobs:
4341
mpi: openmpi
4442
- os: macos-13
4543
mpi: mpich
44+
- os: ubuntu-latest
45+
mpi: intel
46+
intel_version: "2024.1.0"
47+
- os: ubuntu-latest
48+
mpi: intel
49+
intel_version: "2025.0"
4650

4751
steps:
4852
- name: Checkout code
@@ -91,13 +95,13 @@ jobs:
9195
libnetcdf-dev libnetcdff-dev libopenblas-dev
9296
9397
# Intel
94-
9598
- name: Setup Intel Environment
9699
if: contains(matrix.mpi, 'intel')
97100
uses: ./.github/actions/setup-intel
98101
with:
99102
os: ${{ matrix.os }}
100-
103+
version: ${{ matrix.intel_version }}
104+
101105
- name: (Ubuntu) Build and Install HDF5 from source
102106
if: contains(matrix.os, 'ubuntu') && contains(matrix.mpi, 'intel')
103107
# Needs checkout if source code isn't available, adjust if needed

src/metapackage/fpm_meta_mpi.f90

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -761,8 +761,8 @@ subroutine mpi_wrappers(compiler,fort_wrappers,c_wrappers,cpp_wrappers)
761761
string_t(get_env('MPIf77','mpif77'))]
762762

763763
if (get_os_type()==OS_WINDOWS) then
764-
c_wrappers = [c_wrappers,string_t('mpicc.bat')]
765-
cpp_wrappers = [cpp_wrappers,string_t('mpicxx.bat')]
764+
c_wrappers = [c_wrappers,string_t('mpicc.bat')]
765+
cpp_wrappers = [cpp_wrappers,string_t('mpicxx.bat')]
766766
fort_wrappers = [fort_wrappers,string_t('mpifc.bat')]
767767
endif
768768

@@ -775,10 +775,9 @@ subroutine mpi_wrappers(compiler,fort_wrappers,c_wrappers,cpp_wrappers)
775775
fort_wrappers = [fort_wrappers,string_t('mpigfortran'),string_t('mpgfortran'),&
776776
string_t('mpig77'),string_t('mpg77')]
777777

778-
case (id_intel_classic_windows,id_intel_llvm_windows, &
779-
id_intel_classic_nix,id_intel_classic_mac,id_intel_llvm_nix,id_intel_llvm_unknown)
780-
781-
c_wrappers = [string_t(get_env('I_MPI_CC','mpiicc'))]
778+
case (id_intel_classic_windows,id_intel_classic_nix,id_intel_classic_mac)
779+
780+
c_wrappers = [string_t(get_env('I_MPI_CC' ,'mpiicc'))]
782781
cpp_wrappers = [string_t(get_env('I_MPI_CXX','mpiicpc'))]
783782
fort_wrappers = [string_t(get_env('I_MPI_F90','mpiifort'))]
784783

@@ -802,6 +801,32 @@ subroutine mpi_wrappers(compiler,fort_wrappers,c_wrappers,cpp_wrappers)
802801

803802
end if
804803

804+
case (id_intel_llvm_windows,id_intel_llvm_nix,id_intel_llvm_unknown)
805+
806+
c_wrappers = [string_t(get_env('I_MPI_CC' ,'mpiicx'))]
807+
cpp_wrappers = [string_t(get_env('I_MPI_CXX','mpiicpx'))]
808+
fort_wrappers = [string_t(get_env('I_MPI_F90','mpiifx'))]
809+
810+
! Also search MPI wrappers via the base MPI folder
811+
mpi_root = get_env('I_MPI_ROOT')
812+
if (mpi_root/="") then
813+
814+
mpi_root = join_path(mpi_root,'bin')
815+
816+
intel_wrap = join_path(mpi_root,'mpiifx')
817+
if (get_os_type()==OS_WINDOWS) intel_wrap = get_dos_path(intel_wrap,error)
818+
if (intel_wrap/="") fort_wrappers = [fort_wrappers,string_t(intel_wrap)]
819+
820+
intel_wrap = join_path(mpi_root,'mpiicx')
821+
if (get_os_type()==OS_WINDOWS) intel_wrap = get_dos_path(intel_wrap,error)
822+
if (intel_wrap/="") c_wrappers = [c_wrappers,string_t(intel_wrap)]
823+
824+
intel_wrap = join_path(mpi_root,'mpiicpx')
825+
if (get_os_type()==OS_WINDOWS) intel_wrap = get_dos_path(intel_wrap,error)
826+
if (intel_wrap/="") cpp_wrappers = [cpp_wrappers,string_t(intel_wrap)]
827+
828+
end if
829+
805830
case (id_pgi,id_nvhpc)
806831

807832
c_wrappers = [c_wrappers,string_t('mpipgicc'),string_t('mpgcc')]
@@ -1095,11 +1120,13 @@ type(string_t) function mpi_wrapper_query(mpilib,wrapper,command,verbose,error)
10951120

10961121
case (MPI_TYPE_INTEL)
10971122

1098-
! --showme:command returns the build command of this wrapper
1123+
! -v returns the build command of this wrapper
10991124
call run_wrapper(wrapper,[string_t('-v')],verbose=verbose, &
11001125
exitcode=stat,cmd_success=success,screen_output=screen)
11011126

1102-
if (stat/=0 .or. .not.success) then
1127+
! LLVM wrappers bug: non-zero exit code when checking for "-v" -> only check for
1128+
! successful command: https://github.com/spack/spack/issues/47672
1129+
if (.not.success) then
11031130
call syntax_error(error,'local INTEL MPI library does not support -v')
11041131
return
11051132
else

0 commit comments

Comments
 (0)