Laundry list about benchmarking

Open
#49 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
30/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Stale
Tech stack
github-actions, rust, shell
Domain
ci-cd, performance

Research direction

Start by locating the repository's justfile and the existing gpu-bench-ci and bench job definitions; compare their feature flags, CUDA handling, and output commands. Done means the two requested comparative jobs provide the stated asm, CUDA, JSON, file-naming, and BENCH_OUTPUT defaults while preserving the existing benchmark invocation.

Written by the indexing model from the issue text.

Description

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 baseline[^1]) 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

[^1]: cargo bench --bench foo -- --save-baseline foo_at_main

Dominant language
No language data
Stars
0
Forks
3
Avg merge
59m
Merged PRs (30d)
2

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from argumentcomputer/ci-workflows

All issues in argumentcomputer/ci-workflows

Similar issues

More DevOps issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.