Skip to content

benchmarking python/main #139

benchmarking python/main

benchmarking python/main #139

Workflow file for this run

# Generated file: !!! DO NOT EDIT !!!
---
env:
PYPERFORMANCE_HASH: ebb37f3583e26ea22cee34126b3b8a815112370b
PYSTON_BENCHMARKS_HASH: 004743ccbd9e54598c543d7eb71fd3b8e10d5750
name: benchmark
run-name: benchmarking ${{ inputs.fork }}/${{ inputs.ref }} ${{ inputs.tier2 == true
&& 'T2' || '' }} ${{ inputs.jit == true && 'JIT' || '' }} ${{ inputs.nogil == true
&& 'NOGIL' || '' }}
on:
workflow_dispatch:
inputs:
fork:
description: Fork of cpython to benchmark
default: python
ref:
description: Branch, tag or (full) SHA commit to benchmark
default: main
machine:
description: Machine to run on
default: linux-amd64
type: choice
options:
- linux-x86_64-linux
- linux-x86_64-vultr
- all
benchmarks:
description: Benchmarks to run (comma-separated; empty runs all benchmarks)
type: string
benchmark_base:
description: Also benchmark the base of this commit
type: boolean
default: false
pystats:
description: Also collect pystats for this commit
type: boolean
default: false
tier2:
description: tier 2 interpreter
type: boolean
default: false
jit:
description: JIT
type: boolean
default: false
nogil:
description: free threading
type: boolean
default: false
jobs:
# Determine the base commit of the selected commit. The output is passed to
# the `base` job below. If the data already exists for this commit, it will be
# skipped.
determine_base:
runs-on: ubuntu-latest
outputs:
head: ${{ steps.base.outputs.head }}
date: ${{ steps.base.outputs.date }}
version: ${{ steps.base.outputs.version }}
ref: ${{ steps.base.outputs.ref }}
need_to_run: ${{ steps.base.outputs.need_to_run }}
steps:
- name: Checkout benchmarking
uses: actions/checkout@v4
- name: Setup system Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
cache: pip
- name: Checkout CPython
uses: actions/checkout@v4
with:
repository: ${{ inputs.fork }}/cpython
path: cpython
ref: ${{ inputs.ref }}
fetch-depth: 0
- name: Install dependencies from PyPI
run: |
pip install -r requirements.txt
- name: Determine base
id: base
run: |
python -m bench_runner get_merge_base ${{ inputs.benchmark_base }} ${{ inputs.machine }} ${{ inputs.pystats }} ${{ inputs.tier2 == true && 'tier2' || '' }},${{ inputs.jit == true && 'jit' || '' }},${{ inputs.nogil == true && 'nogil' || '' }} >> $GITHUB_OUTPUT
cat $GITHUB_OUTPUT
env:
flags: ${{ inputs.tier2 == true && 'tier2' || '' }},${{ inputs.jit == true &&
'jit' || '' }},${{ inputs.nogil == true && 'nogil' || '' }}
head:
uses: ./.github/workflows/_benchmark.yml
with:
fork: ${{ inputs.fork }}
ref: ${{ inputs.ref }}
machine: ${{ inputs.machine }}
benchmarks: ${{ inputs.benchmarks }}
pgo: true
perf: false
force: true
tier2: ${{ inputs.tier2 }}
jit: ${{ inputs.jit }}
nogil: ${{ inputs.nogil }}
secrets: inherit
base:
uses: ./.github/workflows/_benchmark.yml
needs: determine_base
if: ${{ needs.determine_base.outputs.need_to_run != 'false' }}
with:
fork: python
ref: ${{ needs.determine_base.outputs.ref }}
machine: ${{ inputs.machine }}
benchmarks: ${{ inputs.benchmarks }}
pgo: true
perf: false
force: false
tier2: ${{ inputs.tier2 }}
jit: ${{ inputs.jit }}
nogil: ${{ inputs.nogil }}
secrets: inherit
pystats-head:
uses: ./.github/workflows/_pystats.yml
if: ${{ inputs.pystats }}
with:
fork: ${{ inputs.fork }}
ref: ${{ inputs.ref }}
benchmarks: ${{ inputs.benchmarks }}
individual: true
force: true
tier2: ${{ inputs.tier2 }}
jit: ${{ inputs.jit }}
nogil: ${{ inputs.nogil }}
secrets: inherit
pystats-base:
uses: ./.github/workflows/_pystats.yml
needs: determine_base
if: ${{ inputs.pystats && needs.determine_base.outputs.need_to_run != 'false'
}}
with:
fork: python
ref: ${{ needs.determine_base.outputs.ref }}
benchmarks: ${{ inputs.benchmarks }}
individual: true
force: false
tier2: ${{ inputs.tier2 }}
jit: ${{ inputs.jit }}
nogil: ${{ inputs.nogil }}
secrets: inherit
generate:
uses: ./.github/workflows/_generate.yml
with:
force: false
if: ${{ always() }}
needs: [head, base, pystats-head, pystats-base]
secrets: inherit
notify:
uses: ./.github/workflows/_notify.yml
if: ${{ always() }}
needs:
- generate
- determine_base
with:
fork: ${{ inputs.fork }}
ref: ${{ inputs.ref }}
head: ${{ needs.determine_base.outputs.head }}
date: ${{ needs.determine_base.outputs.date }}
version: ${{ needs.determine_base.outputs.version }}
tier2: ${{ inputs.tier2 }}
jit: ${{ inputs.jit }}
nogil: ${{ inputs.nogil }}
secrets: inherit