File: libcxx-compare-benchmarks

package info (click to toggle)
llvm-toolchain-20 1%3A20.1.6-1~exp1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 2,111,304 kB
  • sloc: cpp: 7,438,677; ansic: 1,393,822; asm: 1,012,926; python: 241,650; f90: 86,635; objc: 75,479; lisp: 42,144; pascal: 17,286; sh: 10,027; ml: 5,082; perl: 4,730; awk: 3,523; makefile: 3,349; javascript: 2,251; xml: 892; fortran: 672
file content (73 lines) | stat: -rwxr-xr-x 2,135 bytes parent folder | download | duplicates (11)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/usr/bin/env bash

set -e

PROGNAME="$(basename "${0}")"
MONOREPO_ROOT="$(realpath $(dirname "${PROGNAME}"))"
function usage() {
cat <<EOF
Usage:
${PROGNAME} [-h|--help] <baseline-build> <candidate-build> benchmarks... [-- gbench-args...]

Compare the given benchmarks between the baseline and the candidate build directories.

This requires those benchmarks to have already been generated in both build directories.

<baseline-build>     The path to the build directory considered the baseline.
<candidate-build>    The path to the build directory considered the candidate.
benchmarks...        Paths of the benchmarks to compare. Those paths are relative to '<monorepo-root>'.
[-- gbench-args...]  Any arguments provided after '--' will be passed as-is to GoogleBenchmark's compare.py tool.

Example
=======
$ libcxx-lit build1/ -sv libcxx/test/benchmarks/algorithms/for_each.bench.cpp
$ libcxx-lit build2/ -sv libcxx/test/benchmarks/algorithms/for_each.bench.cpp
$ ${PROGNAME} build1/ build2/ libcxx/test/benchmarks/algorithms/for_each.bench.cpp
EOF
}

if [[ "${1}" == "-h" || "${1}" == "--help" ]]; then
    usage
    exit 0
fi

if [[ $# -lt 1 ]]; then
    usage
    exit 1
fi

baseline="${1}"
candidate="${2}"
shift; shift

GBENCH="${MONOREPO_ROOT}/third-party/benchmark"

python3 -m venv /tmp/libcxx-compare-benchmarks-venv
source /tmp/libcxx-compare-benchmarks-venv/bin/activate
pip3 install -r ${GBENCH}/tools/requirements.txt

benchmarks=""
while [[ $# -gt 0 ]]; do
    if [[ "${1}" == "--" ]]; then
        shift
        break
    fi
    benchmarks+=" ${1}"
    shift
done

for benchmark in ${benchmarks}; do
    base="$(${MONOREPO_ROOT}/libcxx/utils/libcxx-benchmark-json ${baseline} ${benchmark})"
    cand="$(${MONOREPO_ROOT}/libcxx/utils/libcxx-benchmark-json ${candidate} ${benchmark})"

    if [[ ! -e "${base}" ]]; then
        echo "Benchmark ${benchmark} does not exist in the baseline"
        continue
    fi
    if [[ ! -e "${cand}" ]]; then
        echo "Benchmark ${benchmark} does not exist in the candidate"
        continue
    fi

    "${GBENCH}/tools/compare.py" benchmarks "${base}" "${cand}" ${@}
done