name: openmpi on: workflow_call: inputs: mpi4py-git: description: 'mpi4py git' default: mpi4py/mpi4py required: false type: string mpi4py-ref: description: 'mpi4py ref' default: '' required: false type: string workflow_dispatch: inputs: mpi-git: description: 'MPI git' default: open-mpi/ompi required: false type: string mpi-ref: description: 'MPI ref' default: '' required: false type: string mpi4py-git: description: 'mpi4py git' default: mpi4py/mpi4py required: false type: string mpi4py-ref: description: 'mpi4py ref' default: '' required: false type: string push: branches: - ci/all - ci/openmpi schedule: - cron: '0 0 * * *' permissions: contents: read jobs: test: runs-on: ubuntu-24.04 timeout-minutes: 60 strategy: fail-fast: false matrix: mpi-ref: ${{ inputs.mpi-ref && fromJSON(format('["{0}"]', inputs.mpi-ref)) || fromJSON('["main", "v5.0.x", "v4.1.x"]') }} steps: - name: Configure hostname run: echo 127.0.0.1 `hostname` | sudo tee -a /etc/hosts > /dev/null if: ${{ runner.os == 'Linux' || runner.os == 'macOS' }} - name: Install depencencies run: sudo apt-get install -y -q libnuma-dev - name: Checkout MPI uses: actions/checkout@v5 with: repository: ${{ inputs.mpi-git || 'open-mpi/ompi' }} ref: ${{ matrix.mpi-ref }} path: mpi-build submodules: recursive - name: Bootstrap MPI run: ./autogen.pl working-directory: mpi-build - name: Configure MPI run: ./configure --disable-dependency-tracking --enable-debug --enable-mem-debug --disable-sphinx --disable-mpi-fortran --disable-oshmem LDFLAGS=-Wl,-rpath,/usr/local/lib working-directory: mpi-build - name: Build MPI run: make -j $(nproc) working-directory: mpi-build - name: Install MPI run: sudo make install working-directory: mpi-build - name: Tweak MPI run: | # Tweak MPI mca_params="$HOME/.openmpi/mca-params.conf" mkdir -p "$(dirname "$mca_params")" echo mpi_param_check = true >> "$mca_params" echo mpi_show_handle_leaks = true >> "$mca_params" echo rmaps_base_oversubscribe = true >> "$mca_params" mca_params="$HOME/.prte/mca-params.conf" mkdir -p "$(dirname "$mca_params")" echo rmaps_default_mapping_policy = :oversubscribe >> "$mca_params" - name: Show MPI run: ompi_info - name: Show MPICC run: mpicc -show - name: Use Python uses: actions/setup-python@v6 with: python-version: 3 architecture: x64 - name: Install Python packages (build) run: python -m pip install --upgrade setuptools pip wheel - name: Install Python packages (test) run: python -m pip install --upgrade numpy cffi pyyaml - name: Checkout mpi4py uses: actions/checkout@v5 with: repository: ${{ inputs.mpi4py-git || 'mpi4py/mpi4py' }} ref: ${{ inputs.mpi4py-ref }} - name: Install mpi4py run: python -m pip install . env: CFLAGS: "-O0" - name: Test mpi4py (singleton) run: python test/main.py -v if: ${{ true }} - name: Test mpi4py (np=1) run: mpiexec -n 1 python test/main.py -v - name: Test mpi4py (np=2) run: mpiexec -n 2 python test/main.py -v -f timeout-minutes: 10 - name: Test mpi4py (np=3) run: mpiexec -n 3 python test/main.py -v -f timeout-minutes: 10 - name: Test mpi4py (np=4) run: mpiexec -n 4 python test/main.py -v -f timeout-minutes: 10 - name: Test mpi4py (np=5) run: mpiexec -n 5 python test/main.py -v -f if: ${{ true }} timeout-minutes: 10 - name: Test mpi4py.futures (singleton) run: python demo/futures/test_futures.py -v if: ${{ true }} - name: Test mpi4py.futures (np=1) run: mpiexec -n 1 python demo/futures/test_futures.py -v - name: Test mpi4py.futures (np=2) run: mpiexec -n 2 python demo/futures/test_futures.py -v - name: Test mpi4py.futures (np=3) run: mpiexec -n 3 python demo/futures/test_futures.py -v - name: Test mpi4py.futures (np=1) run: mpiexec -n 1 python -m mpi4py.futures demo/futures/test_futures.py -v - name: Test mpi4py.futures (np=2) run: mpiexec -n 2 python -m mpi4py.futures demo/futures/test_futures.py -v - name: Test mpi4py.futures (np=3) run: mpiexec -n 3 python -m mpi4py.futures demo/futures/test_futures.py -v - name: Test mpi4py.run run: python demo/test-run/test_run.py -v - name: Test init-fini run: bash demo/init-fini/run.sh - name: Test check-mpiexec run: bash demo/check-mpiexec/run.sh