diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 377b452e9..2dfd30789 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -47,6 +47,7 @@ on: - 'proving/windows-wsl2/**' - 'relay/clients/**' - 'relay/playbooks/**' + - 'bench/**' - 'brand/icons/**' - 'tools/ci/windows/**' - '.github/workflows/windows.yml' @@ -85,7 +86,7 @@ jobs: Install-Module -Name PSScriptAnalyzer -Force -Scope CurrentUser -AllowClobber } Import-Module PSScriptAnalyzer - $folders = @('proto-cuda/windows-app', 'proto-cuda/windows-miner', 'proto-cuda/windows-node', 'proving/windows-wsl2', 'relay/clients', 'relay/playbooks', 'packaging/windows', 'tools/ci/windows') + $folders = @('proto-cuda/windows-app', 'proto-cuda/windows-miner', 'proto-cuda/windows-node', 'proving/windows-wsl2', 'relay/clients', 'relay/playbooks', 'packaging/windows', 'tools/ci/windows', 'bench') $total = 0 foreach ($f in $folders) { $results = Invoke-ScriptAnalyzer -Path $f -Recurse -Severity Warning, Error -ExcludeRule PSAvoidUsingWriteHost, PSUseShouldProcessForStateChangingFunctions, PSUseSingularNouns, PSAvoidUsingPositionalParameters diff --git a/.gitignore b/.gitignore index e60bf5fb6..4f0427e83 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,6 @@ vendor/igneum-node-ship/ # Trademark instruction packs name the director and the applicant company; never in the repository brand/trademark/pbip-pack/ brand/trademark/*.zip + +# the reproducible benchmark package (bench/make-package.sh output) +bench/build/ diff --git a/bench/README.md b/bench/README.md new file mode 100644 index 000000000..33c4d68e0 --- /dev/null +++ b/bench/README.md @@ -0,0 +1,80 @@ +# Igneum reproducible benchmark + +One command reproduces the numbers on the Igneum bench table on your own machine, on day one, with no secrets, no node, no +wallet and no network connection. The result is one JSON file you can send back, signed by nothing, that names every +command run and the sha256 of every binary used. + +## Run it + +| Platform | Command | +|---|---| +| Linux (x86_64, NVIDIA driver or any OpenCL driver) | `tar xzf igneum-repro-.tar.gz && cd igneum-repro- && ./repro.sh` | +| macOS (Apple silicon) | the same tar.gz; `./repro.sh` | +| Windows 10 or 11 (x64) | unzip `igneum-repro-.zip`, then in PowerShell: `powershell -ExecutionPolicy Bypass -File repro.ps1` | + +Options: `--seconds 120` (per card, the default), `--only cuda:0,opencl:1` (one card; the indexes are the ones `--list` +prints at the start), `--no-probe`, `--no-sweep`, `--no-prove`, `--out `. On Windows the same as `-Seconds`, +`-Only`, `-NoProbe`, `-NoSweep`, `-NoProve`, `-Out`. + +Stop mining on the card first. A number taken while a miner, a game or another benchmark holds the card is not a number; +the result file does not know, so you do. + +Time: about 4 minutes per card (120 s hash benchmark, three short sweep sizes, the probe table), plus the CPU check (one +second). The optional proving step takes about a minute on an RTX 5090 class card and needs a prover host you built +(below). + +## What runs, in order + +| Step | What | What it needs | What it reports | +|---|---|---|---| +| 1 | The machine | nothing | OS, CPU, memory, every GPU each worker sees (name, driver, memory) | +| 2 | The lottery hash vectors of the published genesis pack (`packs/igneum-genesis-mh`: seed `igneum-genesis`, day 2026-10-03, generator 2, memory-hard 1 GiB dataset, program id `bcc1248b10cc90f2`) | a CPU; every GPU present | bit-exact or not: 3 warps, 96 lanes, the cache FNV, on the CPU through the Rust interpreter and on every GPU through its own compiler (NVRTC, the OpenCL driver, Metal) | +| 3 | The hash benchmark, 120 s per card at 1 GiB | a GPU with 1.3 GB free | MH/s, the hashes done, and the fingerprint of the first 2^24 outputs (equal fingerprints on two machines mean every one of those 16.7 million hashes agreed) | +| 4 | The random-read probe at 4, 64, 256 and 1024 MiB | a GPU | dependent random 4-byte reads per second (the hash's access pattern) and their latency, eight independent chains, 64-byte lines, the coalesced stream bandwidth, an integer chain | +| 5 | The chip-resistance sweep: the same program at 4, 64, 256 and 1024 MiB | a GPU | MH/s per size; the ratio in-cache to 1 GiB; the hash's share of the card's random-read ceiling (MH/s x 128 loads against step 4's chase at 1 GiB) | +| 6 | One fixture shard proven with the pinned guest and verified (optional) | an NVIDIA card with 12 GB or more, Linux or WSL2, a built `igneum-prove-host` (`IGNEUM_PROVE_HOST`) | execute, core and compressed proof times, the verify time, VERIFIED or not; otherwise the line says why it was skipped | +| 7 | The result | nothing | `results/igneum-repro--