MACS Version Speed and Memory Survey
Current MACS3 versus previous release
For release-to-release comparisons, use the manual MACS3 Release
Benchmark workflow. By default it compares the workflow’s current checkout
with tag v3.0.4; the baseline ref and number of repeats can be changed when
dispatching the workflow.
The release workflow creates two cloned Conda environments so both revisions
use identical Python and dependency versions. It installs each checkout into
its own environment, alternates execution order between repeats, and runs the
same 5M-read CTCF callpeak workload. Its artifact contains raw timing logs,
peak counts, revision metadata, and these reports:
summary.tsv: median/minimum/maximum wall time and median peak RSS for each revisioncomparison.tsv: current-to-baseline time and memory ratios, percentage changes, and speedupcomparison.md: the same comparison rendered in the GitHub Actions job summary
A current-to-baseline wall-time ratio below 1 means the current checkout is
faster. A peak-RSS ratio below 1 means it used less memory. For the MACS 3.0.5
release, dispatch the workflow from the 3.0.5 branch and retain the default
baseline ref, v3.0.4.
The underlying harness can also be run locally when both checkouts and their commands have already been prepared:
ROOT=/path/to/macs3-release-benchmark \
BASELINE_REF=v3.0.4 \
BASELINE_TREE=/path/to/MACS-v3.0.4 \
CURRENT_TREE=/path/to/MACS-current \
BASELINE_CMD="conda run -n macs3-release-baseline macs3" \
CURRENT_CMD="conda run -n macs3-release-current macs3" \
REPEATS=3 \
bash scripts/run_macs3_release_benchmark.sh
Major-version 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: the current workflow checkout, usually the current branch or PR head
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, including required submodules for MACS3’s bundled fermi-lite/SIMDe code
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 |
current branch/PR head |
Python 3.12 |
|
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.