Skip to content

Commit 7a26685

Browse files
[CI][Bench] Use new version of bench dashboard
incl. using new format of data (stored on 'benchmark-results' branch).
1 parent a7bb7dc commit 7a26685

File tree

4 files changed

+98
-56
lines changed

4 files changed

+98
-56
lines changed

.github/workflows/benchmarks.yml

+1-7
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,9 @@ on:
1111
type: string
1212
required: false
1313
default: ''
14-
upload_report:
15-
description: 'Upload HTML report'
16-
type: boolean
17-
required: false
18-
default: false
1914

2015
permissions:
21-
contents: read
16+
contents: write
2217
pull-requests: write
2318

2419
jobs:
@@ -28,4 +23,3 @@ jobs:
2823
with:
2924
pr_no: ${{ inputs.pr_no }}
3025
bench_script_params: ${{ inputs.bench_script_params }}
31-
upload_report: ${{ inputs.upload_report }}

.github/workflows/nightly.yml

+3-4
Original file line numberDiff line numberDiff line change
@@ -248,9 +248,9 @@ jobs:
248248
call "C:\Program Files (x86)\Intel\oneAPI\setvars-vcvarsall.bat"
249249
ctest -C ${{matrix.build_type}} --output-on-failure --test-dir test
250250
251-
hwloc-fallback:
252251
# Scenarios where UMF_LINK_HWLOC_STATICALLY is set to OFF and hwloc is not installed in the system
253252
# The hwloc library is fetched implicitly
253+
hwloc-fallback:
254254
name: "Fallback to static hwloc build"
255255
strategy:
256256
matrix:
@@ -317,9 +317,8 @@ jobs:
317317
Benchmarks:
318318
uses: ./.github/workflows/reusable_benchmarks.yml
319319
permissions:
320-
contents: read
320+
contents: write
321321
pull-requests: write
322322
with:
323323
pr_no: '0'
324-
bench_script_params: '--save baseline'
325-
upload_report: true
324+
bench_script_params: '--save Baseline_PVC'

.github/workflows/reusable_benchmarks.yml

+67-36
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Executes benchmarks implemented in this repository using scripts
2-
# for results visualization from intel/llvm (unified-runtime dir).
2+
# for results visualization from intel/llvm.
33
name: Benchmarks
44

55
on:
@@ -14,13 +14,9 @@ on:
1414
required: false
1515
type: string
1616
default: ''
17-
upload_report:
18-
required: false
19-
type: boolean
20-
default: false
2117

2218
permissions:
23-
contents: read
19+
contents: write
2420
pull-requests: write
2521

2622
env:
@@ -38,7 +34,7 @@ jobs:
3834
# Workspace on self-hosted runners is not cleaned automatically.
3935
# We have to delete the files created outside of using actions.
4036
- name: Cleanup self-hosted workspace
41-
if: always()
37+
if: false
4238
run: |
4339
ls -la ./
4440
rm -rf ./* || true
@@ -97,23 +93,32 @@ jobs:
9793
- name: Build UMF
9894
run: cmake --build ${{env.BUILD_DIR}} -j $(nproc)
9995

100-
# Get scripts for benchmark data visualization.
101-
# Use specific tag, as the scripts or files' location may change.
102-
- name: Checkout SYCL
96+
- name: Checkout UMF results branch
97+
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
98+
with:
99+
ref: benchmark-results
100+
path: results-repo
101+
102+
# Get scripts for benchmark data visualization (from SYCL repo).
103+
# Use specific ref, as the scripts or files' location may change.
104+
- name: Checkout benchmark scripts
103105
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
104106
with:
105107
repository: intel/llvm
106-
# [BENCHMARK] fix default timeout parameter
107-
# https://github.com/intel/llvm/pull/17412
108-
ref: 357e9e0b253b7eba105d044e38452b3c09169f8a
109-
path: sycl-repo
110-
fetch-depth: 1
108+
# Note: The same ref is used in docs build (for dashboard generation)!
109+
#
110+
# 20.03.2025
111+
# branch: unify-benchmark-ci
112+
ref: cae7049c78c697b3ac94f931716d9efb53addcd8
113+
path: sc
114+
sparse-checkout: |
115+
devops/scripts/benchmarks
111116
112117
- name: Install benchmarking scripts deps
113118
run: |
114119
python -m venv .venv
115120
source .venv/bin/activate
116-
pip install -r ${{github.workspace}}/sycl-repo/unified-runtime/third_party/benchmark_requirements.txt
121+
pip install -r ${{github.workspace}}/sc/devops/scripts/benchmarks/requirements.txt
117122
118123
- name: Set core range and GPU mask
119124
run: |
@@ -135,22 +140,21 @@ jobs:
135140
136141
- name: Run UMF benchmarks
137142
id: benchmarks
138-
working-directory: ${{env.BUILD_DIR}}
139143
run: >
140-
source ${{github.workspace}}/.venv/bin/activate &&
141-
taskset -c ${{ env.CORES }} ${{ github.workspace }}/sycl-repo/unified-runtime/scripts/benchmarks/main.py
144+
source .venv/bin/activate &&
145+
taskset -c ${{ env.CORES }} ./sc/devops/scripts/benchmarks/main.py
142146
~/bench_workdir_umf
143147
--umf ${{env.BUILD_DIR}}
144-
--compare baseline
145148
--timeout 3000
146-
${{ inputs.upload_report && '--output-html' || '' }}
147-
${{ inputs.pr_no != 0 && '--output-markdown' || '' }}
149+
--output-html remote
150+
--results-dir ${{ github.workspace }}/results-repo
151+
--output-markdown
148152
${{ inputs.bench_script_params }}
149153
150154
# In case it failed to add a comment, we can still print the results.
151155
- name: Print benchmark results
152-
if: ${{ always() && inputs.pr_no != 0 }}
153-
run: cat ${{env.BUILD_DIR}}/benchmark_results.md
156+
if: ${{ always() }}
157+
run: cat ${{ github.workspace }}/benchmark_results.md || true
154158

155159
- name: Add comment to PR
156160
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
@@ -160,7 +164,7 @@ jobs:
160164
let markdown = ""
161165
try {
162166
const fs = require('fs');
163-
markdown = fs.readFileSync('${{env.BUILD_DIR}}/benchmark_results.md', 'utf8');
167+
markdown = fs.readFileSync('${{ github.workspace }}/benchmark_results.md', 'utf8');
164168
} catch(err) {
165169
}
166170
@@ -177,15 +181,42 @@ jobs:
177181
repo: context.repo.repo,
178182
body: body
179183
})
180-
181-
- name: Upload HTML report
182-
if: ${{ always() && inputs.upload_report }}
183-
uses: actions/cache/save@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0
184-
with:
185-
path: umf-repo/build/benchmark_results.html
186-
key: benchmark-results-${{ github.run_id }}
187184
188-
- name: Get information about platform
189-
if: ${{ always() }}
190-
working-directory: ${{env.UMF_DIR}}
191-
run: .github/scripts/get_system_info.sh
185+
- name: Commit data.json and results directory
186+
working-directory: results-repo
187+
run: |
188+
git config --global user.name "GitHub Actions Bot"
189+
git config --global user.email "[email protected]"
190+
191+
for attempt in {1..5}; do
192+
echo "Attempt $attempt to push changes"
193+
194+
rm -f data.json
195+
cp ${{ github.workspace }}/sc/devops/scripts/benchmarks/html/data.json .
196+
197+
git add data.json results/
198+
git commit -m "Add benchmark results and data.json"
199+
200+
results_file=$(git diff HEAD~1 --name-only -- results/ | head -n 1)
201+
202+
if git push origin benchmark-results; then
203+
echo "Push succeeded"
204+
break
205+
fi
206+
207+
echo "Push failed, retrying..."
208+
209+
if [ -n "$results_file" ]; then
210+
mv $results_file ${{ github.workspace }}/temp_$(basename $results_file)
211+
212+
git reset --hard origin/benchmark-results
213+
git pull origin benchmark-results
214+
215+
new_file="results/$(basename "$results_file")"
216+
mv ${{ github.workspace }}/temp_$(basename $results_file) $new_file
217+
fi
218+
219+
echo "Regenerating data.json"
220+
(cd ${{ github.workspace }} && ${{ github.workspace }}/sc/devops/scripts/benchmarks/main.py ~/bench_workdir_umf --dry-run --results-dir ${{ github.workspace }}/results-repo --output-html remote)
221+
222+
done

.github/workflows/reusable_docs_build.yml

+27-9
Original file line numberDiff line numberDiff line change
@@ -45,19 +45,37 @@ jobs:
4545
-DUMF_DISABLE_HWLOC=ON
4646
cmake --build build --target docs
4747
48-
# If we upload HTML docs, we want to include benchmark results as well
49-
- name: Download benchmark HTML before uploading docs
48+
#
49+
# Documentation is built. Now we want to add benchmark dashboard.
50+
# We only do it if inputs.upload is set, as this job is also used for testing docs build.
51+
#
52+
- name: Checkout benchmark scripts
5053
if: ${{ inputs.upload == true }}
51-
id: download-bench-html
52-
uses: actions/cache/restore@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0
54+
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
5355
with:
54-
path: umf-repo/build/benchmark_results.html
55-
key: benchmark-results-
56+
repository: intel/llvm
57+
# 20.03.2025
58+
# branch: unify-benchmark-ci
59+
ref: cae7049c78c697b3ac94f931716d9efb53addcd8
60+
path: sc
61+
sparse-checkout: |
62+
devops/scripts/benchmarks
5663
57-
- name: Move benchmark HTML
58-
if: ${{ inputs.upload == true && steps.download-bench-html.outputs.cache-hit != '' }}
64+
- name: Move benchmark HTML files
65+
if: ${{ inputs.upload == true }}
66+
working-directory: ${{ github.workspace }}/build/docs_build/generated/html
67+
run: |
68+
mkdir performance
69+
mv ${{ github.workspace }}/sc/devops/scripts/benchmarks/html/* performance/
70+
71+
- name: Replace config.js
72+
if: ${{ inputs.upload == true }}
73+
working-directory: ${{ github.workspace }}/build/docs_build/generated/html
5974
run: |
60-
mv umf-repo/build/benchmark_results.html ${{github.workspace}}/build/docs_build/generated/html
75+
cat << 'EOF' > ./performance/config.js
76+
remoteDataUrl = 'https://raw.githubusercontent.com/oneapi-src/unified-memory-framework/refs/heads/benchmark-results/data.json';
77+
defaultCompareNames = ["Baseline_PVC"];
78+
EOF
6179
6280
- name: Upload artifact
6381
if: ${{ inputs.upload == true }}

0 commit comments

Comments
 (0)