diff --git a/.github/workflows/bench.yml b/.github/workflows/bench.yml new file mode 100644 index 0000000000..546feba9e3 --- /dev/null +++ b/.github/workflows/bench.yml @@ -0,0 +1,37 @@ +name: 'Benchmark' + +on: + push: + paths: + - '**.f90' + - '**.fpp' + - '**.py' + - '**.yml' + - 'mfc.sh' + - 'CMakeLists.txt' + - 'requirements.txt' + + pull_request: + + workflow_dispatch: + +jobs: + self: + name: Georgia Tech | Phoenix (NVHPC) + if: github.repository == 'MFlowCode/MFC' + strategy: + matrix: + device: ['cpu', 'gpu'] + runs-on: + group: phoenix + labels: self-hosted + steps: + - name: Clone + uses: actions/checkout@v4 + + - name: Bench + run: bash .github/workflows/phoenix/submit.sh .github/workflows/phoenix/bench.sh ${{ matrix.device }} + + - name: Print + if: always() + run: cat bench-${{ matrix.device }}.out diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 4e3431ab2a..fc80075f38 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Login to Docker Hub uses: docker/login-action@v2 diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 518dacf800..af81727600 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 # We build doxygen from source because of # https://github.com/doxygen/doxygen/issues/9016 diff --git a/.github/workflows/phoenix/bench.sh b/.github/workflows/phoenix/bench.sh new file mode 100644 index 0000000000..e4b9feb67b --- /dev/null +++ b/.github/workflows/phoenix/bench.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +./mfc.sh bench "$job_slug.yaml" -j $(nproc) -b mpirun diff --git a/.github/workflows/phoenix/submit.sh b/.github/workflows/phoenix/submit.sh new file mode 100644 index 0000000000..267df34351 --- /dev/null +++ b/.github/workflows/phoenix/submit.sh @@ -0,0 +1,58 @@ +#!/bin/bash + +usage() { + echo "Usage: $0 [script.sh] [cpu|gpu]" +} + +if [ ! -z "$1" ]; then + sbatch_script_contents=`cat $1` +else + usage + exit 1 +fi + +sbatch_cpu_opts="\ +#SBATCH --ntasks-per-node=12 # Number of cores per node required +#SBATCH --mem-per-cpu=2G # Memory per core\ +" + +sbatch_gpu_opts="\ +#SBATCH -CV100-16GB +#SBATCH -G2\ +" + +if [ "$2" == "cpu" ]; then + sbatch_device_opts="$sbatch_cpu_opts" +elif [ "$2" == "gpu" ]; then + sbatch_device_opts="$sbatch_gpu_opts" +else + usage + exit 1 +fi + +job_slug="`basename "$1" | sed 's/\.sh$//' | sed 's/[^a-zA-Z0-9]/-/g'`-$2" + +cat <