diff --git a/tools/simulators/tsi/tsi-sim-pernode/.gitignore b/tools/simulators/tsi/tsi-sim-pernode/.gitignore new file mode 100644 index 0000000..c1d75e4 --- /dev/null +++ b/tools/simulators/tsi/tsi-sim-pernode/.gitignore @@ -0,0 +1,24 @@ +# Generated artifacts +runs/ +results/ +figures/ +report-figures/ +!results/.gitkeep +!figures/.gitkeep + +# Python +__pycache__/ +*.py[cod] +*.egg-info/ +.venv/ +venv/ +.pytest_cache/ +.mypy_cache/ +.ruff_cache/ +*.parquet +*.csv + +# Rendered reports — the report of record (markdown + figures) lives in reports/tsi/; +# anything built or generated in the simulation folder is a local artifact, never committed. +*.pdf +*.html diff --git a/tools/simulators/tsi/tsi-sim-pernode/Makefile b/tools/simulators/tsi/tsi-sim-pernode/Makefile new file mode 100644 index 0000000..ef9ce46 --- /dev/null +++ b/tools/simulators/tsi/tsi-sim-pernode/Makefile @@ -0,0 +1,52 @@ +# Sweep targets are auto-discovered from configs/*.yaml (see the pattern rule below), so any +# new config becomes runnable as `make ` with no Makefile edit. +SWEEP_CONFIGS := $(patsubst configs/%.yaml,%,$(wildcard configs/*.yaml)) +.PHONY: install $(SWEEP_CONFIGS) figures verify test test-slow test-all lint clean + +VENV ?= .venv +PY := $(VENV)/bin/python +PIP := $(VENV)/bin/pip + +# Pin BLAS/OpenMP to a single thread so joblib's N worker processes don't oversubscribe +# the cores (numpy in each worker would otherwise each spawn a full BLAS thread pool). +export OMP_NUM_THREADS := 1 +export OPENBLAS_NUM_THREADS := 1 +export MKL_NUM_THREADS := 1 +export NUMEXPR_NUM_THREADS := 1 + +$(VENV): + python3 -m venv $(VENV) + $(PIP) install --upgrade pip + +install: $(VENV) + $(PIP) install -e ".[dev,accel]" # accel = numba (per-node measurement speedup) + +# Run any sweep config by its file stem, e.g. `make smoke`, `make default`, `make fullscale` +# (or any new configs/.yaml). Each writes results + figures into a fresh dated folder under +# runs/ (runs/_