Skip to content

Stress test on large problems, Fortran #383

Stress test on large problems, Fortran

Stress test on large problems, Fortran #383

name: Stress test on large problems, Fortran
on:
# Trigger the workflow on push or pull request
#push:
#pull_request: # DANGEROUS! MUST be disabled for self-hosted runners!
# Trigger the workflow by cron. The default time zone of GitHub Actions is UTC.
schedule:
- cron: '0 18 2-31/2 * *'
# Trigger the workflow manually
workflow_dispatch:
inputs:
git-ref:
description: Git Ref (Optional)
required: false
# Show the git ref in the workflow name if it is invoked manually.
run-name: ${{ github.event_name == 'workflow_dispatch' && format('Manual run {0}', inputs.git-ref) || '' }}
jobs:
test:
name: Stress test of PRIMA on large problems
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, ubuntu-24.04-arm, macos-latest, macos-15-intel]
compiler: [g, v, s, f, x, d, m, r]
solver: [newuoa, cobyla, lincoa, bobyqa, uobyqa]
testdim: [large]
exclude:
- compiler: s # BOBYQA fails stest for unknown reason
solver: bobyqa
# Do not test r (ATfL) on ubuntu-latest, as it is available only on ubuntu arm.
- os: ubuntu-latest
compiler: r
# Test only g, v, f, r on ubuntu arm, as other compilers are not available
- os: ubuntu-24.04-arm
compiler: s
- os: ubuntu-24.04-arm
compiler: x
- os: ubuntu-24.04-arm
compiler: d
- os: ubuntu-24.04-arm
compiler: m
# Test only g and f on macOS, as other compilers are not available
- os: macos-latest
compiler: v
- os: macos-latest
compiler: s
- os: macos-latest
compiler: x
- os: macos-latest
compiler: d
- os: macos-latest
compiler: m
- os: macos-latest
compiler: r
- os: macos-15-intel
compiler: v
- os: macos-15-intel
compiler: s
- os: macos-15-intel
compiler: x
- os: macos-15-intel
compiler: d
- os: macos-15-intel
compiler: m
- os: macos-15-intel
compiler: r
steps:
- name: Run `sudo apt update`
if: startsWith(matrix.os, 'ubuntu')
run: sudo apt update || true # Otherwise, free-disk-space or other actions relying on `apt` may fail
- name: Free disk space
if: startsWith(matrix.os, 'ubuntu')
uses: jlumbroso/free-disk-space@main
with:
# all of these default to true, but feel free to set to "false" if necessary for your workflow
android: true
dotnet: true
haskell: true
large-packages: true
docker-images: true
swap-storage: false # Important, or the runner may be shut down due to memory starvation.
- name: Clone Repository (Latest)
uses: actions/checkout@v6.0.2
if: github.event.inputs.git-ref == ''
with:
ssh-key: ${{ secrets.SSH_PRIVATE_KEY_ACT }} # This forces checkout to use SSH, not HTTPS
submodules: recursive
- name: Clone Repository (Custom Ref)
uses: actions/checkout@v6.0.2
if: github.event.inputs.git-ref != ''
with:
ref: ${{ github.event.inputs.git-ref }}
ssh-key: ${{ secrets.SSH_PRIVATE_KEY_ACT }} # This forces checkout to use SSH, not HTTPS
submodules: recursive
- name: Miscellaneous setup
run: bash .github/scripts/misc_setup
- name: Install AOCC
if: ${{ matrix.compiler == 'd' }}
run: bash .github/scripts/install_aocc
- name: Install AOMP
if: ${{ matrix.compiler == 'm' }}
# Retry in case of failure due to transient network issues. If the installation still fails
# after all retries, we let it fail silently and continue with the test. This is fine since
# there are many tests with other compilers, and since the AOMP compiler is tested in
# test_aflang.html. If we try too many times, there may not be enough time left for the test
# to run anyway!
run: bash .github/scripts/install_aomp 3 1800 || true
- name: Install Arm Toolchain for Linux
if: ${{ matrix.compiler == 'r' }}
run: bash .github/scripts/install_atfl
- name: Install gfortran
if: ${{ matrix.compiler == 'g' }}
uses: fortran-lang/setup-fortran@main
id: setup-fortran
with:
compiler: gcc
- name: Install Intel oneAPI on Linux
if: ${{ startsWith(matrix.os, 'ubuntu') && (matrix.compiler == 'i' || matrix.compiler == 'x') }}
run: bash .github/scripts/install_oneapi_linux.sh
- name: Install Intel oneAPI on macOS
if: ${{ startsWith(matrix.os, 'macos') && (matrix.compiler == 'i' || matrix.compiler == 'x') }}
run: bash .github/scripts/install_oneapi_macos.sh
- name: Install nvfortran
if: ${{ matrix.compiler == 'v' }}
run: bash .github/scripts/install_nvfortran
- name: Install Oracle sunf95
if: ${{ matrix.compiler == 's' }}
run: bash .github/scripts/install_sunf95
# Install Flang after AOCC, to make sure that flang is this one, while AOCC flang will be
# known as aoccflang.
- name: Install Flang
if: ${{ matrix.compiler == 'f' }}
run: bash .github/scripts/install_llvm
- name: Conduct the test; treat timeout as SUCCESS (exit 0)
uses: equipez/run-bash-command@v2
with:
timelimit: 320m
command: |
cd "$ROOT_DIR"/fortran/tests
export TESTDIM=${{ matrix.testdim }}
RK=$((2**($(date +%-d) % 3 + 2)))
if [[ $RK==16 && dfrv == *${{ matrix.compiler }}* ]] ; then
echo "r16 test is skipped for compiler " ${{ matrix.compiler }}
echo "Test r8 instead"
RK=8
fi
echo "RK = " $RK
if [[ ${{ matrix.compiler }} == m ]] && ! type amdflang ; then
echo "WARNING!!! amdflang does not work after AOMP installation, which probably failed!!!" 2>&1
echo "WARNING!!! mtest is skipped because amdflang is not available!!!" 2>& 1
fi
make ${{ matrix.compiler }}test_i2_r${RK}_d1_tst.${{ matrix.solver }}
- name: Store artifacts
uses: actions/upload-artifact@v7
if: always() # Always run even if the workflow is canceled manually or due to overtime.
with:
name: ${{ matrix.os }}-${{ matrix.solver }}-${{ matrix.compiler }}-${{ matrix.testdim }}
path: ${{ env.TEST_DIR }}/prima/fortran/tests/test.${{ matrix.solver }}/log/*.log
- name: Remove the test data
if: always() # Always run even if the workflow is canceled manually or due to overtime.
run: rm -rf ${{ env.TEST_DIR }}