MACS Version Speed and Memory Survey
This developer benchmark compares MACS v1, MACS2, and MACS3 on the same 5M-read CTCF BED dataset. It is a pragmatic software-performance survey, not a formal methods benchmark and not a claim that biological outputs should be identical across major versions.
Use the manual GitHub Actions workflow for the recommended run. It benchmarks all versions on one GitHub-hosted x86_64 Ubuntu runner, avoiding Apple Silicon Rosetta overhead and avoiding Docker.
The benchmark uses these refs by default:
MACS v1:
origin/macs_v1MACS2:
origin/macs_v2MACS3:
v3.0.4
The primary task is:
treatment:
test/CTCF_12878_5M.bed.gzcontrol:
test/Input_12878_5M.bed.gzformat:
BEDgenome:
hsrepeats:
3by default
GitHub Actions Run
Open the repository’s Actions tab, choose MACS Version Benchmark, and
run the workflow manually. For a first smoke test, use repeats=1. For the
reported survey, use repeats=3 or higher.
The workflow:
runs on
ubuntu-22.04x86_64installs GNU
timecreates isolated conda environments for MACS v1, MACS2, and MACS3
installs each version from its matching worktree
runs
scripts/run_macs_version_survey.shwithTIME_MODE=linuxuploads a
macs-version-benchmark-resultsartifact
The workflow uses:
MACS1_CMD="conda run -n macs-v1-py2 macs"
MACS2_CMD="conda run -n macs-v2-survey macs2"
MACS3_CMD="conda run -n macs-v3-survey macs3"
MACS v1 installs the historical command as macs, not macs14, on the
origin/macs_v1 branch.
Outputs
The uploaded artifact contains:
results/benchmark_runs.tsv: one row per version and repeatresults/summary.tsv: median/min/max wall time and median peak RSSresults/output_peak_counts.tsv: row counts for generated peak fileslogs/git_revisions.txt: exact commit and describe output for each reflogs/input_sha256.txt: input checksumslogs/version_checks.txt: command/version checkslogs/*.stdout.txtandlogs/*.time_stderr.txt: per-run command logs
On Linux, peak resident memory is parsed from /usr/bin/time -v as Maximum resident set size (kbytes) and converted to bytes. On macOS, the same harness
can parse /usr/bin/time -l as maximum resident set size, already in bytes.
To regenerate summaries from an artifact or local result directory:
python scripts/summarize_macs_version_survey.py /path/to/macs-version-survey
Local Caveat
Do not use an Apple Silicon local run for the main comparison if MACS v1 must
run under Rosetta. Native osx-arm64 conda does not provide Python 2.7 from the
usual channels, while Rosetta x86_64 would add translation overhead and make the
comparison less fair. The GitHub Actions x86_64 workflow avoids that problem.
Local macOS runs remain possible for harness debugging:
ROOT=/path/to/benchmark/root \
REPEATS=1 \
TIME_MODE=macos \
MACS1_CMD="macs" \
MACS2_CMD="macs2" \
MACS3_CMD="macs3" \
bash scripts/run_macs_version_survey.sh
Reporting
Use a table like this when reporting results:
Version |
Source ref |
Python |
Command |
Repeats |
Median wall time (s) |
Median peak RSS (MB) |
Notes |
|---|---|---|---|---|---|---|---|
MACS v1 |
|
Python 2.7 |
|
3 |
TBD |
TBD |
GitHub Actions x86_64 |
MACS2 |
|
Python 3.9 |
|
3 |
TBD |
TBD |
GitHub Actions x86_64 |
MACS3 |
|
Python 3.11 |
|
3 |
TBD |
TBD |
GitHub Actions x86_64 |
Do not require identical peak counts across MACS v1, MACS2, and MACS3. Defaults and algorithms differ across major versions; this survey targets computational behavior on the same input files.