Skip to content

Commit

Permalink
Take benchmarking out of sycl-linux-run-tests
Browse files Browse the repository at this point in the history
  • Loading branch information
ianayl committed Sep 13, 2024
1 parent 5266cac commit ab17254
Show file tree
Hide file tree
Showing 4 changed files with 321 additions and 206 deletions.
242 changes: 154 additions & 88 deletions .github/workflows/sycl-linux-benchmark.yml
Original file line number Diff line number Diff line change
Expand Up @@ -125,19 +125,134 @@ permissions:
contents: read

jobs:
build:
if: inputs.sycl_toolchain_artifact == ''
check_build:
name: Build (if no sycl artifact provided)
uses: ./.github/workflows/sycl-linux-build.yml
with:
build_ref: ${{ github.sha }}
merge_ref: ''
build_cache_root: "/__w/"
build_artifact_suffix: "default"
build_cache_suffix: "default"
build_artifact_suffix: "default_benchmark"
build_cache_suffix: "default_benchmark"
build_image: ${{ inputs.image }}
skip_build: ${{ inputs.sycl_toolchain_archive != '' }}
skip_reason: "SYCL toolchain artifact already provided, no build necessary"

run_archive:
if: inputs.sycl_toolchain_archive != ''
# run_archive:
# if: inputs.sycl_toolchain_archive != ''
# runs-on: ${{ fromJSON(inputs.runner) }}
# container:
# image: ${{ inputs.image }}
# options: ${{ inputs.image_options }}
# env: ${{ fromJSON(inputs.env) }}
# steps:
# - name: Reset GPU
# if: inputs.reset_gpu == 'true'
# run: |
# sudo mount -t debugfs none /sys/kernel/debug
# sudo bash -c 'echo 1 > /sys/kernel/debug/dri/0/i915_wedged'
# - uses: actions/checkout@v4
# with:
# ref: ${{ inputs.ref }}
# sparse-checkout: |
# devops
# - name: Register cleanup after job is finished
# uses: ./devops/actions/cleanup
# - name: Install drivers
# if: inputs.install_drivers == 'true'
# env:
# GITHUB_TOKEN: ${{ github.token }}
# run: |
# if [ "${{ inputs.use_dev_igc }}" = "true" ]; then
# # If libllvm14 is already installed (dev igc docker), still return true.
# sudo apt-get install -yqq libllvm14 || true;
# fi
# sudo -E bash devops/scripts/install_drivers.sh llvm/devops/dependencies.json ${{ inputs.use_dev_igc == 'true' && 'llvm/devops/dependencies-igc-dev.json --use-dev-igc' || '' }} --all
# - name: Source OneAPI TBB vars.sh
# shell: bash
# run: |
# # https://github.com/actions/runner/issues/1964 prevents us from using
# # the ENTRYPOINT in the image.
# env | sort > env_before
# if [ -e /runtimes/oneapi-tbb/env/vars.sh ]; then
# source /runtimes/oneapi-tbb/env/vars.sh;
# elif [ -e /opt/runtimes/oneapi-tbb/env/vars.sh ]; then
# source /opt/runtimes/oneapi-tbb/env/vars.sh;
# else
# echo "no TBB vars in /opt/runtimes or /runtimes";
# fi
# env | sort > env_after
# comm -13 env_before env_after >> $GITHUB_ENV
# rm env_before env_after
#
# - name: Download SYCL toolchain
# if: inputs.sycl_toolchain_artifact != '' && github.event_name != 'workflow_run'
# uses: actions/download-artifact@v4
# with:
# name: ${{ inputs.sycl_toolchain_artifact }}
# - name: Download SYCL toolchain [workflow_run]
# if: inputs.sycl_toolchain_artifact != '' && github.event_name == 'workflow_run'
# uses: actions/github-script@v7
# with:
# script: |
# const name = '${{ inputs.sycl_toolchain_artifact }}'
# let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
# owner: context.repo.owner,
# repo: context.repo.repo,
# run_id: context.payload.workflow_run.id,
# });
# let matchArtifact = allArtifacts.data.artifacts.filter((artifact) => {
# return artifact.name == name
# })[0];
# let download = await github.rest.actions.downloadArtifact({
# owner: context.repo.owner,
# repo: context.repo.repo,
# artifact_id: matchArtifact.id,
# archive_format: 'zip',
# });
# let fs = require('fs');
# fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/` + name + '.zip', Buffer.from(download.data));
# - name: Unzip artifact [workflow_run]
# if: inputs.sycl_toolchain_artifact != '' && github.event_name == 'workflow_run'
# run: |
# unzip ${{ inputs.sycl_toolchain_artifact }}.zip
# rm ${{ inputs.sycl_toolchain_artifact }}.zip
# - name: Extract/Setup SYCL toolchain
# if: inputs.sycl_toolchain_artifact != ''
# run: |
# mkdir toolchain
# tar -I '${{ inputs.sycl_toolchain_decompress_command }}' -xf ${{ inputs.sycl_toolchain_archive }} -C toolchain
# rm -f ${{ inputs.sycl_toolchain_archive }}
# echo PATH=$PWD/toolchain/bin/:$PATH >> $GITHUB_ENV
# echo LD_LIBRARY_PATH=$PWD/toolchain/lib/:$LD_LIBRARY_PATH >> $GITHUB_ENV
# - run: which clang++ sycl-ls
# - run: sycl-ls --verbose
# - run: SYCL_UR_TRACE=1 sycl-ls
# - run: |
# if [ -f /usr/local/lib/igc/IGCTAG.txt ]; then
# cat /usr/local/lib/igc/IGCTAG.txt
# fi
#
# - name: Run compute-benchmarks
# id: run_benchmarks
# if: success()
# run: |
# whereis clang++
# whereis sycl-ls
# clang++ --version
# ls
# export CMPLR_ROOT=$PWD/toolchain
# ./devops/scripts/benchmarking/benchmark.sh
# # - name: Upload sycl-bench microbenchmark results
# # if: inputs.tests_selector == 'benchmark' && steps.run_benchmarks.outcome == 'success'
# # uses: actions/upload-artifact@v4
# # with:
# # name: sycl_benchmark_res_${{ steps.run_benchmarks.outputs.TIMESTAMP }}
# # path: ${{ steps.run_benchmarks.outputs.BENCHMARK_RESULTS }}
# # retention-days: 7

run_benchmarks:
needs: [ check_build ]
runs-on: ${{ fromJSON(inputs.runner) }}
container:
image: ${{ inputs.image }}
Expand Down Expand Up @@ -184,16 +299,16 @@ jobs:
rm env_before env_after
- name: Download SYCL toolchain
if: inputs.sycl_toolchain_artifact != '' && github.event_name != 'workflow_run'
if: github.event_name != 'workflow_run'
uses: actions/download-artifact@v4
with:
name: ${{ inputs.sycl_toolchain_artifact }}
name: ${{ inputs.sycl_toolchain_artifact || 'sycl_linux_benchmark_ver' }}
- name: Download SYCL toolchain [workflow_run]
if: inputs.sycl_toolchain_artifact != '' && github.event_name == 'workflow_run'
if: && github.event_name == 'workflow_run'
uses: actions/github-script@v7
with:
script: |
const name = '${{ inputs.sycl_toolchain_artifact }}'
const name = '${{ inputs.sycl_toolchain_artifact || 'sycl_linux_benchmark_ver' }}'
let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
owner: context.repo.owner,
repo: context.repo.repo,
Expand All @@ -211,18 +326,19 @@ jobs:
let fs = require('fs');
fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/` + name + '.zip', Buffer.from(download.data));
- name: Unzip artifact [workflow_run]
if: inputs.sycl_toolchain_artifact != '' && github.event_name == 'workflow_run'
if: github.event_name == 'workflow_run'
run: |
unzip ${{ inputs.sycl_toolchain_artifact }}.zip
rm ${{ inputs.sycl_toolchain_artifact }}.zip
unzip ${{ inputs.sycl_toolchain_artifact || 'sycl_linux_benchmark_ver' }}.zip
rm ${{ inputs.sycl_toolchain_artifact || 'sycl_linux_benchmark_ver' }}.zip
- name: Extract/Setup SYCL toolchain
if: inputs.sycl_toolchain_artifact != ''
run: |
mkdir toolchain
tar -I '${{ inputs.sycl_toolchain_decompress_command }}' -xf ${{ inputs.sycl_toolchain_archive }} -C toolchain
rm -f ${{ inputs.sycl_toolchain_archive }}
tar -I '${{ inputs.sycl_toolchain_decompress_command || needs.check_build.outputs.artifact_decompress_command }}' \
-xf ${{ inputs.sycl_toolchain_archive || needs.check_build.outputs.artifact_archive_name }} -C toolchain
rm -f ${{ inputs.sycl_toolchain_archive || needs.check_build.outputs.artifact_archive_name }}
echo PATH=$PWD/toolchain/bin/:$PATH >> $GITHUB_ENV
echo LD_LIBRARY_PATH=$PWD/toolchain/lib/:$LD_LIBRARY_PATH >> $GITHUB_ENV
- run: ls
- run: which clang++ sycl-ls
- run: sycl-ls --verbose
- run: SYCL_UR_TRACE=1 sycl-ls
Expand All @@ -231,6 +347,10 @@ jobs:
cat /usr/local/lib/igc/IGCTAG.txt
fi
# - name: Install deps
# if: success()
# run: |
# sudo apt install -y ssh
- name: Run compute-benchmarks
id: run_benchmarks
if: success()
Expand All @@ -241,80 +361,26 @@ jobs:
ls
export CMPLR_ROOT=$PWD/toolchain
./devops/scripts/benchmarking/benchmark.sh
# - name: Upload sycl-bench microbenchmark results
# if: inputs.tests_selector == 'benchmark' && steps.run_benchmarks.outcome == 'success'
# uses: actions/upload-artifact@v4
# with:
# name: sycl_benchmark_res_${{ steps.run_benchmarks.outputs.TIMESTAMP }}
# path: ${{ steps.run_benchmarks.outputs.BENCHMARK_RESULTS }}
# retention-days: 7

run_build:
needs: [build]
runs-on: ${{ fromJSON(inputs.runner) }}
container:
image: ${{ inputs.image }}
options: ${{ inputs.image_options }}
env: ${{ fromJSON(inputs.env) }}
steps:
- name: Reset GPU
if: inputs.reset_gpu == 'true'
run: |
sudo mount -t debugfs none /sys/kernel/debug
sudo bash -c 'echo 1 > /sys/kernel/debug/dri/0/i915_wedged'
- uses: actions/checkout@v4
with:
ref: ${{ inputs.ref }}
sparse-checkout: |
devops
- name: Register cleanup after job is finished
uses: ./devops/actions/cleanup
- name: Install drivers
if: inputs.install_drivers == 'true'
env:
GITHUB_TOKEN: ${{ github.token }}
run: |
if [ "${{ inputs.use_dev_igc }}" = "true" ]; then
# If libllvm14 is already installed (dev igc docker), still return true.
sudo apt-get install -yqq libllvm14 || true;
fi
sudo -E bash devops/scripts/install_drivers.sh llvm/devops/dependencies.json ${{ inputs.use_dev_igc == 'true' && 'llvm/devops/dependencies-igc-dev.json --use-dev-igc' || '' }} --all
- name: Source OneAPI TBB vars.sh
shell: bash
run: |
# https://github.com/actions/runner/issues/1964 prevents us from using
# the ENTRYPOINT in the image.
env | sort > env_before
if [ -e /runtimes/oneapi-tbb/env/vars.sh ]; then
source /runtimes/oneapi-tbb/env/vars.sh;
elif [ -e /opt/runtimes/oneapi-tbb/env/vars.sh ]; then
source /opt/runtimes/oneapi-tbb/env/vars.sh;
else
echo "no TBB vars in /opt/runtimes or /runtimes";
fi
env | sort > env_after
comm -13 env_before env_after >> $GITHUB_ENV
rm env_before env_after
- run: ls
- run: which clang++ sycl-ls
- run: sycl-ls --verbose
- run: SYCL_UR_TRACE=1 sycl-ls
- run: |
if [ -f /usr/local/lib/igc/IGCTAG.txt ]; then
cat /usr/local/lib/igc/IGCTAG.txt
fi
- name: Run compute-benchmarks
id: run_benchmarks
exit $?
- name: Push compute-benchmarks
if: success()
env:
SSH_KEY: ${{secrets.ACTIONS_DEPLOY_KEY}}
run: |
whereis clang++
whereis sycl-ls
clang++ --version
ls
export CMPLR_ROOT=$PWD/toolchain
./devops/scripts/benchmarking/benchmark.sh
mkdir -p ~/.ssh
echo "$SSH_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
echo "###"
echo "$(ssh-agent -s)"
echo "###"
eval "$(ssh-agent -s)"
ssh-add -k ~/.ssh/id_rsa
cd llvm-ci-perf-results
git config --global user.name "iclsrc"
git config --global user.email "[email protected]"
git add .
git commit -m "Update results"
git push
# - name: Upload sycl-bench microbenchmark results
# if: inputs.tests_selector == 'benchmark' && steps.run_benchmarks.outcome == 'success'
# uses: actions/upload-artifact@v4
Expand Down
24 changes: 24 additions & 0 deletions .github/workflows/sycl-linux-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,18 @@ on:
description: 'Artifacts retention period'
type: string
default: 3
skip_build:
description: |
Build is skipped if set to true. This is used to implement building
based on a condition, as github currently does not provide a way to
have dynamic `needs` dependencies between jobs.
type: boolean
default: false
skip_reason:
description: |
Reason for skipping the build.
type: string
default: "inputs.skip-reason set to true."

outputs:
build_conclusion:
Expand Down Expand Up @@ -109,6 +121,7 @@ jobs:
build:
name: Build + LIT
runs-on: [Linux, build]
if: ${{ inputs.skip_build != 'true' }}
container:
image: ${{ inputs.build_image }}
options: -u 1001:1001
Expand Down Expand Up @@ -242,3 +255,14 @@ jobs:
name: sycl_linux_${{ inputs.build_artifact_suffix }}
path: ${{ steps.artifact_info.outputs.ARCHIVE_NAME }}
retention-days: ${{ inputs.retention-days }}

skip_build:
name: Build skipped (${{ inputs.skip_reason }})
runs-on: [Linux, aux-tasks]
if: ${{ inputs.skip_build == 'true' }}
outputs:
build_conclusion: "skipped"
artifact_archive_name: ""
artifact_decompress_command: ""
steps:
- run: echo "Build skipped -- ${{ inputs.skip_reason }}."
Loading

0 comments on commit ab17254

Please sign in to comment.