11# Executes benchmarks implemented in this repository
22name : Benchmarks
33
4- on : workflow_call
4+ on :
5+ workflow_call :
6+ inputs :
7+ pr_no :
8+ required : true
9+ # even though this is a number, this is a workaround for issues with
10+ # reusable workflow calls that result in "Unexpected value '0'" error.
11+ type : string
12+ default : ' 0'
13+ bench_script_params :
14+ required : false
15+ type : string
16+ default : ' '
17+ upload_report :
18+ required : false
19+ type : boolean
20+ default : false
521
622permissions :
723 contents : read
24+ pull-requests : write
825
926env :
1027 BUILD_DIR : " ${{github.workspace}}/build"
@@ -13,68 +30,167 @@ env:
1330jobs :
1431 benchmarks :
1532 name : Benchmarks
16- env :
17- VCPKG_PATH : " ${{github.workspace}}/build/vcpkg/packages/hwloc_x64-windows;${{github.workspace}}/build/vcpkg/packages/tbb_x64-windows;${{github.workspace}}/build/vcpkg/packages/jemalloc_x64-windows"
33+ # env:
34+ # VCPKG_PATH: "${{github.workspace}}/build/vcpkg/packages/hwloc_x64-windows;${{github.workspace}}/build/vcpkg/packages/tbb_x64-windows;${{github.workspace}}/build/vcpkg/packages/jemalloc_x64-windows"
1835 strategy :
1936 matrix :
20- os : ['ubuntu-latest', 'windows-latest']
37+ os : ['ubuntu-latest'] # , 'windows-latest']
2138 include :
2239 # Windows doesn't recognize 'CMAKE_BUILD_TYPE', it uses '--config' param in build command to determine the build type
2340 - os : ubuntu-latest
2441 extra_build_option : ' -DCMAKE_BUILD_TYPE=Release'
2542 runs-on : ${{matrix.os}}
2643
2744 steps :
28- - name : Checkout
29- uses : actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
30- with :
31- fetch-depth : 0
32-
33- - name : Install apt packages
34- if : matrix.os == 'ubuntu-latest'
35- run : |
36- sudo apt-get update
37- sudo apt-get install -y cmake libhwloc-dev libnuma-dev libtbb-dev
38-
39- - name : Initialize vcpkg
40- if : matrix.os == 'windows-latest'
41- uses : lukka/run-vcpkg@5e0cab206a5ea620130caf672fce3e4a6b5666a1 # v11.5
42- with :
43- vcpkgGitCommitId : 3dd44b931481d7a8e9ba412621fa810232b66289
44- vcpkgDirectory : ${{env.BUILD_DIR}}/vcpkg
45- vcpkgJsonGlob : ' **/vcpkg.json'
46-
47- - name : Install vcpkg packages
48- if : matrix.os == 'windows-latest'
49- run : vcpkg install
50- shell : pwsh # Specifies PowerShell as the shell for running the script.
51-
52- - name : Configure build
53- run : >
54- cmake
55- -B ${{env.BUILD_DIR}}
56- ${{matrix.extra_build_option}}
57- -DCMAKE_INSTALL_PREFIX="${{env.INSTL_DIR}}"
58- -DCMAKE_PREFIX_PATH="${{env.VCPKG_PATH}}"
59- -DUMF_BUILD_SHARED_LIBRARY=ON
60- -DUMF_BUILD_BENCHMARKS=ON
61- -DUMF_BUILD_BENCHMARKS_MT=ON
62- -DUMF_BUILD_TESTS=OFF
63- -DUMF_FORMAT_CODE_STYLE=OFF
64- -DUMF_DEVELOPER_MODE=OFF
65- -DUMF_BUILD_LEVEL_ZERO_PROVIDER=ON
66- -DUMF_BUILD_CUDA_PROVIDER=ON
67- -DUMF_BUILD_LIBUMF_POOL_DISJOINT=ON
68- -DUMF_BUILD_LIBUMF_POOL_JEMALLOC=ON
69-
70- - name : Build UMF on Linux
71- if : matrix.os == 'ubuntu-latest'
72- run : cmake --build ${{env.BUILD_DIR}} -j $(nproc)
73-
74- - name : Build UMF on Windows
75- if : matrix.os == 'windows-latest'
76- run : cmake --build ${{env.BUILD_DIR}} --config Release -j $Env:NUMBER_OF_PROCESSORS
77-
78- - name : Run benchmarks
79- working-directory : ${{env.BUILD_DIR}}
80- run : ctest -V --test-dir benchmark -C Release
45+ - name : Add comment to PR
46+ uses : actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
47+ if : ${{ always() && inputs.pr_no != 0 }}
48+ with :
49+ script : |
50+ const pr_no = '${{ inputs.pr_no }}';
51+ const url = '${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}';
52+ const params = '${{ inputs.bench_script_params }}';
53+ const body = `Compute Benchmarks run (with params: ${params}):\n${url}`;
54+
55+ github.rest.issues.createComment({
56+ issue_number: pr_no,
57+ owner: context.repo.owner,
58+ repo: context.repo.repo,
59+ body: body
60+ })
61+
62+ - name : Checkout
63+ uses : actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
64+ with :
65+ fetch-depth : 0
66+
67+ # We need to fetch special ref for proper PR's merge commit. Note, this ref may be absent if the PR is already merged.
68+ - name : Fetch PR's merge commit
69+ if : ${{ inputs.pr_no != 0 }}
70+ env :
71+ PR_NO : ${{ inputs.pr_no }}
72+ run : |
73+ git fetch -- https://github.com/${{github.repository}} +refs/pull/${PR_NO}/*:refs/remotes/origin/pr/${PR_NO}/*
74+ git checkout origin/pr/${PR_NO}/merge
75+ git rev-parse origin/pr/${PR_NO}/merge
76+
77+ - name : Install apt packages
78+ if : matrix.os == 'ubuntu-latest'
79+ run : |
80+ sudo apt-get update
81+ sudo apt-get install -y cmake libhwloc-dev libnuma-dev libtbb-dev
82+
83+ # - name: Initialize vcpkg
84+ # if: matrix.os == 'windows-latest'
85+ # uses: lukka/run-vcpkg@5e0cab206a5ea620130caf672fce3e4a6b5666a1 # v11.5
86+ # with:
87+ # vcpkgGitCommitId: 3dd44b931481d7a8e9ba412621fa810232b66289
88+ # vcpkgDirectory: ${{env.BUILD_DIR}}/vcpkg
89+ # vcpkgJsonGlob: '**/vcpkg.json'
90+
91+ # - name: Install vcpkg packages
92+ # if: matrix.os == 'windows-latest'
93+ # run: vcpkg install
94+ # shell: pwsh # Specifies PowerShell as the shell for running the script.
95+
96+ # -DCMAKE_PREFIX_PATH="${{env.VCPKG_PATH}}"
97+ - name : Configure build
98+ run : >
99+ cmake
100+ -B ${{env.BUILD_DIR}}
101+ ${{matrix.extra_build_option}}
102+ -DCMAKE_INSTALL_PREFIX="${{env.INSTL_DIR}}"
103+ -DUMF_BUILD_SHARED_LIBRARY=ON
104+ -DUMF_BUILD_BENCHMARKS=ON
105+ -DUMF_BUILD_BENCHMARKS_MT=ON
106+ -DUMF_BUILD_TESTS=OFF
107+ -DUMF_FORMAT_CODE_STYLE=OFF
108+ -DUMF_DEVELOPER_MODE=OFF
109+ -DUMF_BUILD_LEVEL_ZERO_PROVIDER=ON
110+ -DUMF_BUILD_CUDA_PROVIDER=ON
111+ -DUMF_BUILD_LIBUMF_POOL_DISJOINT=ON
112+ -DUMF_BUILD_LIBUMF_POOL_JEMALLOC=ON
113+
114+ - name : Build UMF on Linux
115+ if : matrix.os == 'ubuntu-latest'
116+ run : cmake --build ${{env.BUILD_DIR}} -j $(nproc)
117+
118+ # - name: Build UMF on Windows
119+ # if: matrix.os == 'windows-latest'
120+ # run: cmake --build ${{env.BUILD_DIR}} --config Release -j $Env:NUMBER_OF_PROCESSORS
121+
122+ - name : Checkout UR
123+ uses : actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
124+ with :
125+ repository : oneapi-src/unified-runtime
126+ path : ur-repo
127+ fetch-depth : 1
128+ fetch-tags : false
129+
130+ - name : Install pip packages
131+ run : |
132+ pip install --force-reinstall -r ${{github.workspace}}/ur-repo/third_party/benchmark_requirements.txt
133+
134+ - name : Install HWLOC
135+ if : matrix.os == 'ubuntu-latest'
136+ run : |
137+ sudo apt-get update
138+ sudo apt-get install libhwloc-dev
139+
140+ - name : Run benchmarks
141+ id : benchmarks
142+ if : matrix.os == 'ubuntu-latest'
143+ working-directory : ${{env.BUILD_DIR}}
144+ run : >
145+ ${{ github.workspace }}/ur-repo/scripts/benchmarks/main.py
146+ ~/bench_workdir
147+ --umf ${{env.BUILD_DIR}}
148+ ${{ inputs.upload_report && '--output-html' || '' }}
149+ ${{ inputs.bench_script_params }}
150+
151+ - name : Test output
152+ run : >
153+ echo 'out: ${{ steps.benchmarks.outcome }}'
154+
155+ # - name: Run benchmarks
156+ # if: matrix.os == 'windows-latest'
157+ # working-directory: ${{env.BUILD_DIR}}
158+ # run: >
159+ # python3 ${{ github.workspace }}/ur-repo/scripts/benchmarks/main.py
160+ # ~/bench_workdir
161+ # --umf ${{env.BUILD_DIR}}
162+ # ${{ inputs.upload_report && '--output-html' || '' }}
163+ # ${{ inputs.bench_script_params }}
164+
165+ - name : Add comment to PR
166+ uses : actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
167+ if : ${{ always() && inputs.pr_no != 0 }}
168+ with :
169+ script : |
170+ let markdown = ""
171+ try {
172+ const fs = require('fs');
173+ markdown = fs.readFileSync('${{env.BUILD_DIR}}/benchmark_results.md', 'utf8');
174+ } catch(err) {
175+ }
176+
177+ const pr_no = '${{ inputs.pr_no }}';
178+ const url = '${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}';
179+ const test_status = '${{ steps.benchmarks.outcome }}';
180+ const job_status = '${{ job.status }}';
181+ const params = '${{ inputs.bench_script_params }}';
182+ const body = `Compute Benchmarks run (${params}):\n${url}\nJob status: ${job_status}. Test status: ${test_status}.\n ${markdown}`;
183+
184+ github.rest.issues.createComment({
185+ issue_number: pr_no,
186+ owner: context.repo.owner,
187+ repo: context.repo.repo,
188+ body: body
189+ })
190+
191+ - name : Upload HTML report
192+ if : ${{ always() && inputs.upload_report }}
193+ uses : actions/cache/save@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0
194+ with :
195+ path : ${{env.BUILD_DIR}}/benchmark_results.html
196+ key : benchmark-results-${{ github.run_id }}
0 commit comments