Skip to content

Laundry list about benchmarking #49

@huitseeker

Description

@huitseeker

TL;DR

It would be awesome for bencher if we had two jobs gpu-bench-comparative and bench-comparative with the following properties:

  • activate asm on x86_64,
  • use or do not use cuda depending on the nature of the called job,
  • they use BENCH_OUTPUT=commit-comment by default, because
  • they both use message-format=json and pipe to a file named after bench & commit (as gpu-bench-ci does)

In detail

I've been running 6-7 benches (comparative, so 2 runs per) every day, here's the pet peeves outcome:

  • if I want to pipe the output (json OR criterion baseline1) into a tool (resp. critcmp or criterion-table), I have to remember to pass an env variable XXX_BENCH_OUTPUT = "commit-comment",
  • one thing we've solved : the name of the var is per-repo,
  • the other thing: I have to edit the justfile super often : mostly I run 3 benches in parallel, but I don't have 3 gpu-equipped machines
  • there are niceties in the gpu-bench-ci job that are not in the bench job,

Arecibo example:

# Run CPU benchmarks
bench +benches:
  #!/bin/sh
  for bench in {{benches}}; do
    cargo criterion --bench $bench
  done

# Run CUDA benchmarks on GPU
gpu-bench +benches:
  #!/bin/sh
  # The `compute`/`sm` number corresponds to the Nvidia GPU architecture
  # In this case, the self-hosted machine uses the Ampere architecture, but we want this to be configurable
  # See https://arnon.dk/matching-sm-architectures-arch-and-gencode-for-various-nvidia-cards/
  export CUDA_ARCH=$(nvidia-smi --query-gpu=compute_cap --format=csv,noheader | sed 's/\.//g')
  export EC_GPU_CUDA_NVCC_ARGS="--fatbin --gpu-architecture=sm_$CUDA_ARCH --generate-code=arch=compute_$CUDA_ARCH,code=sm_$CUDA_ARCH"
  export EC_GPU_FRAMEWORK="cuda"

  for bench in {{benches}}; do
    cargo criterion --bench $bench --features "cuda"
  done

# Run CUDA benchmarks on GPU, tuned for CI on Linux x86_64
gpu-bench-ci +benches:
  #!/bin/sh
  printenv PATH
  if [ $(uname -m) = "x86_64" ]; then
    FEATURES="cuda,asm"
  else
    FEATURES="cuda"
  fi

  for bench in {{benches}}; do
    cargo criterion --bench $bench --features $FEATURES --message-format=json > "$bench-{{commit}}".json
  done%
  • conclusion : I always want the ASM feature, and I most of the time also want json output.
  • one thing in the wishlist : if I run one of the jobs that have message-format=json I nearly certainly also want XX_BENCH_OUTPUT = commit-comment

Footnotes

  1. cargo bench --bench foo -- --save-baseline foo_at_main

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions