diff --git a/.codex/environments/environment.toml b/.codex/environments/environment.toml index 4602347..34450d0 100644 --- a/.codex/environments/environment.toml +++ b/.codex/environments/environment.toml @@ -86,7 +86,7 @@ cd "$tmp" go mod init example.com/controlsys-consumer go mod edit -require=github.com/jamestjsp/controlsys@v0.0.0 go mod edit -replace=github.com/jamestjsp/controlsys="$repo_path" -go mod edit -replace=gonum.org/v1/gonum=github.com/jamestjsp/gonum@v0.17.3-fork +go mod edit -replace=gonum.org/v1/gonum=github.com/jamestjsp/gonum@v0.19.0-fork cat > controlsys_consumer_test.go <<'EOF' package controlsysconsumer diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 327e1a1..4084822 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,7 +1,7 @@ name: CI on: [push, pull_request] env: - GO_VERSION: '1.26.3' + GO_VERSION: '1.27.1' jobs: test: runs-on: ubuntu-latest @@ -28,7 +28,7 @@ jobs: go mod init example.com/controlsys-consumer go mod edit -require=github.com/jamestjsp/controlsys@v0.0.0 go mod edit -replace=github.com/jamestjsp/controlsys="$GITHUB_WORKSPACE" - go mod edit -replace=gonum.org/v1/gonum=github.com/jamestjsp/gonum@v0.17.3-fork + go mod edit -replace=gonum.org/v1/gonum=github.com/jamestjsp/gonum@v0.19.0-fork cat > controlsys_consumer_test.go <<'EOF' package controlsysconsumer diff --git a/README.md b/README.md index dffc6ad..0aa18bc 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ go get github.com/jamestjsp/controlsys > **Note:** This package depends on a [gonum fork](https://github.com/jamestjsp/gonum) for additional LAPACK routines. Because `replace` directives do not propagate to downstream modules, applications that import `controlsys` must add this to their own `go.mod`: > ``` -> replace gonum.org/v1/gonum => github.com/jamestjsp/gonum v0.17.3-fork +> replace gonum.org/v1/gonum => github.com/jamestjsp/gonum v0.19.0-fork > ``` ## Production Readiness diff --git a/docs/benchmarks/gonum-v0.19.0/README.md b/docs/benchmarks/gonum-v0.19.0/README.md new file mode 100644 index 0000000..ced085f --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/README.md @@ -0,0 +1,110 @@ +# Gonum v0.19.0-fork upgrade: performance evidence + +For the updated PR requiring Go 1.27.1, see the [full follow-up](go1.27.1-full/README.md). +It substantially reduces the large regressions below, but confirms residual +slowdowns up to 6.17%. This original Go 1.26.4 report remains historical evidence. + +Measured on 2026-09-12 for PR #171. The upgrade has mixed performance on this +machine. The complete 236-case timing geomean improves 0.75%, but reproducible +slowdowns remain. This is not a regression-free performance approval. Assess the +tradeoff or repair the affected backend paths before merging and publishing the +prepared v1.5.1 release. + +## Comparison + +- Baseline: `fdda4f150d13b34a969de7faed6ae896e827ce94`, Gonum `v0.17.7-fork`. +- Candidate: `54d5d6b119c8b4351db0cd0bc0ebb4122bde94d4`, Gonum `v0.19.0-fork`. +- The baseline was the exact PR parent and freshly fetched `origin/main`. +- Apple M1 Pro, darwin/arm64, Go 1.26.4, `GOMAXPROCS=8`. +- Default Gonum Go BLAS and LAPACK implementations; no backend overrides, + custom build tags, GOFLAGS, or PGO profiles. Native compilation, no emulation. +- Same unchanged benchmark fixtures on both revisions. Both test binaries were + built before timing. No agent builds, tests, or profiling ran concurrently. + This was a normal desktop host, without CPU affinity or power-state control. +- Ten samples per case per revision, alternating baseline/candidate and + candidate/baseline order. Full suite: 100ms per benchmark; focused checks: + 300ms. All benchmark processes exited successfully with matching case sets. +- `benchstat`: `golang.org/x/perf v0.0.0-20260312031701-16a31bc5fbd0`. + +## Results + +The longer follow-up covered the 14 full-sweep slowdowns of at least 3%, plus +DC motor simulation, regulator construction, and Lyapunov allocation behavior. +One nested benchmark needed a separate slash-separated selection. Medians below +come from the longer samples; all listed changes have p < 0.001, except the +10,000-point SISO FRD case (p=0.009). Full tables include confidence intervals. + +| Benchmark | Baseline | Candidate | Time change | +| --- | ---: | ---: | ---: | +| MatLog_N50 | 330.3 us | 372.0 us | +12.62% | +| D2C_ZOH_N50 | 413.3 us | 454.3 us | +9.92% | +| Stabsep_N100 | 8.904 ms | 9.455 ms | +6.18% | +| SystemFRD_SISO_10000 | 220.2 us | 233.7 us | +6.15% | +| Reduce | 45.94 us | 48.43 us | +5.42% | +| Modsep_N50 | 1.429 ms | 1.504 ms | +5.29% | +| Stabsep_N50 | 1.385 ms | 1.458 ms | +5.27% | +| DiscretizeZOH | 21.48 us | 22.58 us | +5.15% | +| MatLog_N20 | 49.37 us | 51.78 us | +4.88% | +| ControllabilityStaircase | 36.36 us | 37.94 us | +4.36% | +| D2C_ZOH_N20 | 61.47 us | 63.94 us | +4.02% | +| Canon_Modal_N50 | 640.5 us | 660.9 us | +3.19% | +| Stabsep_N10 | 32.70 us | 33.47 us | +2.37% | +| Simulate_DCMotor | 46.69 us | 39.72 us | -14.93% | +| Reg_N100_M5_P5 | 79.72 us | 60.92 us | -23.58% | + +The `FrequencySweepKernels/N4_W2/TransferFunction` slowdown did not reproduce +with longer samples (p=0.447). Lyap_N100 timing was inconclusive (p=0.353). +Absence of statistical significance does not establish equivalence. The full +sweep contains additional smaller changes; see its complete table rather than +using this selected follow-up as an aggregate performance score. Multiple case +comparisons can produce false positives, especially for small effects. + +Allocations also vary: DC motor simulation drops from 45 to 11 allocs/op and +regulator construction from 55 to 25. The focused SISO FRD case rises from 60 to +61, and Stabsep_N100 from 481 to 482. Lyap_N100's full-sweep increase from 363 to +364 did not reproduce in the focused run (both medians 363), although its bytes +per operation increased 0.08%. Tables retain all memory measurements. + +These data establish behavior only on this host at eight workers. They do not +establish performance on amd64, other worker counts, or arbitrary models, and do +not attribute a specific backend change as the cause. Correctness tests and race +tests passed separately; performance measurements do not replace those tests. + +## Evidence and reproduction + +- `full-benchstat.txt`: all 236 cases, timing and allocations. +- `focused-benchstat.txt`: 16 longer follow-up cases. +- `subcase-benchstat.txt`: the nested transfer-function follow-up. +- Matching `*-baseline.txt.gz` and `*-candidate.txt.gz`: complete raw samples. +- `metadata.json`: full-sweep binary hashes, flags, environment, and run order. + +From the repository, build isolated copies of the exact revisions, then run the +existing Go benchmarks. Prebuilding is equivalent to `go test -run '^$' +-bench=. -benchmem -benchtime=100ms -count=1`, with compilation outside timing. + +```bash +set -eu +bench_dir=$(mktemp -d) +mkdir "$bench_dir/baseline" "$bench_dir/candidate" +git archive fdda4f150d13b34a969de7faed6ae896e827ce94 | tar -x -C "$bench_dir/baseline" +git archive 54d5d6b119c8b4351db0cd0bc0ebb4122bde94d4 | tar -x -C "$bench_dir/candidate" +(cd "$bench_dir/baseline" && go test -c -o "$bench_dir/baseline.test") +(cd "$bench_dir/candidate" && go test -c -o "$bench_dir/candidate.test") +export GOMAXPROCS=8 +for round in $(seq 1 10); do + order='baseline candidate' + if [ $((round % 2)) -eq 0 ]; then order='candidate baseline'; fi + for label in $order; do + "$bench_dir/$label.test" -test.run='^$' -test.bench=. \ + -test.benchmem -test.benchtime=100ms -test.count=1 \ + >> "$bench_dir/$label.txt" + done +done +benchstat "$bench_dir/baseline.txt" "$bench_dir/candidate.txt" +``` + +For focused reproduction, use 300ms and select the top-level names in +`focused-benchstat.txt` with `^Benchmark(Name1|Name2|...)$`. For the nested case, +use `^BenchmarkFrequencySweepKernels$/^N4_W2$/^TransferFunction$` separately. +To reanalyze retained data, decompress each pair with `gzip -dc` and pass the +resulting files to the recorded benchstat version. diff --git a/docs/benchmarks/gonum-v0.19.0/focused-baseline.txt.gz b/docs/benchmarks/gonum-v0.19.0/focused-baseline.txt.gz new file mode 100644 index 0000000..7729376 Binary files /dev/null and b/docs/benchmarks/gonum-v0.19.0/focused-baseline.txt.gz differ diff --git a/docs/benchmarks/gonum-v0.19.0/focused-benchstat.txt b/docs/benchmarks/gonum-v0.19.0/focused-benchstat.txt new file mode 100644 index 0000000..0a43076 --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/focused-benchstat.txt @@ -0,0 +1,64 @@ +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro + │ baseline.txt │ candidate.txt │ + │ sec/op │ sec/op vs base │ +Reduce-8 45.94µ ± 1% 48.43µ ± 7% +5.42% (p=0.000 n=10) +DiscretizeZOH-8 21.48µ ± 1% 22.58µ ± 6% +5.15% (p=0.000 n=10) +ControllabilityStaircase-8 36.36µ ± 2% 37.94µ ± 3% +4.36% (p=0.000 n=10) +Simulate_DCMotor-8 46.69µ ± 1% 39.72µ ± 2% -14.93% (p=0.000 n=10) +Lyap_N100-8 4.052m ± 1% 4.048m ± 0% ~ (p=0.353 n=10) +Reg_N100_M5_P5-8 79.72µ ± 7% 60.92µ ± 2% -23.58% (p=0.000 n=10) +D2C_ZOH_N20-8 61.47µ ± 1% 63.94µ ± 1% +4.02% (p=0.000 n=10) +D2C_ZOH_N50-8 413.3µ ± 1% 454.3µ ± 1% +9.92% (p=0.000 n=10) +MatLog_N20-8 49.37µ ± 1% 51.78µ ± 1% +4.88% (p=0.000 n=10) +MatLog_N50-8 330.3µ ± 1% 372.0µ ± 3% +12.62% (p=0.000 n=10) +SystemFRD_SISO_10000-8 220.2µ ± 6% 233.7µ ± 3% +6.15% (p=0.009 n=10) +Canon_Modal_N50-8 640.5µ ± 1% 660.9µ ± 2% +3.19% (p=0.000 n=10) +Stabsep_N10-8 32.70µ ± 1% 33.47µ ± 1% +2.37% (p=0.000 n=10) +Stabsep_N50-8 1.385m ± 1% 1.458m ± 3% +5.27% (p=0.000 n=10) +Stabsep_N100-8 8.904m ± 2% 9.455m ± 4% +6.18% (p=0.000 n=10) +Modsep_N50-8 1.429m ± 3% 1.504m ± 3% +5.29% (p=0.000 n=10) +geomean 213.2µ 217.1µ +1.84% + + │ baseline.txt │ candidate.txt │ + │ B/op │ B/op vs base │ +Reduce-8 52.43Ki ± 0% 52.44Ki ± 0% +0.02% (p=0.002 n=10) +DiscretizeZOH-8 21.67Ki ± 0% 21.67Ki ± 0% ~ (p=0.696 n=10) +ControllabilityStaircase-8 22.16Ki ± 0% 22.15Ki ± 0% ~ (p=0.126 n=10) +Simulate_DCMotor-8 19.67Ki ± 0% 16.28Ki ± 0% -17.22% (p=0.000 n=10) +Lyap_N100-8 373.0Ki ± 0% 373.3Ki ± 0% +0.08% (p=0.000 n=10) +Reg_N100_M5_P5-8 424.2Ki ± 0% 421.4Ki ± 0% -0.66% (p=0.000 n=10) +D2C_ZOH_N20-8 77.60Ki ± 1% 77.40Ki ± 0% -0.25% (p=0.035 n=10) +D2C_ZOH_N50-8 463.5Ki ± 0% 463.2Ki ± 0% ~ (p=0.218 n=10) +MatLog_N20-8 64.54Ki ± 0% 64.50Ki ± 0% ~ (p=0.954 n=10) +MatLog_N50-8 391.2Ki ± 0% 391.8Ki ± 0% +0.16% (p=0.007 n=10) +SystemFRD_SISO_10000-8 922.6Ki ± 0% 922.6Ki ± 0% +0.01% (p=0.000 n=10) +Canon_Modal_N50-8 209.7Ki ± 0% 211.0Ki ± 0% +0.58% (p=0.001 n=10) +Stabsep_N10-8 29.33Ki ± 0% 29.32Ki ± 0% ~ (p=0.288 n=10) +Stabsep_N50-8 635.1Ki ± 0% 635.4Ki ± 0% ~ (p=0.796 n=10) +Stabsep_N100-8 2.528Mi ± 0% 2.532Mi ± 0% ~ (p=0.218 n=10) +Modsep_N50-8 640.9Ki ± 0% 640.3Ki ± 0% ~ (p=0.218 n=10) +geomean 168.6Ki 166.6Ki -1.18% + + │ baseline.txt │ candidate.txt │ + │ allocs/op │ allocs/op vs base │ +Reduce-8 170.0 ± 0% 170.0 ± 0% ~ (p=1.000 n=10) ¹ +DiscretizeZOH-8 28.00 ± 0% 28.00 ± 0% ~ (p=1.000 n=10) ¹ +ControllabilityStaircase-8 109.0 ± 0% 109.0 ± 0% ~ (p=1.000 n=10) ¹ +Simulate_DCMotor-8 45.00 ± 0% 11.00 ± 0% -75.56% (p=0.000 n=10) +Lyap_N100-8 363.0 ± 0% 363.0 ± 0% ~ (p=0.474 n=10) +Reg_N100_M5_P5-8 55.00 ± 0% 25.00 ± 0% -54.55% (p=0.000 n=10) +D2C_ZOH_N20-8 50.00 ± 0% 50.00 ± 0% ~ (p=1.000 n=10) ¹ +D2C_ZOH_N50-8 53.00 ± 0% 53.00 ± 0% ~ (p=1.000 n=10) ¹ +MatLog_N20-8 30.00 ± 0% 30.00 ± 0% ~ (p=1.000 n=10) ¹ +MatLog_N50-8 32.00 ± 0% 32.00 ± 0% ~ (p=1.000 n=10) ¹ +SystemFRD_SISO_10000-8 60.00 ± 2% 61.00 ± 0% +1.67% (p=0.001 n=10) +Canon_Modal_N50-8 112.0 ± 0% 112.0 ± 0% ~ (p=1.000 n=10) ¹ +Stabsep_N10-8 79.00 ± 0% 79.00 ± 0% ~ (p=1.000 n=10) ¹ +Stabsep_N50-8 156.0 ± 1% 156.0 ± 0% ~ (p=0.211 n=10) +Stabsep_N100-8 481.0 ± 0% 482.0 ± 0% +0.21% (p=0.002 n=10) +Modsep_N50-8 143.0 ± 1% 143.0 ± 0% ~ (p=0.087 n=10) +geomean 84.50 73.74 -12.73% +¹ all samples are equal diff --git a/docs/benchmarks/gonum-v0.19.0/focused-candidate.txt.gz b/docs/benchmarks/gonum-v0.19.0/focused-candidate.txt.gz new file mode 100644 index 0000000..0cea882 Binary files /dev/null and b/docs/benchmarks/gonum-v0.19.0/focused-candidate.txt.gz differ diff --git a/docs/benchmarks/gonum-v0.19.0/full-baseline.txt.gz b/docs/benchmarks/gonum-v0.19.0/full-baseline.txt.gz new file mode 100644 index 0000000..35689e1 Binary files /dev/null and b/docs/benchmarks/gonum-v0.19.0/full-baseline.txt.gz differ diff --git a/docs/benchmarks/gonum-v0.19.0/full-benchstat.txt b/docs/benchmarks/gonum-v0.19.0/full-benchstat.txt new file mode 100644 index 0000000..0d5f651 --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/full-benchstat.txt @@ -0,0 +1,727 @@ +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro + │ baseline.txt │ candidate.txt │ + │ sec/op │ sec/op vs base │ +SimulateWithDelay_SISO-8 19.76µ ± 1% 20.05µ ± 2% +1.44% (p=0.023 n=10) +SimulateWithDelay_MIMO-8 111.2µ ± 2% 110.3µ ± 1% ~ (p=0.063 n=10) +BilinearDiscretize-8 10.61µ ± 2% 10.72µ ± 2% ~ (p=0.123 n=10) +TransferFunction_MIMO-8 62.16µ ± 2% 63.11µ ± 1% ~ (p=0.165 n=10) +Reduce-8 46.66µ ± 2% 48.66µ ± 1% +4.28% (p=0.000 n=10) +AbsorbDelay-8 1.081µ ± 3% 1.101µ ± 4% ~ (p=0.123 n=10) +DiscretizeZOH-8 21.59µ ± 2% 22.53µ ± 1% +4.36% (p=0.000 n=10) +DenseNorm-8 849.2n ± 1% 845.7n ± 0% ~ (p=0.143 n=10) +Series-8 1.326µ ± 4% 1.296µ ± 3% ~ (p=0.159 n=10) +Parallel-8 816.6n ± 8% 780.8n ± 12% ~ (p=0.280 n=10) +Feedback-8 4.501µ ± 2% 4.580µ ± 2% +1.74% (p=0.037 n=10) +FeedbackLFT-8 17.76µ ± 5% 17.48µ ± 4% ~ (p=0.971 n=10) +Append-8 954.5n ± 5% 919.8n ± 8% ~ (p=0.225 n=10) +FreqResponse-8 38.67µ ± 1% 39.70µ ± 1% +2.66% (p=0.000 n=10) +FreqResponse_ShortSweep-8 13.01µ ± 1% 12.95µ ± 1% ~ (p=0.289 n=10) +FrequencySweepKernels/N4_W2/StateSpace-8 653.0n ± 1% 651.1n ± 2% ~ (p=0.353 n=10) +FrequencySweepKernels/N4_W2/TransferFunction-8 9.215µ ± 3% 9.528µ ± 4% +3.40% (p=0.043 n=10) +FrequencySweepKernels/N4_W8/StateSpace-8 2.386µ ± 2% 2.377µ ± 1% ~ (p=0.066 n=10) +FrequencySweepKernels/N4_W8/TransferFunction-8 9.451µ ± 4% 9.875µ ± 6% ~ (p=0.218 n=10) +FrequencySweepKernels/N4_W32/StateSpace-8 9.446µ ± 1% 9.344µ ± 1% -1.09% (p=0.028 n=10) +FrequencySweepKernels/N4_W32/TransferFunction-8 10.46µ ± 6% 10.56µ ± 4% ~ (p=0.912 n=10) +FrequencySweepKernels/N4_W100/StateSpace-8 28.68µ ± 2% 28.55µ ± 1% -0.47% (p=0.015 n=10) +FrequencySweepKernels/N4_W100/TransferFunction-8 12.76µ ± 5% 13.23µ ± 3% ~ (p=0.052 n=10) +FrequencySweepKernels/N10_W2/StateSpace-8 3.408µ ± 1% 3.387µ ± 1% ~ (p=0.224 n=10) +FrequencySweepKernels/N10_W2/TransferFunction-8 28.36µ ± 4% 29.03µ ± 3% ~ (p=0.190 n=10) +FrequencySweepKernels/N10_W8/StateSpace-8 12.85µ ± 2% 12.83µ ± 1% ~ (p=0.529 n=10) +FrequencySweepKernels/N10_W8/TransferFunction-8 29.57µ ± 5% 29.78µ ± 2% ~ (p=0.631 n=10) +FrequencySweepKernels/N10_W32/StateSpace-8 51.11µ ± 1% 50.69µ ± 1% ~ (p=0.075 n=10) +FrequencySweepKernels/N10_W32/TransferFunction-8 32.44µ ± 2% 32.58µ ± 1% ~ (p=0.796 n=10) +FrequencySweepKernels/N10_W100/StateSpace-8 156.1µ ± 2% 155.3µ ± 1% -0.51% (p=0.035 n=10) +FrequencySweepKernels/N10_W100/TransferFunction-8 39.57µ ± 2% 39.67µ ± 1% ~ (p=0.353 n=10) +Bode-8 103.6µ ± 7% 104.1µ ± 1% ~ (p=0.481 n=10) +Zeros_SISO-8 14.48µ ± 6% 14.49µ ± 3% ~ (p=0.971 n=10) +Zeros_MIMO-8 15.77µ ± 3% 15.55µ ± 3% ~ (p=0.393 n=10) +Zeros_NonSquare-8 11.28µ ± 1% 11.38µ ± 1% ~ (p=0.160 n=10) +ControllabilityStaircase-8 36.10µ ± 1% 38.06µ ± 2% +5.44% (p=0.000 n=10) +SimulateNoDelay-8 177.3µ ± 2% 172.0µ ± 1% -2.99% (p=0.000 n=10) +ThiranDelay-8 351.0n ± 2% 343.8n ± 1% -2.04% (p=0.004 n=10) +PadeDelay-8 413.6n ± 5% 409.9n ± 2% -0.89% (p=0.050 n=10) +DecomposeIODelay-8 204.9n ± 1% 206.8n ± 1% +0.88% (p=0.024 n=10) +PullDelaysToLFT-8 1.405µ ± 5% 1.387µ ± 5% ~ (p=0.305 n=10) +GetDelayModel-8 1.478µ ± 11% 1.461µ ± 3% ~ (p=0.197 n=10) +SetDelayModel-8 528.5n ± 8% 517.6n ± 2% -2.07% (p=0.016 n=10) +AbsorbInternalDelay-8 1.442µ ± 11% 1.403µ ± 4% ~ (p=0.086 n=10) +DiscretizeWithOpts_Thiran-8 3.609µ ± 7% 3.584µ ± 2% ~ (p=0.565 n=10) +DiscretizeWithOpts_IODelayThiran-8 3.714µ ± 9% 3.727µ ± 1% ~ (p=0.971 n=10) +FeedbackApproximatedDelays-8 5.450µ ± 11% 5.450µ ± 1% ~ (p=0.782 n=10) +SimulateInternalDelay-8 22.72µ ± 13% 22.85µ ± 2% ~ (p=0.210 n=10) +FreqResponseWithDelay-8 20.79µ ± 5% 20.31µ ± 2% -2.30% (p=0.019 n=10) +PadeSystem-8 9.072µ ± 11% 8.935µ ± 5% ~ (p=0.315 n=10) +ZeroDelayApprox-8 1.631µ ± 6% 1.640µ ± 2% ~ (p=0.516 n=10) +IsStrictlyUpperTriangular-8 110.4n ± 2% 110.0n ± 1% ~ (p=0.268 n=10) +FreqResponseLFT-8 102.1µ ± 5% 101.1µ ± 1% ~ (p=0.190 n=10) +Simulate_DCMotor-8 46.87µ ± 8% 39.78µ ± 1% -15.13% (p=0.000 n=10) +FreqResponse_B747Lateral-8 18.47µ ± 7% 17.95µ ± 4% -2.84% (p=0.011 n=10) +Simulate_MassSpringDamper-8 48.20µ ± 3% 42.89µ ± 1% -11.02% (p=0.000 n=10) +DiscretizeAndSimulate_B747Longitudinal-8 16.04µ ± 7% 13.51µ ± 2% -15.81% (p=0.000 n=10) +Simulate_Large-8 2.064m ± 2% 2.065m ± 1% ~ (p=0.481 n=10) +FeedbackAndSimulate-8 19.91µ ± 5% 16.81µ ± 2% -15.59% (p=0.000 n=10) +Bode_LargeMIMO-8 571.8µ ± 3% 572.2µ ± 2% ~ (p=0.529 n=10) +Lyap_N10-8 14.44µ ± 3% 14.45µ ± 4% ~ (p=0.579 n=10) +Lyap_N50-8 636.0µ ± 2% 628.9µ ± 2% -1.11% (p=0.043 n=10) +Lyap_N100-8 4.050m ± 1% 4.040m ± 1% ~ (p=0.218 n=10) +DLyap_N10-8 14.30µ ± 2% 14.28µ ± 3% ~ (p=0.579 n=10) +DLyap_N50-8 837.6µ ± 1% 836.5µ ± 3% ~ (p=0.631 n=10) +DLyap_N100-8 6.991m ± 1% 6.984m ± 1% ~ (p=0.796 n=10) +Care_N10_M2-8 69.78µ ± 9% 69.83µ ± 9% ~ (p=0.912 n=10) +Care_N50_M5-8 4.814m ± 2% 4.871m ± 2% ~ (p=0.190 n=10) +Care_N100_M5-8 37.94m ± 1% 37.67m ± 1% ~ (p=0.075 n=10) +Dare_N10_M2-8 69.71µ ± 8% 70.69µ ± 8% ~ (p=0.393 n=10) +Dare_N50_M5-8 5.400m ± 2% 5.510m ± 2% +2.03% (p=0.007 n=10) +Dare_N100_M5-8 37.67m ± 1% 37.30m ± 0% -0.98% (p=0.001 n=10) +Gram-8 26.88µ ± 2% 26.92µ ± 3% ~ (p=0.853 n=10) +Ctrb-8 1.658µ ± 1% 1.662µ ± 1% ~ (p=0.926 n=10) +H2Norm-8 25.50µ ± 2% 25.77µ ± 2% +1.07% (p=0.019 n=10) +HSV-8 49.73µ ± 2% 49.62µ ± 2% ~ (p=0.928 n=10) +HinfNorm-8 2.300m ± 6% 2.304m ± 10% ~ (p=0.853 n=10) +H2Syn_Simple-8 14.60µ ± 4% 14.78µ ± 4% ~ (p=0.247 n=10) +HinfSyn_Simple-8 196.2µ ± 1% 194.9µ ± 5% ~ (p=0.739 n=10) +Balreal-8 57.38µ ± 3% 57.60µ ± 1% ~ (p=0.853 n=10) +Balred-8 58.12µ ± 3% 57.73µ ± 2% ~ (p=0.684 n=10) +Place_N10_M2-8 14.84µ ± 5% 14.63µ ± 2% ~ (p=0.079 n=10) +Place_N50_M5-8 289.3µ ± 1% 290.1µ ± 1% ~ (p=0.579 n=10) +Place_N100_M5-8 1.918m ± 2% 1.914m ± 1% ~ (p=0.684 n=10) +Acker_N5-8 2.715µ ± 2% 2.689µ ± 2% ~ (p=0.066 n=10) +Acker_N10-8 12.56µ ± 2% 12.63µ ± 2% ~ (p=0.592 n=10) +Lqr_N10_M2-8 63.01µ ± 11% 65.18µ ± 6% ~ (p=0.971 n=10) +Lqr_N50_M5-8 4.857m ± 2% 4.860m ± 1% ~ (p=0.739 n=10) +Lqr_N100_M5-8 37.81m ± 3% 37.63m ± 1% -0.47% (p=0.043 n=10) +Kalman_N10_M2_P3-8 84.41µ ± 6% 83.87µ ± 5% ~ (p=0.684 n=10) +Kalman_N50_M5_P5-8 5.572m ± 3% 5.563m ± 1% ~ (p=0.912 n=10) +Kalman_N100_M5_P5-8 38.09m ± 2% 38.06m ± 1% ~ (p=0.529 n=10) +Estim_N10_M2_P3-8 1.792µ ± 6% 1.706µ ± 2% ~ (p=0.063 n=10) +Estim_N50_M5_P5-8 16.91µ ± 8% 16.37µ ± 8% ~ (p=0.089 n=10) +Estim_N100_M5_P5-8 58.70µ ± 7% 50.48µ ± 9% -14.01% (p=0.000 n=10) +Reg_N10_M2_P3-8 1.984µ ± 4% 1.921µ ± 2% -3.18% (p=0.009 n=10) +Reg_N50_M5_P5-8 19.50µ ± 8% 19.28µ ± 7% ~ (p=0.436 n=10) +Reg_N100_M5_P5-8 85.22µ ± 3% 66.83µ ± 3% -21.59% (p=0.000 n=10) +PolyRoots_N10-8 18.67µ ± 1% 18.68µ ± 1% ~ (p=0.529 n=10) +ZPKEval_SISO-8 50.30n ± 6% 49.90n ± 2% ~ (p=0.853 n=10) +ZPKFreqResponse_SISO_100-8 1.765µ ± 2% 1.737µ ± 2% -1.59% (p=0.012 n=10) +ZPKToTF_SISO_N10-8 1.761µ ± 1% 1.761µ ± 1% ~ (p=0.566 n=10) +TFToZPK_SISO_N10-8 36.45µ ± 1% 36.64µ ± 2% ~ (p=0.190 n=10) +SSToZPK_SISO-8 17.07µ ± 3% 17.28µ ± 1% ~ (p=0.481 n=10) +ZPKToSS_SISO-8 770.5n ± 1% 763.8n ± 1% ~ (p=0.218 n=10) +PolyFromComplexRoots_N20-8 327.2n ± 5% 320.9n ± 2% -1.91% (p=0.035 n=10) +Sigma_SISO-8 12.59µ ± 6% 12.53µ ± 2% ~ (p=1.000 n=10) +Sigma_MIMO-8 94.95µ ± 1% 94.07µ ± 1% ~ (p=0.075 n=10) +Nichols-8 19.29µ ± 3% 19.32µ ± 3% ~ (p=0.481 n=10) +Nyquist-8 47.06µ ± 2% 47.14µ ± 1% ~ (p=1.000 n=10) +FreqRespEst_SISO-8 146.8µ ± 1% 147.4µ ± 1% ~ (p=0.436 n=10) +FreqRespEst_MIMO-8 375.4µ ± 1% 376.8µ ± 1% ~ (p=0.529 n=10) +BlkDiag-8 1.629µ ± 8% 1.589µ ± 8% ~ (p=0.184 n=10) +Connect-8 5.499µ ± 3% 5.476µ ± 4% ~ (p=0.643 n=10) +LFT-8 5.320µ ± 1% 5.299µ ± 2% ~ (p=0.481 n=10) +LFT_Large-8 10.52µ ± 2% 10.43µ ± 2% ~ (p=0.325 n=10) +D2C_ZOH_N2-8 3.119µ ± 2% 3.117µ ± 3% ~ (p=0.684 n=10) +D2C_ZOH_N5-8 6.659µ ± 2% 6.742µ ± 1% ~ (p=0.101 n=10) +D2C_ZOH_N20-8 62.01µ ± 2% 64.39µ ± 2% +3.84% (p=0.000 n=10) +D2C_ZOH_N50-8 418.4µ ± 1% 455.5µ ± 2% +8.87% (p=0.000 n=10) +D2C_Tustin_N20-8 14.17µ ± 1% 14.22µ ± 0% ~ (p=0.165 n=10) +MatLog_N20-8 49.90µ ± 1% 52.48µ ± 2% +5.18% (p=0.000 n=10) +MatLog_N50-8 333.2µ ± 2% 374.1µ ± 2% +12.28% (p=0.000 n=10) +DCGain_StableMIMO_N10_M4_P6-8 3.265µ ± 1% 3.319µ ± 1% +1.67% (p=0.004 n=10) +DCGain_IntegratorMIMO_N10_M4_P6-8 4.728µ ± 8% 4.825µ ± 3% +2.06% (p=0.023 n=10) +DCGain_IntegratorMIMO_N40_M8_P8-8 51.21µ ± 3% 51.02µ ± 2% ~ (p=0.853 n=10) +SystemFRD_SISO_200-8 11.53µ ± 6% 11.60µ ± 6% ~ (p=0.838 n=10) +SystemFRD_SISO_2000-8 54.55µ ± 4% 53.22µ ± 3% ~ (p=0.280 n=10) +SystemFRD_SISO_10000-8 225.7µ ± 6% 247.6µ ± 3% +9.66% (p=0.001 n=10) +SystemFRD_MIMO_200-8 90.90µ ± 2% 90.43µ ± 1% ~ (p=0.190 n=10) +SystemFRD_MIMO_2000-8 517.7µ ± 8% 511.7µ ± 8% ~ (p=0.353 n=10) +SystemFRD_MIMO_10000-8 2.406m ± 3% 2.374m ± 3% ~ (p=0.218 n=10) +SystemFRD_Large_2000-8 8.366m ± 1% 8.385m ± 1% ~ (p=0.393 n=10) +FRDSigma_SISO_200-8 998.7n ± 2% 979.2n ± 3% -1.96% (p=0.043 n=10) +FRDSigma_SISO_2000-8 9.170µ ± 5% 9.100µ ± 9% ~ (p=0.469 n=10) +FRDSigma_MIMO_200-8 226.8µ ± 1% 226.6µ ± 1% ~ (p=0.796 n=10) +FRDSigma_MIMO_2000-8 2.252m ± 1% 2.250m ± 0% ~ (p=0.684 n=10) +FRDSigma_MIMO_10000-8 11.24m ± 0% 11.21m ± 1% ~ (p=0.739 n=10) +FRDSigma_Large_2000-8 4.228m ± 1% 4.237m ± 1% ~ (p=0.190 n=10) +FRDMargin_200-8 5.790µ ± 1% 5.726µ ± 2% ~ (p=0.247 n=10) +FRDMargin_2000-8 49.76µ ± 1% 49.67µ ± 0% ~ (p=0.289 n=10) +FRDMargin_10000-8 247.0µ ± 1% 245.9µ ± 2% ~ (p=0.796 n=10) +FRDMargin_NegGM_2000-8 50.75µ ± 1% 50.86µ ± 4% ~ (p=0.280 n=10) +FRDSigma_MIMO5x5_2000-8 6.172m ± 2% 6.167m ± 0% ~ (p=0.912 n=10) +FRDSeries_SISO_200-8 3.585µ ± 5% 3.690µ ± 8% ~ (p=0.684 n=10) +FRDSeries_SISO_2000-8 38.99µ ± 1% 38.40µ ± 2% -1.53% (p=0.009 n=10) +FRDSeries_MIMO_200-8 16.18µ ± 2% 15.87µ ± 3% ~ (p=0.061 n=10) +FRDSeries_MIMO_2000-8 174.0µ ± 2% 170.2µ ± 3% ~ (p=0.089 n=10) +FRDSeries_MIMO_10000-8 811.8µ ± 2% 808.2µ ± 2% ~ (p=0.315 n=10) +FRDParallel_SISO_2000-8 38.17µ ± 2% 37.33µ ± 2% -2.20% (p=0.043 n=10) +FRDParallel_MIMO_2000-8 113.7µ ± 3% 112.6µ ± 7% ~ (p=0.853 n=10) +FRDFeedback_SISO_200-8 7.170µ ± 2% 7.017µ ± 4% ~ (p=0.210 n=10) +FRDFeedback_SISO_2000-8 71.26µ ± 7% 71.17µ ± 7% ~ (p=0.631 n=10) +FRDFeedback_MIMO_200-8 53.44µ ± 4% 52.88µ ± 1% -1.05% (p=0.009 n=10) +FRDFeedback_MIMO_2000-8 540.2µ ± 2% 532.8µ ± 3% -1.37% (p=0.035 n=10) +FRDFeedback_MIMO_10000-8 2.601m ± 2% 2.605m ± 2% ~ (p=0.579 n=10) +FRDFeedback_MIMO8x8_2000-8 4.153m ± 2% 4.137m ± 1% ~ (p=0.684 n=10) +FRDAbs_MIMO_2000-8 199.5µ ± 7% 192.0µ ± 5% ~ (p=0.315 n=10) +FRDSelectFrequencies_MIMO_2000-8 68.61µ ± 2% 66.83µ ± 6% ~ (p=0.353 n=10) +FRDPeakGain_MIMO_2000-8 2.244m ± 2% 2.242m ± 2% ~ (p=0.853 n=10) +ModelArrayFreqResponse_MIMO_16x200-8 1.165m ± 3% 1.162m ± 5% ~ (p=0.739 n=10) +ModelArrayFreqResponseManualLoop_MIMO_16x200-8 1.162m ± 3% 1.140m ± 1% -1.87% (p=0.023 n=10) +Step_SISO_N2-8 10.34µ ± 3% 10.35µ ± 1% ~ (p=0.631 n=10) +Step_SISO_N10-8 114.4µ ± 3% 106.4µ ± 2% -6.94% (p=0.000 n=10) +Step_SISO_N50-8 7.085m ± 1% 7.080m ± 1% ~ (p=0.579 n=10) +Step_MIMO_N10-8 211.9µ ± 4% 212.2µ ± 3% ~ (p=0.529 n=10) +StepInfo_SISO_N10-8 3.100µ ± 1% 3.107µ ± 1% ~ (p=0.469 n=10) +StepInfo_MIMO_N10-8 34.50µ ± 1% 34.58µ ± 1% ~ (p=0.617 n=10) +ModelArrayStep_MIMO_16-8 2.978m ± 1% 2.990m ± 2% ~ (p=0.075 n=10) +ModelArrayStepManualLoop_MIMO_16-8 2.956m ± 1% 2.978m ± 2% ~ (p=0.089 n=10) +Impulse_SISO_N2-8 10.24µ ± 1% 10.29µ ± 2% ~ (p=0.739 n=10) +Impulse_SISO_N10-8 113.9µ ± 1% 105.9µ ± 1% -6.97% (p=0.000 n=10) +Impulse_SISO_N50-8 7.079m ± 1% 7.064m ± 2% ~ (p=0.280 n=10) +Impulse_MIMO_N10-8 210.8µ ± 1% 212.9µ ± 1% +0.99% (p=0.015 n=10) +Lsim_SISO_N2-8 28.51µ ± 1% 23.88µ ± 2% -16.24% (p=0.000 n=10) +Lsim_SISO_N10-8 67.07µ ± 1% 62.05µ ± 2% -7.49% (p=0.000 n=10) +Lsim_SISO_N50-8 1.040m ± 1% 1.045m ± 1% +0.52% (p=0.035 n=10) +Lsim_MIMO_N10-8 92.82µ ± 3% 85.97µ ± 1% -7.38% (p=0.000 n=10) +Lsim_SISO_1e4-8 619.8µ ± 1% 560.1µ ± 1% -9.63% (p=0.000 n=10) +Lsim_MIMO_1e4-8 1.654m ± 1% 1.548m ± 2% -6.44% (p=0.000 n=10) +Lsim_Discrete_SISO-8 64.55µ ± 2% 56.56µ ± 2% -12.37% (p=0.000 n=10) +Loopsens_SISO_N2-8 8.663µ ± 2% 8.660µ ± 2% ~ (p=0.796 n=10) +Loopsens_SISO_N10-8 14.20µ ± 1% 14.32µ ± 2% ~ (p=0.197 n=10) +Loopsens_MIMO_N10-8 19.85µ ± 3% 19.50µ ± 2% ~ (p=0.247 n=10) +Canon_Modal_N2-8 2.413µ ± 1% 2.422µ ± 3% ~ (p=0.494 n=10) +Canon_Modal_N10-8 20.98µ ± 2% 20.85µ ± 4% ~ (p=0.481 n=10) +Canon_Modal_N50-8 640.6µ ± 1% 665.9µ ± 2% +3.95% (p=0.000 n=10) +Canon_Modal_N100-8 7.800m ± 1% 7.783m ± 3% ~ (p=0.853 n=10) +Canon_Comp_N2-8 2.826µ ± 2% 2.866µ ± 5% +1.42% (p=0.020 n=10) +Canon_Comp_N10-8 21.17µ ± 1% 21.15µ ± 4% ~ (p=0.971 n=10) +DescriptorToExplicit_N10-8 3.335µ ± 4% 3.304µ ± 4% ~ (p=0.279 n=10) +DescriptorFreqResponse_MIMO_N10x200-8 351.5µ ± 1% 351.6µ ± 1% ~ (p=0.631 n=10) +DescriptorFreqResponse_MIMO_N50x200-8 15.80m ± 1% 15.73m ± 1% ~ (p=0.393 n=10) +FixedInputReduction_N10-8 559.2n ± 2% 560.6n ± 6% ~ (p=0.912 n=10) +TunableGainCurrentSystem_4x4-8 233.5n ± 7% 242.8n ± 10% ~ (p=0.853 n=10) +TunableGainSampleCurrentSystem_4x4-8 862.2n ± 3% 854.1n ± 8% ~ (p=0.481 n=10) +GeneralizedCurrentSystem_SISO-8 184.6n ± 5% 178.8n ± 11% ~ (p=0.079 n=10) +GeneralizedClosedLoop_SISO-8 2.468µ ± 2% 2.486µ ± 7% ~ (p=0.382 n=10) +TuningGoalWeightedGain_SISO-8 15.65µ ± 2% 15.21µ ± 8% ~ (p=0.119 n=10) +TuningGoalWeightedGain_MIMO-8 125.4µ ± 3% 126.9µ ± 3% ~ (p=0.971 n=10) +TuningGoalDynamicWeightedGain_MIMO-8 120.0µ ± 1% 119.5µ ± 4% ~ (p=0.631 n=10) +Systune_SISO-8 76.58µ ± 5% 75.39µ ± 7% ~ (p=0.393 n=10) +Systune_MIMO-8 193.7µ ± 3% 188.4µ ± 3% -2.77% (p=0.004 n=10) +PhysicalAssembly_8Components-8 19.66µ ± 4% 18.96µ ± 7% -3.57% (p=0.035 n=10) +ModalTruncate_N50_Order10-8 468.5µ ± 1% 468.8µ ± 2% ~ (p=0.579 n=10) +Passivity_SISO-8 8.449µ ± 3% 8.229µ ± 5% ~ (p=0.143 n=10) +FRDPassivity_MIMO-8 2.448µ ± 1% 2.425µ ± 2% ~ (p=0.183 n=10) +Stabsep_N2-8 3.135µ ± 2% 3.121µ ± 2% ~ (p=0.631 n=10) +Stabsep_N10-8 33.37µ ± 2% 34.37µ ± 2% +3.00% (p=0.019 n=10) +Stabsep_N50-8 1.403m ± 1% 1.473m ± 2% +4.97% (p=0.000 n=10) +Stabsep_N100-8 8.983m ± 1% 9.558m ± 2% +6.40% (p=0.000 n=10) +Modsep_N10-8 34.93µ ± 2% 35.97µ ± 2% +2.99% (p=0.003 n=10) +Modsep_N50-8 1.436m ± 1% 1.513m ± 3% +5.35% (p=0.000 n=10) +Ssbal_N2-8 322.8n ± 2% 319.1n ± 2% ~ (p=0.123 n=10) +Ssbal_N10-8 891.2n ± 1% 862.1n ± 5% -3.27% (p=0.018 n=10) +Ssbal_N50-8 10.82µ ± 3% 10.45µ ± 5% -3.41% (p=0.015 n=10) +Prescale_N2-8 771.4n ± 1% 757.0n ± 2% -1.85% (p=0.011 n=10) +Prescale_N10-8 3.188µ ± 1% 3.201µ ± 3% ~ (p=0.436 n=10) +Prescale_N50-8 64.66µ ± 0% 64.86µ ± 1% ~ (p=1.000 n=10) +Sminreal_N2-8 259.0n ± 2% 255.9n ± 4% ~ (p=0.280 n=10) +Sminreal_N10-8 589.5n ± 4% 563.0n ± 7% -4.50% (p=0.019 n=10) +Sminreal_N50-8 4.951µ ± 7% 4.751µ ± 2% ~ (p=0.315 n=10) +Inv_SISO_N2-8 941.6n ± 1% 948.0n ± 2% ~ (p=0.165 n=10) +Inv_SISO_N10-8 1.579µ ± 2% 1.592µ ± 2% ~ (p=0.342 n=10) +Inv_MIMO_N10-8 2.409µ ± 2% 2.402µ ± 12% ~ (p=1.000 n=10) +Covar_SISO_N2-8 1.798µ ± 2% 1.831µ ± 3% +1.84% (p=0.022 n=10) +Covar_SISO_N10-8 8.946µ ± 1% 9.084µ ± 2% +1.54% (p=0.015 n=10) +Covar_SISO_N50-8 266.1µ ± 1% 264.9µ ± 2% ~ (p=0.853 n=10) +Covar_SISO_N100-8 1.732m ± 1% 1.758m ± 2% ~ (p=0.063 n=10) +Covar_MIMO_N10-8 8.966µ ± 1% 9.068µ ± 2% ~ (p=0.086 n=10) +Pidtune_PI-8 43.07µ ± 1% 42.87µ ± 2% ~ (p=0.436 n=10) +Pidtune_PID-8 42.99µ ± 1% 42.84µ ± 1% ~ (p=0.631 n=10) +Pidtune_PIDF-8 43.08µ ± 1% 42.77µ ± 1% ~ (p=0.123 n=10) +Margin_SISO-8 78.72µ ± 1% 78.26µ ± 1% ~ (p=0.271 n=10) +Bandwidth_SISO-8 54.05µ ± 1% 53.90µ ± 2% ~ (p=0.315 n=10) +DiskMargin_SISO-8 18.18µ ± 3% 18.65µ ± 2% +2.55% (p=0.005 n=10) +geomean 37.20µ 36.92µ -0.75% + + │ baseline.txt │ candidate.txt │ + │ B/op │ B/op vs base │ +SimulateWithDelay_SISO-8 1.492Ki ± 0% 1.492Ki ± 0% ~ (p=1.000 n=10) +SimulateWithDelay_MIMO-8 11.48Ki ± 0% 11.48Ki ± 0% ~ (p=0.474 n=10) +BilinearDiscretize-8 14.59Ki ± 0% 14.59Ki ± 0% ~ (p=0.897 n=10) +TransferFunction_MIMO-8 72.66Ki ± 0% 72.66Ki ± 0% ~ (p=0.128 n=10) +Reduce-8 52.45Ki ± 0% 52.45Ki ± 0% ~ (p=0.541 n=10) +AbsorbDelay-8 4.227Ki ± 0% 4.227Ki ± 0% ~ (p=1.000 n=10) ¹ +DiscretizeZOH-8 21.66Ki ± 0% 21.67Ki ± 0% ~ (p=0.054 n=10) +DenseNorm-8 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ +Series-8 5.000Ki ± 0% 5.000Ki ± 0% ~ (p=1.000 n=10) ¹ +Parallel-8 4.172Ki ± 0% 4.172Ki ± 0% ~ (p=1.000 n=10) ¹ +Feedback-8 8.504Ki ± 0% 8.503Ki ± 0% ~ (p=1.000 n=10) +FeedbackLFT-8 46.95Ki ± 0% 46.94Ki ± 0% ~ (p=0.302 n=10) +Append-8 5.109Ki ± 0% 5.109Ki ± 0% ~ (p=1.000 n=10) ¹ +FreqResponse-8 65.34Ki ± 0% 65.34Ki ± 0% ~ (p=0.723 n=10) +FreqResponse_ShortSweep-8 3.031Ki ± 0% 3.031Ki ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N4_W2/StateSpace-8 576.0 ± 0% 576.0 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N4_W2/TransferFunction-8 44.35Ki ± 0% 44.35Ki ± 0% ~ (p=0.228 n=10) +FrequencySweepKernels/N4_W8/StateSpace-8 960.0 ± 0% 960.0 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N4_W8/TransferFunction-8 44.72Ki ± 0% 44.73Ki ± 0% ~ (p=0.156 n=10) +FrequencySweepKernels/N4_W32/StateSpace-8 2.438Ki ± 0% 2.438Ki ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N4_W32/TransferFunction-8 46.23Ki ± 0% 46.23Ki ± 0% ~ (p=0.811 n=10) +FrequencySweepKernels/N4_W100/StateSpace-8 6.812Ki ± 0% 6.812Ki ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N4_W100/TransferFunction-8 50.61Ki ± 0% 50.61Ki ± 0% ~ (p=0.642 n=10) +FrequencySweepKernels/N10_W2/StateSpace-8 2.344Ki ± 0% 2.344Ki ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N10_W2/TransferFunction-8 55.85Ki ± 0% 55.85Ki ± 0% ~ (p=0.926 n=10) +FrequencySweepKernels/N10_W8/StateSpace-8 2.906Ki ± 0% 2.906Ki ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N10_W8/TransferFunction-8 56.42Ki ± 0% 56.42Ki ± 0% ~ (p=0.591 n=10) +FrequencySweepKernels/N10_W32/StateSpace-8 5.156Ki ± 0% 5.156Ki ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N10_W32/TransferFunction-8 58.68Ki ± 0% 58.68Ki ± 0% -0.01% (p=0.041 n=10) +FrequencySweepKernels/N10_W100/StateSpace-8 11.66Ki ± 0% 11.66Ki ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N10_W100/TransferFunction-8 65.21Ki ± 0% 65.21Ki ± 0% ~ (p=0.382 n=10) +Bode-8 98.86Ki ± 0% 98.85Ki ± 0% ~ (p=0.210 n=10) +Zeros_SISO-8 45.75Ki ± 0% 45.75Ki ± 0% ~ (p=0.926 n=10) +Zeros_MIMO-8 45.74Ki ± 0% 45.74Ki ± 0% ~ (p=0.809 n=10) +Zeros_NonSquare-8 6.734Ki ± 0% 6.734Ki ± 0% ~ (p=1.000 n=10) ¹ +ControllabilityStaircase-8 22.15Ki ± 0% 22.15Ki ± 0% ~ (p=0.838 n=10) +SimulateNoDelay-8 34.37Ki ± 0% 32.60Ki ± 0% -5.14% (p=0.000 n=10) +ThiranDelay-8 808.0 ± 0% 808.0 ± 0% ~ (p=1.000 n=10) ¹ +PadeDelay-8 1.023Ki ± 0% 1.023Ki ± 0% ~ (p=1.000 n=10) ¹ +DecomposeIODelay-8 368.0 ± 0% 368.0 ± 0% ~ (p=1.000 n=10) ¹ +PullDelaysToLFT-8 3.867Ki ± 0% 3.867Ki ± 0% ~ (p=1.000 n=10) ¹ +GetDelayModel-8 4.312Ki ± 0% 4.312Ki ± 0% ~ (p=1.000 n=10) ¹ +SetDelayModel-8 1.484Ki ± 0% 1.484Ki ± 0% ~ (p=1.000 n=10) ¹ +AbsorbInternalDelay-8 4.859Ki ± 0% 4.859Ki ± 0% ~ (p=1.000 n=10) ¹ +DiscretizeWithOpts_Thiran-8 3.591Ki ± 0% 3.591Ki ± 0% ~ (p=0.474 n=10) +DiscretizeWithOpts_IODelayThiran-8 3.771Ki ± 0% 3.771Ki ± 0% ~ (p=0.650 n=10) +FeedbackApproximatedDelays-8 11.39Ki ± 0% 11.39Ki ± 0% -0.01% (p=0.007 n=10) +SimulateInternalDelay-8 2.000Ki ± 0% 2.000Ki ± 0% ~ (p=1.000 n=10) ¹ +FreqResponseWithDelay-8 52.06Ki ± 0% 52.06Ki ± 0% -0.01% (p=0.003 n=10) +PadeSystem-8 21.12Ki ± 0% 21.12Ki ± 0% ~ (p=0.548 n=10) +ZeroDelayApprox-8 1.556Ki ± 0% 1.556Ki ± 0% ~ (p=1.000 n=10) ¹ +IsStrictlyUpperTriangular-8 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ +FreqResponseLFT-8 9.281Ki ± 0% 9.281Ki ± 0% ~ (p=1.000 n=10) ¹ +Simulate_DCMotor-8 19.67Ki ± 0% 16.28Ki ± 0% -17.23% (p=0.000 n=10) +FreqResponse_B747Lateral-8 57.42Ki ± 0% 57.40Ki ± 0% -0.02% (p=0.000 n=10) +Simulate_MassSpringDamper-8 10.126Ki ± 0% 8.375Ki ± 0% -17.30% (p=0.000 n=10) +DiscretizeAndSimulate_B747Longitudinal-8 7.517Ki ± 0% 6.578Ki ± 0% -12.49% (p=0.000 n=10) +Simulate_Large-8 84.52Ki ± 0% 81.14Ki ± 0% -3.99% (p=0.000 n=10) +FeedbackAndSimulate-8 7.547Ki ± 0% 6.609Ki ± 0% -12.42% (p=0.000 n=10) +Bode_LargeMIMO-8 233.9Ki ± 0% 233.8Ki ± 0% -0.05% (p=0.003 n=10) +Lyap_N10-8 7.031Ki ± 0% 7.031Ki ± 0% ~ (p=1.000 n=10) ¹ +Lyap_N50-8 122.1Ki ± 0% 122.1Ki ± 0% ~ (p=1.000 n=10) ¹ +Lyap_N100-8 373.1Ki ± 0% 373.6Ki ± 0% +0.14% (p=0.000 n=10) +DLyap_N10-8 7.367Ki ± 0% 7.367Ki ± 0% ~ (p=1.000 n=10) ¹ +DLyap_N50-8 124.5Ki ± 0% 124.5Ki ± 0% ~ (p=1.000 n=10) +DLyap_N100-8 439.2Ki ± 0% 439.5Ki ± 0% +0.07% (p=0.000 n=10) +Care_N10_M2-8 1.788Ki ± 0% 1.788Ki ± 0% ~ (p=0.845 n=10) +Care_N50_M5-8 45.73Ki ± 0% 45.73Ki ± 0% ~ (p=1.000 n=10) ¹ +Care_N100_M5-8 173.0Ki ± 1% 171.5Ki ± 2% ~ (p=0.137 n=10) +Dare_N10_M2-8 1.702Ki ± 0% 1.702Ki ± 0% ~ (p=0.750 n=10) +Dare_N50_M5-8 46.71Ki ± 0% 46.71Ki ± 0% ~ (p=1.000 n=10) ¹ +Dare_N100_M5-8 300.9Ki ± 1% 296.3Ki ± 1% -1.53% (p=0.000 n=10) +Gram-8 11.76Ki ± 0% 11.76Ki ± 0% ~ (p=0.336 n=10) +Ctrb-8 1.812Ki ± 0% 1.812Ki ± 0% ~ (p=1.000 n=10) ¹ +H2Norm-8 11.79Ki ± 0% 11.79Ki ± 0% ~ (p=0.921 n=10) +HSV-8 28.67Ki ± 0% 28.66Ki ± 0% ~ (p=0.538 n=10) +HinfNorm-8 145.5Ki ± 0% 145.5Ki ± 0% ~ (p=0.986 n=10) +H2Syn_Simple-8 13.59Ki ± 0% 13.59Ki ± 0% ~ (p=0.881 n=10) +HinfSyn_Simple-8 160.9Ki ± 0% 160.9Ki ± 0% ~ (p=0.089 n=10) +Balreal-8 33.98Ki ± 0% 33.98Ki ± 0% ~ (p=0.782 n=10) +Balred-8 34.89Ki ± 0% 34.88Ki ± 0% ~ (p=0.696 n=10) +Place_N10_M2-8 6.305Ki ± 0% 6.305Ki ± 0% ~ (p=1.000 n=10) ¹ +Place_N50_M5-8 90.75Ki ± 0% 90.75Ki ± 0% ~ (p=0.257 n=10) +Place_N100_M5-8 226.4Ki ± 0% 226.4Ki ± 0% ~ (p=0.492 n=10) +Acker_N5-8 1.540Ki ± 0% 1.540Ki ± 0% ~ (p=1.000 n=10) ¹ +Acker_N10-8 4.959Ki ± 0% 4.959Ki ± 0% ~ (p=1.000 n=10) +Lqr_N10_M2-8 1.786Ki ± 0% 1.786Ki ± 0% ~ (p=0.458 n=10) +Lqr_N50_M5-8 45.73Ki ± 0% 45.73Ki ± 0% ~ (p=1.000 n=10) ¹ +Lqr_N100_M5-8 172.3Ki ± 0% 167.8Ki ± 1% -2.63% (p=0.000 n=10) +Kalman_N10_M2_P3-8 7.628Ki ± 0% 7.628Ki ± 0% ~ (p=0.628 n=10) +Kalman_N50_M5_P5-8 170.5Ki ± 0% 170.5Ki ± 0% ~ (p=1.000 n=10) +Kalman_N100_M5_P5-8 478.7Ki ± 0% 472.8Ki ± 1% -1.22% (p=0.000 n=10) +Estim_N10_M2_P3-8 7.078Ki ± 0% 7.078Ki ± 0% ~ (p=1.000 n=10) ¹ +Estim_N50_M5_P5-8 110.3Ki ± 0% 110.3Ki ± 0% ~ (p=0.303 n=10) +Estim_N100_M5_P5-8 380.3Ki ± 0% 379.3Ki ± 0% -0.25% (p=0.000 n=10) +Reg_N10_M2_P3-8 6.438Ki ± 0% 6.438Ki ± 0% ~ (p=1.000 n=10) ¹ +Reg_N50_M5_P5-8 111.4Ki ± 0% 111.4Ki ± 0% ~ (p=1.000 n=10) +Reg_N100_M5_P5-8 424.2Ki ± 0% 421.4Ki ± 0% -0.66% (p=0.000 n=10) +PolyRoots_N10-8 3.050Ki ± 0% 3.050Ki ± 0% ~ (p=0.548 n=10) +ZPKEval_SISO-8 40.00 ± 0% 40.00 ± 0% ~ (p=1.000 n=10) ¹ +ZPKFreqResponse_SISO_100-8 1.875Ki ± 0% 1.875Ki ± 0% ~ (p=1.000 n=10) ¹ +ZPKToTF_SISO_N10-8 1.852Ki ± 0% 1.852Ki ± 0% ~ (p=1.000 n=10) ¹ +TFToZPK_SISO_N10-8 6.100Ki ± 0% 6.100Ki ± 0% ~ (p=0.812 n=10) +SSToZPK_SISO-8 47.00Ki ± 0% 47.00Ki ± 0% -0.01% (p=0.014 n=10) +ZPKToSS_SISO-8 1.445Ki ± 0% 1.445Ki ± 0% ~ (p=1.000 n=10) ¹ +PolyFromComplexRoots_N20-8 528.0 ± 0% 528.0 ± 0% ~ (p=1.000 n=10) ¹ +Sigma_SISO-8 48.54Ki ± 0% 48.53Ki ± 0% ~ (p=0.082 n=10) +Sigma_MIMO-8 62.29Ki ± 0% 62.28Ki ± 0% -0.01% (p=0.037 n=10) +Nichols-8 50.46Ki ± 0% 50.45Ki ± 0% ~ (p=0.084 n=10) +Nyquist-8 95.44Ki ± 0% 95.43Ki ± 0% ~ (p=0.065 n=10) +FreqRespEst_SISO-8 25.94Ki ± 0% 25.94Ki ± 0% ~ (p=1.000 n=10) ¹ +FreqRespEst_MIMO-8 65.00Ki ± 0% 65.00Ki ± 0% ~ (p=1.000 n=10) +BlkDiag-8 9.812Ki ± 0% 9.812Ki ± 0% ~ (p=1.000 n=10) ¹ +Connect-8 13.87Ki ± 0% 13.87Ki ± 0% -0.01% (p=0.001 n=10) +LFT-8 10.69Ki ± 0% 10.69Ki ± 0% ~ (p=1.000 n=10) +LFT_Large-8 35.32Ki ± 0% 35.32Ki ± 0% -0.01% (p=0.001 n=10) +D2C_ZOH_N2-8 2.171Ki ± 0% 2.171Ki ± 0% ~ (p=0.628 n=10) +D2C_ZOH_N5-8 6.626Ki ± 0% 6.624Ki ± 0% ~ (p=0.118 n=10) +D2C_ZOH_N20-8 77.50Ki ± 0% 77.55Ki ± 0% ~ (p=0.382 n=10) +D2C_ZOH_N50-8 464.4Ki ± 0% 463.5Ki ± 0% ~ (p=0.143 n=10) +D2C_Tustin_N20-8 14.85Ki ± 0% 14.85Ki ± 0% ~ (p=0.236 n=10) +MatLog_N20-8 64.55Ki ± 0% 64.70Ki ± 1% ~ (p=0.631 n=10) +MatLog_N50-8 391.8Ki ± 0% 391.4Ki ± 0% ~ (p=0.393 n=10) +DCGain_StableMIMO_N10_M4_P6-8 1.823Ki ± 0% 1.823Ki ± 0% ~ (p=1.000 n=10) +DCGain_IntegratorMIMO_N10_M4_P6-8 5.267Ki ± 0% 5.266Ki ± 0% ~ (p=0.070 n=10) +DCGain_IntegratorMIMO_N40_M8_P8-8 51.72Ki ± 0% 51.71Ki ± 0% ~ (p=0.323 n=10) +SystemFRD_SISO_200-8 59.60Ki ± 0% 59.60Ki ± 0% ~ (p=0.320 n=10) +SystemFRD_SISO_2000-8 218.2Ki ± 0% 218.2Ki ± 0% ~ (p=0.101 n=10) +SystemFRD_SISO_10000-8 922.6Ki ± 0% 922.7Ki ± 0% +0.01% (p=0.000 n=10) +SystemFRD_MIMO_200-8 164.5Ki ± 0% 164.4Ki ± 0% -0.02% (p=0.007 n=10) +SystemFRD_MIMO_2000-8 1.045Mi ± 0% 1.045Mi ± 0% ~ (p=0.247 n=10) +SystemFRD_MIMO_10000-8 4.970Mi ± 0% 4.970Mi ± 0% ~ (p=0.912 n=10) +SystemFRD_Large_2000-8 2.134Mi ± 0% 2.132Mi ± 0% ~ (p=0.404 n=10) +FRDSigma_SISO_200-8 3.609Ki ± 0% 3.609Ki ± 0% ~ (p=1.000 n=10) ¹ +FRDSigma_SISO_2000-8 32.11Ki ± 0% 32.11Ki ± 0% ~ (p=1.000 n=10) ¹ +FRDSigma_MIMO_200-8 8.805Ki ± 0% 8.805Ki ± 0% ~ (p=1.000 n=10) ¹ +FRDSigma_MIMO_2000-8 66.30Ki ± 0% 66.30Ki ± 0% ~ (p=1.000 n=10) +FRDSigma_MIMO_10000-8 322.3Ki ± 0% 322.3Ki ± 0% ~ (p=1.000 n=10) +FRDSigma_Large_2000-8 83.04Ki ± 0% 83.04Ki ± 0% ~ (p=1.000 n=10) +FRDMargin_200-8 5.422Ki ± 0% 5.422Ki ± 0% ~ (p=1.000 n=10) ¹ +FRDMargin_2000-8 48.17Ki ± 0% 48.17Ki ± 0% ~ (p=1.000 n=10) ¹ +FRDMargin_10000-8 240.2Ki ± 0% 240.2Ki ± 0% ~ (p=1.000 n=10) ¹ +FRDMargin_NegGM_2000-8 48.17Ki ± 0% 48.17Ki ± 0% ~ (p=1.000 n=10) ¹ +FRDSigma_MIMO5x5_2000-8 100.2Ki ± 0% 100.2Ki ± 0% ~ (p=1.000 n=10) +FRDSeries_SISO_200-8 14.48Ki ± 0% 14.48Ki ± 0% ~ (p=1.000 n=10) ¹ +FRDSeries_SISO_2000-8 144.1Ki ± 0% 144.1Ki ± 0% ~ (p=1.000 n=10) +FRDSeries_MIMO_200-8 54.61Ki ± 0% 54.61Ki ± 0% ~ (p=1.000 n=10) ¹ +FRDSeries_MIMO_2000-8 496.1Ki ± 0% 496.1Ki ± 0% ~ (p=0.249 n=10) +FRDSeries_MIMO_10000-8 2.375Mi ± 0% 2.375Mi ± 0% ~ (p=0.139 n=10) +FRDParallel_SISO_2000-8 144.1Ki ± 0% 144.1Ki ± 0% ~ (p=1.000 n=10) +FRDParallel_MIMO_2000-8 496.1Ki ± 0% 496.1Ki ± 0% ~ (p=0.087 n=10) +FRDFeedback_SISO_200-8 14.48Ki ± 0% 14.48Ki ± 0% ~ (p=1.000 n=10) ¹ +FRDFeedback_SISO_2000-8 144.1Ki ± 0% 144.1Ki ± 0% ~ (p=0.474 n=10) +FRDFeedback_MIMO_200-8 55.31Ki ± 0% 55.31Ki ± 0% ~ (p=1.000 n=10) ¹ +FRDFeedback_MIMO_2000-8 496.8Ki ± 0% 496.8Ki ± 0% ~ (p=1.000 n=10) ¹ +FRDFeedback_MIMO_10000-8 2.376Mi ± 0% 2.376Mi ± 0% ~ (p=1.000 n=10) +FRDFeedback_MIMO8x8_2000-8 2.388Mi ± 0% 2.388Mi ± 0% ~ (p=0.737 n=10) +FRDAbs_MIMO_2000-8 632.1Ki ± 0% 632.1Ki ± 0% ~ (p=0.063 n=10) +FRDSelectFrequencies_MIMO_2000-8 320.1Ki ± 0% 320.1Ki ± 0% ~ (p=0.846 n=10) +FRDPeakGain_MIMO_2000-8 2.219Ki ± 0% 2.219Ki ± 0% ~ (p=1.000 n=10) ¹ +ModelArrayFreqResponse_MIMO_16x200-8 1.338Mi ± 0% 1.337Mi ± 0% -0.02% (p=0.023 n=10) +ModelArrayFreqResponseManualLoop_MIMO_16x200-8 1.335Mi ± 0% 1.335Mi ± 0% ~ (p=0.079 n=10) +Step_SISO_N2-8 8.861Ki ± 0% 8.860Ki ± 0% -0.01% (p=0.019 n=10) +Step_SISO_N10-8 43.71Ki ± 0% 40.91Ki ± 0% -6.39% (p=0.000 n=10) +Step_SISO_N50-8 292.0Ki ± 4% 279.0Ki ± 2% -4.43% (p=0.000 n=10) +Step_MIMO_N10-8 96.29Ki ± 0% 96.29Ki ± 0% ~ (p=0.542 n=10) +StepInfo_SISO_N10-8 112.0 ± 0% 112.0 ± 0% ~ (p=1.000 n=10) ¹ +StepInfo_MIMO_N10-8 816.0 ± 0% 816.0 ± 0% ~ (p=1.000 n=10) ¹ +ModelArrayStep_MIMO_16-8 1.317Mi ± 0% 1.317Mi ± 0% ~ (p=0.481 n=10) +ModelArrayStepManualLoop_MIMO_16-8 1.316Mi ± 0% 1.316Mi ± 0% -0.03% (p=0.035 n=10) +Impulse_SISO_N2-8 8.861Ki ± 0% 8.860Ki ± 0% ~ (p=0.052 n=10) +Impulse_SISO_N10-8 43.72Ki ± 0% 40.92Ki ± 0% -6.41% (p=0.000 n=10) +Impulse_SISO_N50-8 294.0Ki ± 3% 281.5Ki ± 1% -4.26% (p=0.000 n=10) +Impulse_MIMO_N10-8 96.29Ki ± 0% 96.27Ki ± 0% ~ (p=0.105 n=10) +Lsim_SISO_N2-8 15.35Ki ± 0% 13.59Ki ± 0% -11.46% (p=0.000 n=10) +Lsim_SISO_N10-8 19.40Ki ± 0% 17.64Ki ± 0% -9.06% (p=0.000 n=10) +Lsim_SISO_N50-8 102.1Ki ± 0% 100.7Ki ± 0% -1.41% (p=0.000 n=10) +Lsim_MIMO_N10-8 53.16Ki ± 0% 51.39Ki ± 0% -3.32% (p=0.000 n=10) +Lsim_SISO_1e4-8 274.9Ki ± 0% 242.6Ki ± 0% -11.76% (p=0.000 n=10) +Lsim_MIMO_1e4-8 1004.9Ki ± 0% 970.9Ki ± 0% -3.38% (p=0.000 n=10) +Lsim_Discrete_SISO-8 27.81Ki ± 0% 24.44Ki ± 0% -12.13% (p=0.000 n=10) +Loopsens_SISO_N2-8 10.49Ki ± 0% 10.49Ki ± 0% -0.01% (p=0.001 n=10) +Loopsens_SISO_N10-8 32.78Ki ± 0% 32.78Ki ± 0% -0.01% (p=0.000 n=10) +Loopsens_MIMO_N10-8 42.75Ki ± 0% 42.74Ki ± 0% -0.02% (p=0.000 n=10) +Canon_Modal_N2-8 1.511Ki ± 0% 1.511Ki ± 0% ~ (p=1.000 n=10) +Canon_Modal_N10-8 11.17Ki ± 0% 11.17Ki ± 0% ~ (p=0.092 n=10) +Canon_Modal_N50-8 211.4Ki ± 0% 211.5Ki ± 1% ~ (p=0.853 n=10) +Canon_Modal_N100-8 1.099Mi ± 1% 1.094Mi ± 1% ~ (p=0.644 n=10) +Canon_Comp_N2-8 1.925Ki ± 0% 1.925Ki ± 0% ~ (p=1.000 n=10) ¹ +Canon_Comp_N10-8 13.21Ki ± 0% 13.21Ki ± 0% ~ (p=0.237 n=10) +DescriptorToExplicit_N10-8 4.936Ki ± 0% 4.936Ki ± 0% ~ (p=0.474 n=10) +DescriptorFreqResponse_MIMO_N10x200-8 34.48Ki ± 0% 34.48Ki ± 0% ~ (p=1.000 n=10) ¹ +DescriptorFreqResponse_MIMO_N50x200-8 124.5Ki ± 0% 124.5Ki ± 0% ~ (p=1.000 n=10) ¹ +FixedInputReduction_N10-8 1.781Ki ± 0% 1.781Ki ± 0% ~ (p=1.000 n=10) ¹ +TunableGainCurrentSystem_4x4-8 784.0 ± 0% 784.0 ± 0% ~ (p=1.000 n=10) ¹ +TunableGainSampleCurrentSystem_4x4-8 1.781Ki ± 0% 1.781Ki ± 0% ~ (p=1.000 n=10) ¹ +GeneralizedCurrentSystem_SISO-8 544.0 ± 0% 544.0 ± 0% ~ (p=1.000 n=10) ¹ +GeneralizedClosedLoop_SISO-8 3.529Ki ± 0% 3.529Ki ± 0% ~ (p=1.000 n=10) ¹ +TuningGoalWeightedGain_SISO-8 46.33Ki ± 0% 46.32Ki ± 0% -0.02% (p=0.000 n=10) +TuningGoalWeightedGain_MIMO-8 67.62Ki ± 0% 67.61Ki ± 0% ~ (p=0.342 n=10) +TuningGoalDynamicWeightedGain_MIMO-8 178.0Ki ± 0% 177.9Ki ± 0% -0.04% (p=0.009 n=10) +Systune_SISO-8 241.3Ki ± 0% 241.3Ki ± 0% -0.02% (p=0.000 n=10) +Systune_MIMO-8 478.1Ki ± 0% 478.0Ki ± 0% -0.02% (p=0.000 n=10) +PhysicalAssembly_8Components-8 57.23Ki ± 0% 57.23Ki ± 0% -0.00% (p=0.000 n=10) +ModalTruncate_N50_Order10-8 146.8Ki ± 0% 146.8Ki ± 0% ~ (p=1.000 n=10) +Passivity_SISO-8 22.92Ki ± 0% 22.92Ki ± 0% -0.01% (p=0.000 n=10) +FRDPassivity_MIMO-8 1.828Ki ± 0% 1.828Ki ± 0% ~ (p=1.000 n=10) ¹ +Stabsep_N2-8 3.017Ki ± 0% 3.017Ki ± 0% 0.00% (p=0.019 n=10) +Stabsep_N10-8 29.35Ki ± 0% 29.35Ki ± 0% ~ (p=0.810 n=10) +Stabsep_N50-8 635.9Ki ± 0% 632.1Ki ± 1% -0.60% (p=0.002 n=10) +Stabsep_N100-8 2.527Mi ± 0% 2.525Mi ± 1% ~ (p=0.971 n=10) +Modsep_N10-8 29.32Ki ± 0% 29.32Ki ± 0% ~ (p=0.644 n=10) +Modsep_N50-8 643.3Ki ± 1% 641.0Ki ± 0% ~ (p=0.143 n=10) +Ssbal_N2-8 704.0 ± 0% 704.0 ± 0% ~ (p=1.000 n=10) ¹ +Ssbal_N10-8 2.703Ki ± 0% 2.703Ki ± 0% ~ (p=1.000 n=10) ¹ +Ssbal_N50-8 42.72Ki ± 0% 42.72Ki ± 0% ~ (p=1.000 n=10) ¹ +Prescale_N2-8 896.0 ± 0% 896.0 ± 0% ~ (p=1.000 n=10) ¹ +Prescale_N10-8 2.234Ki ± 0% 2.234Ki ± 0% ~ (p=1.000 n=10) ¹ +Prescale_N50-8 24.12Ki ± 0% 24.12Ki ± 0% ~ (p=0.112 n=10) +Sminreal_N2-8 592.0 ± 0% 592.0 ± 0% ~ (p=1.000 n=10) ¹ +Sminreal_N10-8 1.859Ki ± 0% 1.859Ki ± 0% ~ (p=1.000 n=10) ¹ +Sminreal_N50-8 23.30Ki ± 0% 23.30Ki ± 0% ~ (p=1.000 n=10) ¹ +Inv_SISO_N2-8 1.157Ki ± 0% 1.157Ki ± 0% ~ (p=1.000 n=10) ¹ +Inv_SISO_N10-8 4.004Ki ± 0% 4.004Ki ± 0% ~ (p=1.000 n=10) ¹ +Inv_MIMO_N10-8 4.975Ki ± 0% 4.974Ki ± 0% -0.02% (p=0.000 n=10) +Covar_SISO_N2-8 1.485Ki ± 0% 1.485Ki ± 0% ~ (p=1.000 n=10) ¹ +Covar_SISO_N10-8 1.791Ki ± 0% 1.791Ki ± 0% ~ (p=1.000 n=10) +Covar_SISO_N50-8 23.81Ki ± 1% 23.81Ki ± 1% ~ (p=0.990 n=10) +Covar_SISO_N100-8 116.6Ki ± 0% 117.0Ki ± 1% ~ (p=0.491 n=10) +Covar_MIMO_N10-8 1.791Ki ± 0% 1.791Ki ± 0% ~ (p=0.350 n=10) +Pidtune_PI-8 52.64Ki ± 0% 52.63Ki ± 0% ~ (p=0.070 n=10) +Pidtune_PID-8 52.64Ki ± 0% 52.64Ki ± 0% -0.01% (p=0.049 n=10) +Pidtune_PIDF-8 52.64Ki ± 0% 52.63Ki ± 0% ~ (p=0.063 n=10) +Margin_SISO-8 75.31Ki ± 0% 75.30Ki ± 0% -0.01% (p=0.017 n=10) +Bandwidth_SISO-8 18.04Ki ± 0% 18.04Ki ± 0% ~ (p=0.123 n=10) +DiskMargin_SISO-8 5.989Ki ± 0% 5.989Ki ± 0% -0.01% (p=0.039 n=10) +geomean ² -0.68% ² +¹ all samples are equal +² summaries must be >0 to compute geomean + + │ baseline.txt │ candidate.txt │ + │ allocs/op │ allocs/op vs base │ +SimulateWithDelay_SISO-8 19.00 ± 0% 19.00 ± 0% ~ (p=1.000 n=10) ¹ +SimulateWithDelay_MIMO-8 20.00 ± 0% 20.00 ± 0% ~ (p=1.000 n=10) ¹ +BilinearDiscretize-8 32.00 ± 0% 32.00 ± 0% ~ (p=1.000 n=10) ¹ +TransferFunction_MIMO-8 162.0 ± 0% 162.0 ± 0% ~ (p=1.000 n=10) ¹ +Reduce-8 170.0 ± 0% 170.0 ± 0% ~ (p=1.000 n=10) ¹ +AbsorbDelay-8 32.00 ± 0% 32.00 ± 0% ~ (p=1.000 n=10) ¹ +DiscretizeZOH-8 28.00 ± 0% 28.00 ± 0% ~ (p=1.000 n=10) ¹ +DenseNorm-8 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ +Series-8 15.00 ± 0% 15.00 ± 0% ~ (p=1.000 n=10) ¹ +Parallel-8 9.000 ± 0% 9.000 ± 0% ~ (p=1.000 n=10) ¹ +Feedback-8 63.00 ± 0% 63.00 ± 0% ~ (p=1.000 n=10) ¹ +FeedbackLFT-8 273.0 ± 0% 273.0 ± 0% ~ (p=1.000 n=10) ¹ +Append-8 9.000 ± 0% 9.000 ± 0% ~ (p=1.000 n=10) ¹ +FreqResponse-8 126.0 ± 0% 126.0 ± 0% ~ (p=1.000 n=10) ¹ +FreqResponse_ShortSweep-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N4_W2/StateSpace-8 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N4_W2/TransferFunction-8 77.00 ± 0% 77.00 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N4_W8/StateSpace-8 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N4_W8/TransferFunction-8 77.00 ± 0% 77.00 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N4_W32/StateSpace-8 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N4_W32/TransferFunction-8 77.00 ± 0% 77.00 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N4_W100/StateSpace-8 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N4_W100/TransferFunction-8 77.00 ± 0% 77.00 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N10_W2/StateSpace-8 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N10_W2/TransferFunction-8 125.0 ± 0% 125.0 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N10_W8/StateSpace-8 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N10_W8/TransferFunction-8 125.0 ± 0% 125.0 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N10_W32/StateSpace-8 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N10_W32/TransferFunction-8 125.0 ± 0% 125.0 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N10_W100/StateSpace-8 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N10_W100/TransferFunction-8 125.0 ± 0% 125.0 ± 0% ~ (p=1.000 n=10) ¹ +Bode-8 158.0 ± 0% 158.0 ± 0% ~ (p=1.000 n=10) ¹ +Zeros_SISO-8 102.0 ± 0% 102.0 ± 0% ~ (p=1.000 n=10) ¹ +Zeros_MIMO-8 53.00 ± 0% 53.00 ± 0% ~ (p=1.000 n=10) ¹ +Zeros_NonSquare-8 63.00 ± 0% 63.00 ± 0% ~ (p=1.000 n=10) ¹ +ControllabilityStaircase-8 109.0 ± 0% 109.0 ± 0% ~ (p=1.000 n=10) ¹ +SimulateNoDelay-8 29.00 ± 0% 11.00 ± 0% -62.07% (p=0.000 n=10) +ThiranDelay-8 16.00 ± 0% 16.00 ± 0% ~ (p=1.000 n=10) ¹ +PadeDelay-8 16.00 ± 0% 16.00 ± 0% ~ (p=1.000 n=10) ¹ +DecomposeIODelay-8 7.000 ± 0% 7.000 ± 0% ~ (p=1.000 n=10) ¹ +PullDelaysToLFT-8 44.00 ± 0% 44.00 ± 0% ~ (p=1.000 n=10) ¹ +GetDelayModel-8 44.00 ± 0% 44.00 ± 0% ~ (p=1.000 n=10) ¹ +SetDelayModel-8 21.00 ± 0% 21.00 ± 0% ~ (p=1.000 n=10) ¹ +AbsorbInternalDelay-8 40.00 ± 0% 40.00 ± 0% ~ (p=1.000 n=10) ¹ +DiscretizeWithOpts_Thiran-8 72.00 ± 0% 72.00 ± 0% ~ (p=1.000 n=10) ¹ +DiscretizeWithOpts_IODelayThiran-8 81.00 ± 0% 81.00 ± 0% ~ (p=1.000 n=10) ¹ +FeedbackApproximatedDelays-8 82.00 ± 0% 82.00 ± 0% ~ (p=1.000 n=10) ¹ +SimulateInternalDelay-8 11.00 ± 0% 11.00 ± 0% ~ (p=1.000 n=10) ¹ +FreqResponseWithDelay-8 87.00 ± 0% 87.00 ± 0% ~ (p=1.000 n=10) ¹ +PadeSystem-8 173.0 ± 0% 173.0 ± 0% ~ (p=1.000 n=10) ¹ +ZeroDelayApprox-8 26.00 ± 0% 26.00 ± 0% ~ (p=1.000 n=10) ¹ +IsStrictlyUpperTriangular-8 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ +FreqResponseLFT-8 17.00 ± 0% 17.00 ± 0% ~ (p=1.000 n=10) ¹ +Simulate_DCMotor-8 45.00 ± 0% 11.00 ± 0% -75.56% (p=0.000 n=10) +FreqResponse_B747Lateral-8 72.00 ± 0% 72.00 ± 0% ~ (p=1.000 n=10) ¹ +Simulate_MassSpringDamper-8 29.00 ± 0% 11.00 ± 0% -62.07% (p=0.000 n=10) +DiscretizeAndSimulate_B747Longitudinal-8 21.00 ± 0% 11.00 ± 0% -47.62% (p=0.000 n=10) +Simulate_Large-8 45.00 ± 0% 11.00 ± 0% -75.56% (p=0.000 n=10) +FeedbackAndSimulate-8 21.00 ± 0% 11.00 ± 0% -47.62% (p=0.000 n=10) +Bode_LargeMIMO-8 258.0 ± 0% 257.0 ± 0% ~ (p=0.170 n=10) +Lyap_N10-8 22.00 ± 0% 22.00 ± 0% ~ (p=1.000 n=10) ¹ +Lyap_N50-8 63.00 ± 0% 63.00 ± 0% ~ (p=1.000 n=10) ¹ +Lyap_N100-8 363.0 ± 0% 364.0 ± 0% +0.28% (p=0.000 n=10) +DLyap_N10-8 26.00 ± 0% 26.00 ± 0% ~ (p=1.000 n=10) ¹ +DLyap_N50-8 95.00 ± 0% 95.00 ± 0% ~ (p=1.000 n=10) ¹ +DLyap_N100-8 1.619k ± 0% 1.619k ± 0% ~ (p=1.000 n=10) +Care_N10_M2-8 37.00 ± 0% 37.00 ± 0% ~ (p=1.000 n=10) ¹ +Care_N50_M5-8 758.0 ± 0% 758.0 ± 0% ~ (p=1.000 n=10) ¹ +Care_N100_M5-8 2.067k ± 0% 2.024k ± 0% -2.08% (p=0.000 n=10) +Dare_N10_M2-8 34.00 ± 0% 34.00 ± 0% ~ (p=1.000 n=10) ¹ +Dare_N50_M5-8 781.0 ± 0% 781.0 ± 0% ~ (p=1.000 n=10) ¹ +Dare_N100_M5-8 4.053k ± 0% 4.004k ± 0% -1.22% (p=0.000 n=10) +Gram-8 59.00 ± 0% 59.00 ± 0% ~ (p=1.000 n=10) ¹ +Ctrb-8 2.000 ± 0% 2.000 ± 0% ~ (p=1.000 n=10) ¹ +H2Norm-8 56.00 ± 0% 56.00 ± 0% ~ (p=1.000 n=10) ¹ +HSV-8 93.00 ± 0% 93.00 ± 0% ~ (p=1.000 n=10) ¹ +HinfNorm-8 1.447k ± 0% 1.447k ± 0% ~ (p=1.000 n=10) +H2Syn_Simple-8 221.0 ± 0% 221.0 ± 0% ~ (p=1.000 n=10) ¹ +HinfSyn_Simple-8 3.107k ± 0% 3.107k ± 0% ~ (p=0.303 n=10) +Balreal-8 88.00 ± 0% 88.00 ± 0% ~ (p=1.000 n=10) ¹ +Balred-8 97.00 ± 0% 97.00 ± 0% ~ (p=1.000 n=10) ¹ +Place_N10_M2-8 28.00 ± 0% 28.00 ± 0% ~ (p=1.000 n=10) ¹ +Place_N50_M5-8 75.00 ± 0% 75.00 ± 0% ~ (p=1.000 n=10) ¹ +Place_N100_M5-8 337.0 ± 0% 337.0 ± 0% ~ (p=1.000 n=10) ¹ +Acker_N5-8 19.00 ± 0% 19.00 ± 0% ~ (p=1.000 n=10) ¹ +Acker_N10-8 22.00 ± 0% 22.00 ± 0% ~ (p=1.000 n=10) ¹ +Lqr_N10_M2-8 37.00 ± 0% 37.00 ± 0% ~ (p=1.000 n=10) ¹ +Lqr_N50_M5-8 758.0 ± 0% 758.0 ± 0% ~ (p=1.000 n=10) ¹ +Lqr_N100_M5-8 2.066k ± 0% 2.017k ± 0% -2.40% (p=0.000 n=10) +Kalman_N10_M2_P3-8 103.0 ± 0% 103.0 ± 0% ~ (p=1.000 n=10) ¹ +Kalman_N50_M5_P5-8 2.191k ± 0% 2.191k ± 0% ~ (p=1.000 n=10) ¹ +Kalman_N100_M5_P5-8 4.337k ± 0% 4.277k ± 0% -1.39% (p=0.000 n=10) +Estim_N10_M2_P3-8 21.00 ± 0% 21.00 ± 0% ~ (p=1.000 n=10) ¹ +Estim_N50_M5_P5-8 21.00 ± 0% 21.00 ± 0% ~ (p=1.000 n=10) ¹ +Estim_N100_M5_P5-8 31.00 ± 0% 21.00 ± 0% -32.26% (p=0.000 n=10) +Reg_N10_M2_P3-8 25.00 ± 0% 25.00 ± 0% ~ (p=1.000 n=10) ¹ +Reg_N50_M5_P5-8 25.00 ± 0% 25.00 ± 0% ~ (p=1.000 n=10) ¹ +Reg_N100_M5_P5-8 55.00 ± 0% 25.00 ± 0% -54.55% (p=0.000 n=10) +PolyRoots_N10-8 41.00 ± 0% 41.00 ± 0% ~ (p=1.000 n=10) ¹ +ZPKEval_SISO-8 2.000 ± 0% 2.000 ± 0% ~ (p=1.000 n=10) ¹ +ZPKFreqResponse_SISO_100-8 2.000 ± 0% 2.000 ± 0% ~ (p=1.000 n=10) ¹ +ZPKToTF_SISO_N10-8 21.00 ± 0% 21.00 ± 0% ~ (p=1.000 n=10) ¹ +TFToZPK_SISO_N10-8 90.00 ± 0% 90.00 ± 0% ~ (p=1.000 n=10) ¹ +SSToZPK_SISO-8 130.0 ± 0% 130.0 ± 0% ~ (p=1.000 n=10) ¹ +ZPKToSS_SISO-8 32.00 ± 0% 32.00 ± 0% ~ (p=1.000 n=10) ¹ +PolyFromComplexRoots_N20-8 2.000 ± 0% 2.000 ± 0% ~ (p=1.000 n=10) ¹ +Sigma_SISO-8 72.00 ± 0% 72.00 ± 0% ~ (p=1.000 n=10) ¹ +Sigma_MIMO-8 85.00 ± 0% 85.00 ± 0% ~ (p=1.000 n=10) ¹ +Nichols-8 74.00 ± 0% 74.00 ± 0% ~ (p=1.000 n=10) ¹ +Nyquist-8 96.00 ± 0% 96.00 ± 0% ~ (p=1.000 n=10) ¹ +FreqRespEst_SISO-8 15.00 ± 0% 15.00 ± 0% ~ (p=1.000 n=10) ¹ +FreqRespEst_MIMO-8 17.00 ± 0% 17.00 ± 0% ~ (p=1.000 n=10) ¹ +BlkDiag-8 15.00 ± 0% 15.00 ± 0% ~ (p=1.000 n=10) ¹ +Connect-8 38.00 ± 0% 38.00 ± 0% ~ (p=1.000 n=10) ¹ +LFT-8 74.00 ± 0% 74.00 ± 0% ~ (p=1.000 n=10) ¹ +LFT_Large-8 74.00 ± 0% 74.00 ± 0% ~ (p=1.000 n=10) ¹ +D2C_ZOH_N2-8 46.00 ± 0% 46.00 ± 0% ~ (p=1.000 n=10) ¹ +D2C_ZOH_N5-8 48.00 ± 0% 48.00 ± 0% ~ (p=1.000 n=10) ¹ +D2C_ZOH_N20-8 50.00 ± 0% 50.00 ± 0% ~ (p=1.000 n=10) ¹ +D2C_ZOH_N50-8 53.00 ± 0% 53.00 ± 0% ~ (p=1.000 n=10) +D2C_Tustin_N20-8 32.00 ± 0% 32.00 ± 0% ~ (p=1.000 n=10) ¹ +MatLog_N20-8 30.00 ± 0% 30.00 ± 0% ~ (p=1.000 n=10) ¹ +MatLog_N50-8 32.00 ± 0% 32.00 ± 0% ~ (p=1.000 n=10) +DCGain_StableMIMO_N10_M4_P6-8 13.00 ± 0% 13.00 ± 0% ~ (p=1.000 n=10) ¹ +DCGain_IntegratorMIMO_N10_M4_P6-8 33.00 ± 0% 33.00 ± 0% ~ (p=1.000 n=10) ¹ +DCGain_IntegratorMIMO_N40_M8_P8-8 34.00 ± 0% 34.00 ± 0% ~ (p=1.000 n=10) ¹ +SystemFRD_SISO_200-8 60.00 ± 0% 60.00 ± 0% ~ (p=1.000 n=10) ¹ +SystemFRD_SISO_2000-8 60.00 ± 0% 60.00 ± 0% ~ (p=1.000 n=10) ¹ +SystemFRD_SISO_10000-8 60.50 ± 1% 61.00 ± 0% +0.83% (p=0.033 n=10) +SystemFRD_MIMO_200-8 120.0 ± 0% 120.0 ± 0% ~ (p=1.000 n=10) ¹ +SystemFRD_MIMO_2000-8 125.0 ± 2% 124.0 ± 2% ~ (p=0.206 n=10) +SystemFRD_MIMO_10000-8 129.0 ± 2% 129.0 ± 1% ~ (p=1.000 n=10) +SystemFRD_Large_2000-8 211.0 ± 0% 210.5 ± 0% ~ (p=0.215 n=10) +FRDSigma_SISO_200-8 3.000 ± 0% 3.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDSigma_SISO_2000-8 3.000 ± 0% 3.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDSigma_MIMO_200-8 8.000 ± 0% 8.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDSigma_MIMO_2000-8 8.000 ± 0% 8.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDSigma_MIMO_10000-8 8.000 ± 0% 8.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDSigma_Large_2000-8 8.000 ± 0% 8.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDMargin_200-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDMargin_2000-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDMargin_10000-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDMargin_NegGM_2000-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDSigma_MIMO5x5_2000-8 8.000 ± 0% 8.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDSeries_SISO_200-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDSeries_SISO_2000-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDSeries_MIMO_200-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDSeries_MIMO_2000-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDSeries_MIMO_10000-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDParallel_SISO_2000-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDParallel_MIMO_2000-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDFeedback_SISO_200-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDFeedback_SISO_2000-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDFeedback_MIMO_200-8 10.00 ± 0% 10.00 ± 0% ~ (p=1.000 n=10) ¹ +FRDFeedback_MIMO_2000-8 10.00 ± 0% 10.00 ± 0% ~ (p=1.000 n=10) ¹ +FRDFeedback_MIMO_10000-8 10.00 ± 0% 10.00 ± 0% ~ (p=1.000 n=10) ¹ +FRDFeedback_MIMO8x8_2000-8 10.00 ± 0% 10.00 ± 0% ~ (p=1.000 n=10) ¹ +FRDAbs_MIMO_2000-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDSelectFrequencies_MIMO_2000-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDPeakGain_MIMO_2000-8 6.000 ± 0% 6.000 ± 0% ~ (p=1.000 n=10) ¹ +ModelArrayFreqResponse_MIMO_16x200-8 1.620k ± 0% 1.620k ± 0% ~ (p=0.582 n=10) +ModelArrayFreqResponseManualLoop_MIMO_16x200-8 1.614k ± 0% 1.615k ± 0% ~ (p=0.179 n=10) +Step_SISO_N2-8 54.00 ± 0% 54.00 ± 0% ~ (p=1.000 n=10) ¹ +Step_SISO_N10-8 101.00 ± 0% 73.00 ± 0% -27.72% (p=0.000 n=10) +Step_SISO_N50-8 252.0 ± 1% 134.0 ± 1% -46.83% (p=0.000 n=10) +Step_MIMO_N10-8 62.00 ± 0% 62.00 ± 0% ~ (p=1.000 n=10) ¹ +StepInfo_SISO_N10-8 2.000 ± 0% 2.000 ± 0% ~ (p=1.000 n=10) ¹ +StepInfo_MIMO_N10-8 2.000 ± 0% 2.000 ± 0% ~ (p=1.000 n=10) ¹ +ModelArrayStep_MIMO_16-8 883.0 ± 0% 882.5 ± 0% ~ (p=1.000 n=10) +ModelArrayStepManualLoop_MIMO_16-8 877.0 ± 0% 877.0 ± 0% ~ (p=0.121 n=10) +Impulse_SISO_N2-8 54.00 ± 0% 54.00 ± 0% ~ (p=1.000 n=10) ¹ +Impulse_SISO_N10-8 101.00 ± 0% 73.00 ± 0% -27.72% (p=0.000 n=10) +Impulse_SISO_N50-8 252.0 ± 0% 134.0 ± 0% -46.83% (p=0.000 n=10) +Impulse_MIMO_N10-8 62.00 ± 0% 62.00 ± 0% ~ (p=1.000 n=10) ¹ +Lsim_SISO_N2-8 58.00 ± 0% 40.00 ± 0% -31.03% (p=0.000 n=10) +Lsim_SISO_N10-8 60.00 ± 0% 42.00 ± 0% -30.00% (p=0.000 n=10) +Lsim_SISO_N50-8 62.00 ± 0% 44.00 ± 0% -29.03% (p=0.000 n=10) +Lsim_MIMO_N10-8 60.00 ± 0% 42.00 ± 0% -30.00% (p=0.000 n=10) +Lsim_SISO_1e4-8 361.00 ± 0% 43.00 ± 0% -88.09% (p=0.000 n=10) +Lsim_MIMO_1e4-8 368.00 ± 0% 46.50 ± 1% -87.36% (p=0.000 n=10) +Lsim_Discrete_SISO-8 48.00 ± 0% 14.00 ± 0% -70.83% (p=0.000 n=10) +Loopsens_SISO_N2-8 227.0 ± 0% 227.0 ± 0% ~ (p=1.000 n=10) ¹ +Loopsens_SISO_N10-8 227.0 ± 0% 227.0 ± 0% ~ (p=1.000 n=10) ¹ +Loopsens_MIMO_N10-8 227.0 ± 0% 227.0 ± 0% ~ (p=1.000 n=10) ¹ +Canon_Modal_N2-8 36.00 ± 0% 36.00 ± 0% ~ (p=1.000 n=10) ¹ +Canon_Modal_N10-8 54.00 ± 0% 54.00 ± 0% ~ (p=1.000 n=10) ¹ +Canon_Modal_N50-8 113.0 ± 1% 113.0 ± 1% ~ (p=1.000 n=10) +Canon_Modal_N100-8 2.015k ± 0% 2.014k ± 0% ~ (p=0.590 n=10) +Canon_Comp_N2-8 49.00 ± 0% 49.00 ± 0% ~ (p=1.000 n=10) ¹ +Canon_Comp_N10-8 100.0 ± 0% 100.0 ± 0% ~ (p=1.000 n=10) ¹ +DescriptorToExplicit_N10-8 22.00 ± 0% 22.00 ± 0% ~ (p=1.000 n=10) ¹ +DescriptorFreqResponse_MIMO_N10x200-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +DescriptorFreqResponse_MIMO_N50x200-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FixedInputReduction_N10-8 10.00 ± 0% 10.00 ± 0% ~ (p=1.000 n=10) ¹ +TunableGainCurrentSystem_4x4-8 8.000 ± 0% 8.000 ± 0% ~ (p=1.000 n=10) ¹ +TunableGainSampleCurrentSystem_4x4-8 30.00 ± 0% 30.00 ± 0% ~ (p=1.000 n=10) ¹ +GeneralizedCurrentSystem_SISO-8 8.000 ± 0% 8.000 ± 0% ~ (p=1.000 n=10) ¹ +GeneralizedClosedLoop_SISO-8 68.00 ± 0% 68.00 ± 0% ~ (p=1.000 n=10) ¹ +TuningGoalWeightedGain_SISO-8 82.00 ± 0% 82.00 ± 0% ~ (p=1.000 n=10) ¹ +TuningGoalWeightedGain_MIMO-8 113.0 ± 0% 113.0 ± 0% ~ (p=1.000 n=10) ¹ +TuningGoalDynamicWeightedGain_MIMO-8 247.0 ± 0% 247.0 ± 0% ~ (p=1.000 n=10) ¹ +Systune_SISO-8 688.0 ± 0% 688.0 ± 0% ~ (p=1.000 n=10) +Systune_MIMO-8 1.287k ± 0% 1.286k ± 0% -0.08% (p=0.003 n=10) +PhysicalAssembly_8Components-8 306.0 ± 0% 306.0 ± 0% ~ (p=1.000 n=10) ¹ +ModalTruncate_N50_Order10-8 156.0 ± 0% 156.0 ± 0% ~ (p=1.000 n=10) ¹ +Passivity_SISO-8 63.00 ± 0% 63.00 ± 0% ~ (p=1.000 n=10) ¹ +FRDPassivity_MIMO-8 2.000 ± 0% 2.000 ± 0% ~ (p=1.000 n=10) ¹ +Stabsep_N2-8 55.00 ± 0% 55.00 ± 0% ~ (p=1.000 n=10) ¹ +Stabsep_N10-8 79.00 ± 0% 79.00 ± 0% ~ (p=1.000 n=10) ¹ +Stabsep_N50-8 157.0 ± 1% 156.0 ± 1% ~ (p=0.179 n=10) +Stabsep_N100-8 480.0 ± 0% 480.5 ± 0% ~ (p=0.738 n=10) +Modsep_N10-8 79.00 ± 0% 79.00 ± 0% ~ (p=1.000 n=10) ¹ +Modsep_N50-8 144.0 ± 0% 143.0 ± 1% ~ (p=0.057 n=10) +Ssbal_N2-8 12.00 ± 0% 12.00 ± 0% ~ (p=1.000 n=10) ¹ +Ssbal_N10-8 13.00 ± 0% 13.00 ± 0% ~ (p=1.000 n=10) ¹ +Ssbal_N50-8 13.00 ± 0% 13.00 ± 0% ~ (p=1.000 n=10) ¹ +Prescale_N2-8 19.00 ± 0% 19.00 ± 0% ~ (p=1.000 n=10) ¹ +Prescale_N10-8 20.00 ± 0% 20.00 ± 0% ~ (p=1.000 n=10) ¹ +Prescale_N50-8 20.00 ± 0% 20.00 ± 0% ~ (p=1.000 n=10) ¹ +Sminreal_N2-8 9.000 ± 0% 9.000 ± 0% ~ (p=1.000 n=10) ¹ +Sminreal_N10-8 11.00 ± 0% 11.00 ± 0% ~ (p=1.000 n=10) ¹ +Sminreal_N50-8 15.00 ± 0% 15.00 ± 0% ~ (p=1.000 n=10) ¹ +Inv_SISO_N2-8 28.00 ± 0% 28.00 ± 0% ~ (p=1.000 n=10) ¹ +Inv_SISO_N10-8 28.00 ± 0% 28.00 ± 0% ~ (p=1.000 n=10) ¹ +Inv_MIMO_N10-8 28.00 ± 0% 28.00 ± 0% ~ (p=1.000 n=10) ¹ +Covar_SISO_N2-8 29.00 ± 0% 29.00 ± 0% ~ (p=1.000 n=10) ¹ +Covar_SISO_N10-8 26.00 ± 0% 26.00 ± 0% ~ (p=1.000 n=10) ¹ +Covar_SISO_N50-8 83.00 ± 0% 83.00 ± 0% ~ (p=1.000 n=10) ¹ +Covar_SISO_N100-8 939.0 ± 0% 939.0 ± 0% ~ (p=1.000 n=10) ¹ +Covar_MIMO_N10-8 26.00 ± 0% 26.00 ± 0% ~ (p=1.000 n=10) ¹ +Pidtune_PI-8 94.00 ± 0% 94.00 ± 0% ~ (p=1.000 n=10) ¹ +Pidtune_PID-8 94.00 ± 0% 94.00 ± 0% ~ (p=1.000 n=10) ¹ +Pidtune_PIDF-8 94.00 ± 0% 94.00 ± 0% ~ (p=1.000 n=10) ¹ +Margin_SISO-8 85.00 ± 0% 85.00 ± 0% ~ (p=1.000 n=10) ¹ +Bandwidth_SISO-8 71.00 ± 0% 71.00 ± 0% ~ (p=1.000 n=10) ¹ +DiskMargin_SISO-8 97.00 ± 0% 97.00 ± 0% ~ (p=1.000 n=10) ¹ +geomean ² -6.59% ² +¹ all samples are equal +² summaries must be >0 to compute geomean diff --git a/docs/benchmarks/gonum-v0.19.0/full-candidate.txt.gz b/docs/benchmarks/gonum-v0.19.0/full-candidate.txt.gz new file mode 100644 index 0000000..a60a85a Binary files /dev/null and b/docs/benchmarks/gonum-v0.19.0/full-candidate.txt.gz differ diff --git a/docs/benchmarks/gonum-v0.19.0/go1.27.1-full/README.md b/docs/benchmarks/gonum-v0.19.0/go1.27.1-full/README.md new file mode 100644 index 0000000..3817856 --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/go1.27.1-full/README.md @@ -0,0 +1,123 @@ +# Full Go 1.27.1 follow-up + +Measured on 2026-09-12 for controlsys PR #171. The Go 1.27.1 configuration +substantially reduces the large Go 1.26.4 regressions and retains simulation and +regulator improvements. Residual slowdowns remain: this is a mixed-performance +upgrade, with a release decision still needed before merge/publication. + +## Controlled comparison + +Apple M1 Pro, darwin/arm64, Go 1.27.1, GOMAXPROCS=8, default Gonum Go BLAS/LAPACK, +no custom build tags, GOFLAGS, PGO, alignment flags, or GOEXPERIMENT overrides. +A normal desktop host was used without affinity or power-state control. + +- Candidate source: controlsys `2027e5d`, Gonum `v0.19.0-fork`. +- Baseline source: controlsys `fdda4f150d13b34a969de7faed6ae896e827ce94`, Gonum + `v0.17.7-fork`, with the same Go 1.27.1 directive and candidate `model_array.go`. +- Go 1.27's required `go fix` changed the reverse index loop to `slices.Backward`. + That rewrite was applied identically to both variants. All 191 Go files were + verified byte-identical between variants; candidate source matched the PR. +- Both binaries were built before timing. No local builds, tests, or profiling + ran concurrently with acceptance measurements. +- Full suite: 236 cases, ten samples per version, 100ms per case. Follow-up: + eleven cases, ten samples per version, 300ms per case. Revision order alternated + baseline/candidate and candidate/baseline. All runs passed with matching cases. +- benchstat: `golang.org/x/perf v0.0.0-20260312031701-16a31bc5fbd0`. + +This isolates the dependency under the final Go 1.27 configuration; it does not +isolate a compiler-only change against the earlier Go 1.26 run. The separate +[issue investigation](../issue10-investigation/README.md) examines that question. + +## Results + +The complete timing geomean improves **1.07%**. A geomean is not application +throughput and does not imply that every workload improves. The longer follow-up +covered all full-suite slowdowns of at least 3%, the seven original issue cases, +and representative gains. Follow-up medians: + +| Benchmark | v0.17.7-fork | v0.19.0-fork | Time change | p | +| --- | ---: | ---: | ---: | ---: | +| SimulateWithDelay_SISO | 18.31 us | 18.93 us | +3.38% | <0.001 | +| SimulateInternalDelay | 20.52 us | 21.42 us | +4.38% | <0.001 | +| SystemFRD_SISO_10000 | 217.6 us | 231.0 us | +6.17% | <0.001 | +| MatLog_N50 | 331.9 us | 335.6 us | +1.09% | <0.001 | +| D2C_ZOH_N50 | 413.7 us | 417.9 us | +1.02% | 0.001 | +| Stabsep_N100 | 8.612 ms | 8.658 ms | +0.54% | 0.015 | +| Reduce | 45.33 us | 45.81 us | +1.07% | 0.009 | +| DiscretizeZOH | 21.23 us | 21.36 us | inconclusive | 0.305 | +| Modsep_N50 | 1.433 ms | 1.428 ms | -0.36% | 0.011 | +| Simulate_DCMotor | 43.88 us | 38.05 us | -13.29% | <0.001 | +| Reg_N100_M5_P5 | 79.78 us | 59.68 us | -25.20% | <0.001 | + +The earlier 12.62%, 9.92%, and 6.18% regressions in MatLog, D2C, and Stabsep +are greatly reduced, but small significant differences remain in this final +configuration. The original focused investigation's absence of significance +should not be read as proof of equivalence. Different source/build layouts and +measurement sessions can change these small effects; no specific cause of the +remaining slowdowns has been established here. + +Delay benchmarks have unchanged allocation counts. The SISO FRD case rises from +60 to 61 allocs/op, Stabsep_N100 from 480 to 484. DC motor simulation drops from +45 to 11 and regulator construction from 55 to 25. Full memory results and +confidence intervals are retained in the tables. The full sweep includes smaller +changes outside the selected follow-up; multiple comparisons can yield false +positives, particularly for small effects. Other CPUs and worker counts remain +unmeasured. + +## Validation and release implications + +Go 1.27.1 passes `go fix ./...`, `go vet ./...`, `go build ./...`, full uncached +tests, race tests, the local downstream-consumer action, and GitHub push/PR CI. +The current CLI `govulncheck` v1.8.0 reports no vulnerabilities. The bundled gopls +v0.22.0 scanner could not load the newer Go version; the CLI replaced that check. + +The PR now requires Go 1.27.1 in go.mod and CI. This raises the minimum Go version +from 1.26.3 and must be disclosed in release notes. The Gonum pin remains the +released `v0.19.0-fork`, not master. The prepared release remains a draft: assess +or repair the residual 3–6% regressions before publication. This configuration +improves the performance assessment but does not close Gonum issue #10 or repair +the older-toolchain executable-layout behavior. + +## Evidence and reproduction + +`full-benchstat.txt` and `focused-benchstat.txt` retain complete tables. Matching +`*-baseline.txt.gz` and `*-candidate.txt.gz` contain the raw samples. +`metadata.json` records full-sweep hashes, flags, order, and source adjustments. + +Run this Bash recipe from controlsys with Go 1.27.1 to reproduce the controlled +source comparison. Both variants use the final candidate source; only the Gonum +replacement differs. Compile before timing and keep other CPU-heavy work idle. + +```bash +set -eu +bench_dir=$(mktemp -d) +for label in baseline candidate; do + mkdir "$bench_dir/$label" + git archive 2027e5d | tar -x -C "$bench_dir/$label" +done +(cd "$bench_dir/baseline" && go mod edit \ + -replace=gonum.org/v1/gonum=github.com/jamestjsp/gonum@v0.17.7-fork && go mod tidy) +for label in baseline candidate; do + (cd "$bench_dir/$label" && go test -c -o "$bench_dir/$label.test") +done +export GOMAXPROCS=8 +for round in $(seq 1 10); do + order='baseline candidate' + if [ $((round % 2)) -eq 0 ]; then order='candidate baseline'; fi + for label in $order; do + "$bench_dir/$label.test" -test.run='^$' -test.bench=. \ + -test.benchmem -test.benchtime=100ms -test.count=1 \ + >> "$bench_dir/$label.txt" + done +done +benchstat "$bench_dir/baseline.txt" "$bench_dir/candidate.txt" +``` + +For the focused follow-up, use 300ms and: + +```text +^Benchmark(SimulateWithDelay_SISO|SimulateInternalDelay|SystemFRD_SISO_10000|MatLog_N50|D2C_ZOH_N50|Stabsep_N100|Reduce|Modsep_N50|DiscretizeZOH|Simulate_DCMotor|Reg_N100_M5_P5)$ +``` + +For reanalysis without rerunning, decompress each retained pair using `gzip -dc` +and pass the resulting files to the recorded benchstat version. diff --git a/docs/benchmarks/gonum-v0.19.0/go1.27.1-full/focused-baseline.txt.gz b/docs/benchmarks/gonum-v0.19.0/go1.27.1-full/focused-baseline.txt.gz new file mode 100644 index 0000000..bf5c822 Binary files /dev/null and b/docs/benchmarks/gonum-v0.19.0/go1.27.1-full/focused-baseline.txt.gz differ diff --git a/docs/benchmarks/gonum-v0.19.0/go1.27.1-full/focused-benchstat.txt b/docs/benchmarks/gonum-v0.19.0/go1.27.1-full/focused-benchstat.txt new file mode 100644 index 0000000..3ec60e7 --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/go1.27.1-full/focused-benchstat.txt @@ -0,0 +1,50 @@ +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro + │ baseline.txt │ candidate.txt │ + │ sec/op │ sec/op vs base │ +SimulateWithDelay_SISO-8 18.31µ ± 1% 18.93µ ± 1% +3.38% (p=0.000 n=10) +Reduce-8 45.33µ ± 1% 45.81µ ± 1% +1.07% (p=0.009 n=10) +DiscretizeZOH-8 21.23µ ± 1% 21.36µ ± 1% ~ (p=0.305 n=10) +SimulateInternalDelay-8 20.52µ ± 0% 21.42µ ± 1% +4.38% (p=0.000 n=10) +Simulate_DCMotor-8 43.88µ ± 1% 38.05µ ± 1% -13.29% (p=0.000 n=10) +Reg_N100_M5_P5-8 79.78µ ± 4% 59.68µ ± 4% -25.20% (p=0.000 n=10) +D2C_ZOH_N50-8 413.7µ ± 1% 417.9µ ± 1% +1.02% (p=0.001 n=10) +MatLog_N50-8 331.9µ ± 1% 335.6µ ± 0% +1.09% (p=0.000 n=10) +SystemFRD_SISO_10000-8 217.6µ ± 3% 231.0µ ± 3% +6.17% (p=0.000 n=10) +Stabsep_N100-8 8.612m ± 1% 8.658m ± 1% +0.54% (p=0.015 n=10) +Modsep_N50-8 1.433m ± 1% 1.428m ± 0% -0.36% (p=0.011 n=10) +geomean 141.8µ 138.5µ -2.32% + + │ baseline.txt │ candidate.txt │ + │ B/op │ B/op vs base │ +SimulateWithDelay_SISO-8 1.492Ki ± 0% 1.492Ki ± 0% ~ (p=1.000 n=10) ¹ +Reduce-8 52.44Ki ± 0% 52.44Ki ± 0% ~ (p=0.697 n=10) +DiscretizeZOH-8 21.66Ki ± 0% 21.66Ki ± 0% ~ (p=0.810 n=10) +SimulateInternalDelay-8 2.000Ki ± 0% 2.000Ki ± 0% ~ (p=1.000 n=10) ¹ +Simulate_DCMotor-8 19.67Ki ± 0% 16.28Ki ± 0% -17.23% (p=0.000 n=10) +Reg_N100_M5_P5-8 424.2Ki ± 0% 421.4Ki ± 0% -0.66% (p=0.000 n=10) +D2C_ZOH_N50-8 463.2Ki ± 0% 463.4Ki ± 0% ~ (p=0.315 n=10) +MatLog_N50-8 391.2Ki ± 0% 391.1Ki ± 0% ~ (p=0.739 n=10) +SystemFRD_SISO_10000-8 922.6Ki ± 0% 922.7Ki ± 0% +0.01% (p=0.001 n=10) +Stabsep_N100-8 2.527Mi ± 1% 2.536Mi ± 1% +0.35% (p=0.015 n=10) +Modsep_N50-8 643.0Ki ± 0% 640.7Ki ± 0% -0.36% (p=0.005 n=10) +geomean 97.84Ki 96.12Ki -1.76% +¹ all samples are equal + + │ baseline.txt │ candidate.txt │ + │ allocs/op │ allocs/op vs base │ +SimulateWithDelay_SISO-8 19.00 ± 0% 19.00 ± 0% ~ (p=1.000 n=10) ¹ +Reduce-8 170.0 ± 0% 170.0 ± 0% ~ (p=1.000 n=10) ¹ +DiscretizeZOH-8 28.00 ± 0% 28.00 ± 0% ~ (p=1.000 n=10) ¹ +SimulateInternalDelay-8 11.00 ± 0% 11.00 ± 0% ~ (p=1.000 n=10) ¹ +Simulate_DCMotor-8 45.00 ± 0% 11.00 ± 0% -75.56% (p=0.000 n=10) +Reg_N100_M5_P5-8 55.00 ± 0% 25.00 ± 0% -54.55% (p=0.000 n=10) +D2C_ZOH_N50-8 53.00 ± 0% 53.00 ± 0% ~ (p=1.000 n=10) ¹ +MatLog_N50-8 32.00 ± 0% 32.00 ± 0% ~ (p=1.000 n=10) +SystemFRD_SISO_10000-8 60.00 ± 2% 61.00 ± 0% +1.67% (p=0.003 n=10) +Stabsep_N100-8 480.0 ± 0% 484.0 ± 0% +0.83% (p=0.000 n=10) +Modsep_N50-8 144.0 ± 1% 143.0 ± 1% -0.69% (p=0.023 n=10) +geomean 56.10 46.02 -17.97% +¹ all samples are equal diff --git a/docs/benchmarks/gonum-v0.19.0/go1.27.1-full/focused-candidate.txt.gz b/docs/benchmarks/gonum-v0.19.0/go1.27.1-full/focused-candidate.txt.gz new file mode 100644 index 0000000..07ddc74 Binary files /dev/null and b/docs/benchmarks/gonum-v0.19.0/go1.27.1-full/focused-candidate.txt.gz differ diff --git a/docs/benchmarks/gonum-v0.19.0/go1.27.1-full/full-baseline.txt.gz b/docs/benchmarks/gonum-v0.19.0/go1.27.1-full/full-baseline.txt.gz new file mode 100644 index 0000000..7528cfd Binary files /dev/null and b/docs/benchmarks/gonum-v0.19.0/go1.27.1-full/full-baseline.txt.gz differ diff --git a/docs/benchmarks/gonum-v0.19.0/go1.27.1-full/full-benchstat.txt b/docs/benchmarks/gonum-v0.19.0/go1.27.1-full/full-benchstat.txt new file mode 100644 index 0000000..d15f26d --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/go1.27.1-full/full-benchstat.txt @@ -0,0 +1,727 @@ +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro + │ baseline.txt │ candidate.txt │ + │ sec/op │ sec/op vs base │ +SimulateWithDelay_SISO-8 18.49µ ± 2% 19.08µ ± 2% +3.19% (p=0.000 n=10) +SimulateWithDelay_MIMO-8 107.6µ ± 1% 109.3µ ± 1% +1.55% (p=0.009 n=10) +BilinearDiscretize-8 10.44µ ± 1% 10.43µ ± 2% ~ (p=0.781 n=10) +TransferFunction_MIMO-8 63.04µ ± 4% 61.22µ ± 3% -2.88% (p=0.011 n=10) +Reduce-8 45.57µ ± 2% 45.74µ ± 1% ~ (p=0.739 n=10) +AbsorbDelay-8 947.4n ± 8% 967.0n ± 5% ~ (p=0.684 n=10) +DiscretizeZOH-8 21.48µ ± 1% 21.58µ ± 1% ~ (p=0.739 n=10) +DenseNorm-8 847.4n ± 0% 844.0n ± 0% -0.40% (p=0.050 n=10) +Series-8 1.233µ ± 7% 1.290µ ± 6% ~ (p=0.138 n=10) +Parallel-8 749.9n ± 15% 801.2n ± 9% ~ (p=0.218 n=10) +Feedback-8 4.146µ ± 2% 4.183µ ± 5% ~ (p=0.089 n=10) +FeedbackLFT-8 15.94µ ± 4% 15.59µ ± 4% ~ (p=0.225 n=10) +Append-8 922.2n ± 9% 948.1n ± 14% ~ (p=0.853 n=10) +FreqResponse-8 39.21µ ± 2% 38.70µ ± 2% ~ (p=0.063 n=10) +FreqResponse_ShortSweep-8 12.87µ ± 2% 12.72µ ± 2% ~ (p=0.123 n=10) +FrequencySweepKernels/N4_W2/StateSpace-8 647.7n ± 1% 644.8n ± 3% ~ (p=0.811 n=10) +FrequencySweepKernels/N4_W2/TransferFunction-8 8.868µ ± 4% 9.028µ ± 4% ~ (p=0.218 n=10) +FrequencySweepKernels/N4_W8/StateSpace-8 2.369µ ± 2% 2.371µ ± 2% ~ (p=0.811 n=10) +FrequencySweepKernels/N4_W8/TransferFunction-8 9.062µ ± 4% 9.305µ ± 3% ~ (p=0.089 n=10) +FrequencySweepKernels/N4_W32/StateSpace-8 9.354µ ± 1% 9.282µ ± 2% ~ (p=0.315 n=10) +FrequencySweepKernels/N4_W32/TransferFunction-8 10.34µ ± 3% 10.29µ ± 5% ~ (p=0.353 n=10) +FrequencySweepKernels/N4_W100/StateSpace-8 28.40µ ± 1% 28.50µ ± 2% ~ (p=0.436 n=10) +FrequencySweepKernels/N4_W100/TransferFunction-8 12.65µ ± 3% 12.76µ ± 3% ~ (p=0.280 n=10) +FrequencySweepKernels/N10_W2/StateSpace-8 3.377µ ± 3% 3.348µ ± 2% ~ (p=0.239 n=10) +FrequencySweepKernels/N10_W2/TransferFunction-8 28.29µ ± 2% 28.31µ ± 2% ~ (p=0.631 n=10) +FrequencySweepKernels/N10_W8/StateSpace-8 12.75µ ± 3% 12.82µ ± 1% ~ (p=0.987 n=10) +FrequencySweepKernels/N10_W8/TransferFunction-8 29.16µ ± 4% 28.84µ ± 3% ~ (p=0.353 n=10) +FrequencySweepKernels/N10_W32/StateSpace-8 49.88µ ± 2% 50.01µ ± 0% ~ (p=0.811 n=10) +FrequencySweepKernels/N10_W32/TransferFunction-8 32.09µ ± 2% 31.63µ ± 2% ~ (p=0.280 n=10) +FrequencySweepKernels/N10_W100/StateSpace-8 153.6µ ± 2% 153.9µ ± 0% ~ (p=0.853 n=10) +FrequencySweepKernels/N10_W100/TransferFunction-8 39.25µ ± 2% 38.69µ ± 2% ~ (p=0.060 n=10) +Bode-8 95.03µ ± 1% 95.28µ ± 1% ~ (p=0.631 n=10) +Zeros_SISO-8 13.97µ ± 3% 13.90µ ± 3% ~ (p=0.631 n=10) +Zeros_MIMO-8 15.39µ ± 3% 15.54µ ± 4% ~ (p=0.529 n=10) +Zeros_NonSquare-8 11.40µ ± 1% 11.39µ ± 1% ~ (p=0.853 n=10) +ControllabilityStaircase-8 35.66µ ± 4% 35.77µ ± 6% ~ (p=0.684 n=10) +SimulateNoDelay-8 178.2µ ± 2% 171.3µ ± 1% -3.87% (p=0.000 n=10) +ThiranDelay-8 271.3n ± 4% 272.1n ± 3% ~ (p=0.684 n=10) +PadeDelay-8 358.7n ± 3% 357.1n ± 2% ~ (p=0.353 n=10) +DecomposeIODelay-8 179.6n ± 1% 179.3n ± 2% ~ (p=0.839 n=10) +PullDelaysToLFT-8 1.229µ ± 5% 1.254µ ± 4% ~ (p=0.912 n=10) +GetDelayModel-8 1.328µ ± 3% 1.324µ ± 4% ~ (p=0.912 n=10) +SetDelayModel-8 432.1n ± 3% 420.8n ± 3% ~ (p=0.165 n=10) +AbsorbInternalDelay-8 1.248µ ± 3% 1.225µ ± 8% ~ (p=0.631 n=10) +DiscretizeWithOpts_Thiran-8 3.174µ ± 1% 3.193µ ± 1% ~ (p=0.171 n=10) +DiscretizeWithOpts_IODelayThiran-8 3.308µ ± 2% 3.265µ ± 1% ~ (p=0.197 n=10) +FeedbackApproximatedDelays-8 5.059µ ± 1% 5.056µ ± 2% ~ (p=0.723 n=10) +SimulateInternalDelay-8 20.57µ ± 1% 21.58µ ± 0% +4.87% (p=0.000 n=10) +FreqResponseWithDelay-8 19.96µ ± 6% 19.90µ ± 2% ~ (p=0.631 n=10) +PadeSystem-8 8.325µ ± 3% 8.357µ ± 4% ~ (p=0.436 n=10) +ZeroDelayApprox-8 1.470µ ± 1% 1.495µ ± 3% +1.70% (p=0.001 n=10) +IsStrictlyUpperTriangular-8 109.4n ± 0% 109.5n ± 0% ~ (p=0.331 n=10) +FreqResponseLFT-8 100.8µ ± 1% 101.5µ ± 1% +0.75% (p=0.009 n=10) +Simulate_DCMotor-8 44.42µ ± 2% 38.15µ ± 1% -14.11% (p=0.000 n=10) +FreqResponse_B747Lateral-8 18.43µ ± 3% 17.89µ ± 4% -2.93% (p=0.000 n=10) +Simulate_MassSpringDamper-8 46.55µ ± 2% 42.04µ ± 0% -9.68% (p=0.000 n=10) +DiscretizeAndSimulate_B747Longitudinal-8 15.41µ ± 3% 13.14µ ± 1% -14.76% (p=0.000 n=10) +Simulate_Large-8 2.069m ± 1% 2.055m ± 1% -0.65% (p=0.002 n=10) +FeedbackAndSimulate-8 19.12µ ± 2% 16.42µ ± 3% -14.15% (p=0.000 n=10) +Bode_LargeMIMO-8 586.3µ ± 1% 570.5µ ± 2% -2.69% (p=0.002 n=10) +Lyap_N10-8 14.76µ ± 2% 14.69µ ± 2% ~ (p=0.542 n=10) +Lyap_N50-8 637.0µ ± 1% 631.5µ ± 1% -0.87% (p=0.003 n=10) +Lyap_N100-8 3.817m ± 1% 3.857m ± 1% +1.05% (p=0.000 n=10) +DLyap_N10-8 14.47µ ± 2% 14.61µ ± 2% ~ (p=0.956 n=10) +DLyap_N50-8 832.6µ ± 1% 831.4µ ± 1% ~ (p=0.631 n=10) +DLyap_N100-8 6.344m ± 1% 6.382m ± 1% +0.61% (p=0.005 n=10) +Care_N10_M2-8 68.61µ ± 6% 69.76µ ± 4% ~ (p=0.165 n=10) +Care_N50_M5-8 4.273m ± 1% 4.321m ± 3% +1.13% (p=0.043 n=10) +Care_N100_M5-8 37.47m ± 0% 37.74m ± 1% +0.72% (p=0.001 n=10) +Dare_N10_M2-8 69.91µ ± 9% 72.05µ ± 6% ~ (p=0.353 n=10) +Dare_N50_M5-8 4.992m ± 1% 4.982m ± 1% ~ (p=1.000 n=10) +Dare_N100_M5-8 37.08m ± 0% 37.46m ± 1% +1.01% (p=0.001 n=10) +Gram-8 27.22µ ± 4% 27.19µ ± 2% ~ (p=0.724 n=10) +Ctrb-8 1.623µ ± 4% 1.621µ ± 1% ~ (p=0.591 n=10) +H2Norm-8 26.10µ ± 6% 25.97µ ± 1% ~ (p=0.315 n=10) +HSV-8 50.33µ ± 4% 49.77µ ± 1% -1.12% (p=0.044 n=10) +HinfNorm-8 2.340m ± 9% 2.305m ± 6% ~ (p=0.631 n=10) +H2Syn_Simple-8 13.85µ ± 10% 13.98µ ± 3% ~ (p=0.796 n=10) +HinfSyn_Simple-8 179.1µ ± 9% 182.0µ ± 2% ~ (p=0.631 n=10) +Balreal-8 58.83µ ± 4% 57.88µ ± 6% ~ (p=0.315 n=10) +Balred-8 59.01µ ± 7% 58.92µ ± 2% ~ (p=0.796 n=10) +Place_N10_M2-8 15.02µ ± 7% 14.79µ ± 4% ~ (p=0.529 n=10) +Place_N50_M5-8 290.0µ ± 2% 286.5µ ± 6% ~ (p=0.165 n=10) +Place_N100_M5-8 1.694m ± 2% 1.686m ± 3% ~ (p=0.912 n=10) +Acker_N5-8 2.614µ ± 2% 2.622µ ± 2% ~ (p=0.393 n=10) +Acker_N10-8 12.53µ ± 2% 12.54µ ± 2% ~ (p=0.436 n=10) +Lqr_N10_M2-8 68.76µ ± 8% 66.74µ ± 8% ~ (p=0.853 n=10) +Lqr_N50_M5-8 4.299m ± 2% 4.307m ± 8% ~ (p=0.353 n=10) +Lqr_N100_M5-8 37.42m ± 1% 37.94m ± 2% +1.40% (p=0.004 n=10) +Kalman_N10_M2_P3-8 84.02µ ± 5% 84.48µ ± 5% ~ (p=0.739 n=10) +Kalman_N50_M5_P5-8 4.996m ± 2% 4.989m ± 2% ~ (p=0.739 n=10) +Kalman_N100_M5_P5-8 37.73m ± 0% 38.11m ± 0% +1.01% (p=0.000 n=10) +Estim_N10_M2_P3-8 1.696µ ± 6% 1.647µ ± 9% ~ (p=0.128 n=10) +Estim_N50_M5_P5-8 16.50µ ± 7% 15.74µ ± 7% ~ (p=0.393 n=10) +Estim_N100_M5_P5-8 58.30µ ± 8% 50.64µ ± 3% -13.14% (p=0.000 n=10) +Reg_N10_M2_P3-8 1.865µ ± 2% 1.911µ ± 4% ~ (p=0.210 n=10) +Reg_N50_M5_P5-8 18.90µ ± 5% 18.77µ ± 6% ~ (p=0.529 n=10) +Reg_N100_M5_P5-8 83.67µ ± 11% 65.42µ ± 4% -21.81% (p=0.000 n=10) +PolyRoots_N10-8 18.84µ ± 1% 18.95µ ± 1% ~ (p=0.075 n=10) +ZPKEval_SISO-8 45.73n ± 1% 45.45n ± 2% ~ (p=0.271 n=10) +ZPKFreqResponse_SISO_100-8 1.792µ ± 1% 1.778µ ± 1% ~ (p=0.052 n=10) +ZPKToTF_SISO_N10-8 1.699µ ± 4% 1.697µ ± 2% ~ (p=0.517 n=10) +TFToZPK_SISO_N10-8 36.95µ ± 1% 37.10µ ± 1% ~ (p=0.190 n=10) +SSToZPK_SISO-8 16.29µ ± 4% 16.21µ ± 2% ~ (p=0.105 n=10) +ZPKToSS_SISO-8 627.5n ± 2% 619.8n ± 1% -1.23% (p=0.014 n=10) +PolyFromComplexRoots_N20-8 322.4n ± 2% 322.0n ± 1% ~ (p=0.403 n=10) +Sigma_SISO-8 12.36µ ± 3% 12.15µ ± 4% ~ (p=0.315 n=10) +Sigma_MIMO-8 93.78µ ± 1% 93.72µ ± 1% ~ (p=0.579 n=10) +Nichols-8 17.10µ ± 3% 16.87µ ± 3% ~ (p=0.143 n=10) +Nyquist-8 46.38µ ± 2% 45.52µ ± 2% -1.85% (p=0.019 n=10) +FreqRespEst_SISO-8 95.01µ ± 1% 95.17µ ± 1% ~ (p=0.971 n=10) +FreqRespEst_MIMO-8 245.7µ ± 0% 244.7µ ± 1% ~ (p=0.436 n=10) +BlkDiag-8 1.643µ ± 6% 1.607µ ± 5% ~ (p=0.289 n=10) +Connect-8 5.402µ ± 3% 5.412µ ± 7% ~ (p=0.853 n=10) +LFT-8 4.948µ ± 2% 4.876µ ± 2% ~ (p=0.247 n=10) +LFT_Large-8 10.11µ ± 2% 10.25µ ± 5% ~ (p=0.218 n=10) +D2C_ZOH_N2-8 2.858µ ± 2% 2.896µ ± 2% ~ (p=0.075 n=10) +D2C_ZOH_N5-8 6.501µ ± 1% 6.511µ ± 1% ~ (p=0.481 n=10) +D2C_ZOH_N20-8 62.10µ ± 2% 62.52µ ± 2% ~ (p=0.218 n=10) +D2C_ZOH_N50-8 418.7µ ± 2% 423.1µ ± 2% +1.05% (p=0.023 n=10) +D2C_Tustin_N20-8 14.05µ ± 1% 13.96µ ± 1% ~ (p=0.393 n=10) +MatLog_N20-8 50.02µ ± 1% 50.05µ ± 1% ~ (p=0.912 n=10) +MatLog_N50-8 336.1µ ± 1% 339.5µ ± 1% +1.01% (p=0.000 n=10) +DCGain_StableMIMO_N10_M4_P6-8 3.179µ ± 1% 3.203µ ± 1% ~ (p=0.085 n=10) +DCGain_IntegratorMIMO_N10_M4_P6-8 4.595µ ± 1% 4.576µ ± 3% ~ (p=0.739 n=10) +DCGain_IntegratorMIMO_N40_M8_P8-8 50.62µ ± 0% 51.68µ ± 1% +2.09% (p=0.000 n=10) +SystemFRD_SISO_200-8 11.38µ ± 5% 11.28µ ± 6% ~ (p=0.280 n=10) +SystemFRD_SISO_2000-8 53.82µ ± 4% 52.87µ ± 4% ~ (p=0.165 n=10) +SystemFRD_SISO_10000-8 229.9µ ± 7% 243.5µ ± 5% +5.94% (p=0.043 n=10) +SystemFRD_MIMO_200-8 92.34µ ± 2% 90.53µ ± 1% -1.96% (p=0.002 n=10) +SystemFRD_MIMO_2000-8 521.6µ ± 7% 515.9µ ± 6% ~ (p=0.075 n=10) +SystemFRD_MIMO_10000-8 2.409m ± 1% 2.374m ± 1% -1.44% (p=0.009 n=10) +SystemFRD_Large_2000-8 8.469m ± 1% 8.415m ± 2% ~ (p=0.075 n=10) +FRDSigma_SISO_200-8 1005.0n ± 1% 982.5n ± 6% ~ (p=0.138 n=10) +FRDSigma_SISO_2000-8 9.328µ ± 4% 9.074µ ± 3% -2.72% (p=0.046 n=10) +FRDSigma_MIMO_200-8 228.9µ ± 1% 228.2µ ± 1% ~ (p=0.123 n=10) +FRDSigma_MIMO_2000-8 2.270m ± 1% 2.270m ± 2% ~ (p=0.971 n=10) +FRDSigma_MIMO_10000-8 11.29m ± 1% 11.30m ± 0% ~ (p=0.971 n=10) +FRDSigma_Large_2000-8 4.268m ± 3% 4.259m ± 1% ~ (p=0.123 n=10) +FRDMargin_200-8 5.561µ ± 1% 5.500µ ± 1% -1.10% (p=0.023 n=10) +FRDMargin_2000-8 47.51µ ± 1% 47.39µ ± 1% ~ (p=0.579 n=10) +FRDMargin_10000-8 234.9µ ± 1% 233.5µ ± 1% ~ (p=0.089 n=10) +FRDMargin_NegGM_2000-8 48.48µ ± 1% 48.29µ ± 0% ~ (p=0.105 n=10) +FRDSigma_MIMO5x5_2000-8 6.250m ± 2% 6.222m ± 0% ~ (p=0.063 n=10) +FRDSeries_SISO_200-8 3.606µ ± 6% 3.505µ ± 5% ~ (p=0.353 n=10) +FRDSeries_SISO_2000-8 39.28µ ± 2% 38.71µ ± 1% -1.45% (p=0.030 n=10) +FRDSeries_MIMO_200-8 16.23µ ± 4% 15.91µ ± 4% ~ (p=0.165 n=10) +FRDSeries_MIMO_2000-8 171.3µ ± 2% 171.0µ ± 2% ~ (p=0.436 n=10) +FRDSeries_MIMO_10000-8 812.4µ ± 2% 816.0µ ± 3% ~ (p=0.912 n=10) +FRDParallel_SISO_2000-8 38.59µ ± 2% 37.94µ ± 1% ~ (p=0.052 n=10) +FRDParallel_MIMO_2000-8 116.6µ ± 2% 117.1µ ± 2% ~ (p=0.579 n=10) +FRDFeedback_SISO_200-8 7.180µ ± 4% 7.054µ ± 4% ~ (p=0.138 n=10) +FRDFeedback_SISO_2000-8 70.86µ ± 1% 71.20µ ± 5% ~ (p=0.796 n=10) +FRDFeedback_MIMO_200-8 52.87µ ± 1% 52.85µ ± 1% ~ (p=1.000 n=10) +FRDFeedback_MIMO_2000-8 533.8µ ± 0% 535.5µ ± 2% ~ (p=0.853 n=10) +FRDFeedback_MIMO_10000-8 2.567m ± 0% 2.607m ± 1% +1.53% (p=0.004 n=10) +FRDFeedback_MIMO8x8_2000-8 4.138m ± 1% 4.127m ± 1% ~ (p=0.247 n=10) +FRDAbs_MIMO_2000-8 182.7µ ± 7% 188.5µ ± 6% ~ (p=0.481 n=10) +FRDSelectFrequencies_MIMO_2000-8 65.57µ ± 3% 65.71µ ± 14% ~ (p=0.853 n=10) +FRDPeakGain_MIMO_2000-8 2.269m ± 1% 2.260m ± 1% ~ (p=0.739 n=10) +ModelArrayFreqResponse_MIMO_16x200-8 1.178m ± 1% 1.165m ± 1% ~ (p=0.063 n=10) +ModelArrayFreqResponseManualLoop_MIMO_16x200-8 1.159m ± 2% 1.150m ± 1% ~ (p=0.089 n=10) +Step_SISO_N2-8 9.591µ ± 1% 9.765µ ± 1% +1.81% (p=0.000 n=10) +Step_SISO_N10-8 112.8µ ± 1% 104.7µ ± 1% -7.20% (p=0.000 n=10) +Step_SISO_N50-8 7.098m ± 1% 7.055m ± 1% -0.60% (p=0.007 n=10) +Step_MIMO_N10-8 217.5µ ± 1% 211.2µ ± 0% -2.89% (p=0.000 n=10) +StepInfo_SISO_N10-8 3.097µ ± 3% 3.089µ ± 1% ~ (p=0.541 n=10) +StepInfo_MIMO_N10-8 34.59µ ± 2% 34.48µ ± 1% ~ (p=0.123 n=10) +ModelArrayStep_MIMO_16-8 3.097m ± 3% 2.974m ± 1% -3.95% (p=0.000 n=10) +ModelArrayStepManualLoop_MIMO_16-8 3.045m ± 1% 2.942m ± 1% -3.40% (p=0.000 n=10) +Impulse_SISO_N2-8 9.484µ ± 1% 9.691µ ± 1% +2.18% (p=0.000 n=10) +Impulse_SISO_N10-8 112.2µ ± 1% 104.7µ ± 1% -6.71% (p=0.000 n=10) +Impulse_SISO_N50-8 7.073m ± 1% 7.064m ± 0% ~ (p=0.579 n=10) +Impulse_MIMO_N10-8 218.4µ ± 1% 210.7µ ± 1% -3.53% (p=0.000 n=10) +Lsim_SISO_N2-8 26.19µ ± 4% 22.67µ ± 2% -13.45% (p=0.000 n=10) +Lsim_SISO_N10-8 65.91µ ± 2% 61.05µ ± 1% -7.37% (p=0.000 n=10) +Lsim_SISO_N50-8 1.040m ± 1% 1.036m ± 1% -0.39% (p=0.035 n=10) +Lsim_MIMO_N10-8 90.51µ ± 2% 84.41µ ± 1% -6.74% (p=0.000 n=10) +Lsim_SISO_1e4-8 595.6µ ± 1% 544.0µ ± 1% -8.66% (p=0.000 n=10) +Lsim_MIMO_1e4-8 1.639m ± 1% 1.538m ± 1% -6.14% (p=0.000 n=10) +Lsim_Discrete_SISO-8 61.43µ ± 1% 54.90µ ± 1% -10.62% (p=0.000 n=10) +Loopsens_SISO_N2-8 7.455µ ± 3% 7.537µ ± 1% ~ (p=0.247 n=10) +Loopsens_SISO_N10-8 13.11µ ± 2% 13.07µ ± 2% ~ (p=0.529 n=10) +Loopsens_MIMO_N10-8 18.62µ ± 2% 18.05µ ± 2% -3.09% (p=0.000 n=10) +Canon_Modal_N2-8 2.221µ ± 3% 2.197µ ± 2% ~ (p=0.541 n=10) +Canon_Modal_N10-8 20.91µ ± 1% 20.86µ ± 1% ~ (p=0.280 n=10) +Canon_Modal_N50-8 648.6µ ± 2% 643.1µ ± 1% ~ (p=0.075 n=10) +Canon_Modal_N100-8 6.808m ± 1% 6.786m ± 1% ~ (p=0.393 n=10) +Canon_Comp_N2-8 2.548µ ± 1% 2.536µ ± 1% ~ (p=0.314 n=10) +Canon_Comp_N10-8 20.87µ ± 2% 20.87µ ± 1% ~ (p=0.684 n=10) +DescriptorToExplicit_N10-8 3.246µ ± 2% 3.208µ ± 1% -1.17% (p=0.010 n=10) +DescriptorFreqResponse_MIMO_N10x200-8 344.6µ ± 1% 343.8µ ± 1% ~ (p=0.280 n=10) +DescriptorFreqResponse_MIMO_N50x200-8 15.60m ± 4% 15.59m ± 1% ~ (p=0.912 n=10) +FixedInputReduction_N10-8 532.9n ± 2% 508.8n ± 2% -4.51% (p=0.002 n=10) +TunableGainCurrentSystem_4x4-8 200.4n ± 5% 193.8n ± 5% ~ (p=0.089 n=10) +TunableGainSampleCurrentSystem_4x4-8 697.1n ± 2% 676.8n ± 1% -2.92% (p=0.005 n=10) +GeneralizedCurrentSystem_SISO-8 149.9n ± 3% 143.6n ± 7% ~ (p=0.093 n=10) +GeneralizedClosedLoop_SISO-8 2.138µ ± 2% 2.147µ ± 2% ~ (p=0.739 n=10) +TuningGoalWeightedGain_SISO-8 15.05µ ± 3% 14.83µ ± 2% -1.48% (p=0.043 n=10) +TuningGoalWeightedGain_MIMO-8 125.6µ ± 1% 125.6µ ± 1% ~ (p=0.579 n=10) +TuningGoalDynamicWeightedGain_MIMO-8 120.1µ ± 2% 118.6µ ± 2% ~ (p=0.218 n=10) +Systune_SISO-8 72.19µ ± 1% 70.93µ ± 2% -1.74% (p=0.005 n=10) +Systune_MIMO-8 186.2µ ± 2% 179.7µ ± 3% -3.51% (p=0.011 n=10) +PhysicalAssembly_8Components-8 18.39µ ± 1% 17.77µ ± 3% -3.37% (p=0.009 n=10) +ModalTruncate_N50_Order10-8 469.5µ ± 1% 471.7µ ± 2% ~ (p=0.853 n=10) +Passivity_SISO-8 8.231µ ± 3% 8.031µ ± 2% ~ (p=0.075 n=10) +FRDPassivity_MIMO-8 2.446µ ± 1% 2.423µ ± 1% -0.94% (p=0.022 n=10) +Stabsep_N2-8 2.848µ ± 1% 2.820µ ± 2% ~ (p=0.184 n=10) +Stabsep_N10-8 33.37µ ± 1% 33.35µ ± 3% ~ (p=0.971 n=10) +Stabsep_N50-8 1.400m ± 3% 1.397m ± 0% ~ (p=0.280 n=10) +Stabsep_N100-8 8.699m ± 1% 8.678m ± 3% ~ (p=0.739 n=10) +Modsep_N10-8 34.97µ ± 2% 34.45µ ± 2% ~ (p=0.190 n=10) +Modsep_N50-8 1.444m ± 2% 1.446m ± 2% ~ (p=0.912 n=10) +Ssbal_N2-8 261.4n ± 3% 250.0n ± 3% -4.38% (p=0.001 n=10) +Ssbal_N10-8 805.2n ± 2% 783.9n ± 5% ~ (p=0.052 n=10) +Ssbal_N50-8 10.17µ ± 4% 10.02µ ± 4% ~ (p=0.105 n=10) +Prescale_N2-8 667.7n ± 2% 655.2n ± 2% -1.87% (p=0.023 n=10) +Prescale_N10-8 3.049µ ± 5% 3.106µ ± 2% ~ (p=0.118 n=10) +Prescale_N50-8 65.82µ ± 1% 65.66µ ± 1% ~ (p=0.579 n=10) +Sminreal_N2-8 212.1n ± 3% 204.2n ± 6% ~ (p=0.086 n=10) +Sminreal_N10-8 543.4n ± 3% 520.0n ± 4% -4.31% (p=0.011 n=10) +Sminreal_N50-8 4.670µ ± 7% 4.514µ ± 6% ~ (p=0.128 n=10) +Inv_SISO_N2-8 796.9n ± 3% 803.9n ± 3% ~ (p=0.529 n=10) +Inv_SISO_N10-8 1.464µ ± 3% 1.425µ ± 2% ~ (p=0.105 n=10) +Inv_MIMO_N10-8 2.268µ ± 2% 2.261µ ± 2% ~ (p=0.781 n=10) +Covar_SISO_N2-8 1.631µ ± 1% 1.670µ ± 2% +2.33% (p=0.003 n=10) +Covar_SISO_N10-8 9.000µ ± 2% 9.043µ ± 2% ~ (p=0.541 n=10) +Covar_SISO_N50-8 268.1µ ± 1% 267.2µ ± 1% ~ (p=0.353 n=10) +Covar_SISO_N100-8 1.736m ± 2% 1.714m ± 1% ~ (p=0.353 n=10) +Covar_MIMO_N10-8 9.049µ ± 1% 9.031µ ± 2% ~ (p=0.912 n=10) +Pidtune_PI-8 42.43µ ± 1% 42.18µ ± 1% ~ (p=0.143 n=10) +Pidtune_PID-8 42.55µ ± 1% 41.99µ ± 2% ~ (p=0.052 n=10) +Pidtune_PIDF-8 42.66µ ± 1% 42.24µ ± 1% ~ (p=0.123 n=10) +Margin_SISO-8 77.48µ ± 2% 77.30µ ± 1% ~ (p=0.089 n=10) +Bandwidth_SISO-8 53.27µ ± 1% 52.95µ ± 1% ~ (p=0.280 n=10) +DiskMargin_SISO-8 17.18µ ± 2% 17.65µ ± 3% +2.73% (p=0.000 n=10) +geomean 35.78µ 35.39µ -1.07% + + │ baseline.txt │ candidate.txt │ + │ B/op │ B/op vs base │ +SimulateWithDelay_SISO-8 1.492Ki ± 0% 1.492Ki ± 0% ~ (p=1.000 n=10) +SimulateWithDelay_MIMO-8 11.48Ki ± 0% 11.48Ki ± 0% ~ (p=1.000 n=10) +BilinearDiscretize-8 14.58Ki ± 0% 14.58Ki ± 0% ~ (p=0.863 n=10) +TransferFunction_MIMO-8 72.66Ki ± 0% 72.66Ki ± 0% ~ (p=0.469 n=10) +Reduce-8 52.43Ki ± 0% 52.45Ki ± 0% ~ (p=0.591 n=10) +AbsorbDelay-8 4.227Ki ± 0% 4.227Ki ± 0% ~ (p=1.000 n=10) ¹ +DiscretizeZOH-8 21.66Ki ± 0% 21.66Ki ± 0% ~ (p=0.541 n=10) +DenseNorm-8 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ +Series-8 5.000Ki ± 0% 5.000Ki ± 0% ~ (p=1.000 n=10) ¹ +Parallel-8 4.172Ki ± 0% 4.172Ki ± 0% ~ (p=1.000 n=10) ¹ +Feedback-8 8.503Ki ± 0% 8.503Ki ± 0% ~ (p=1.000 n=10) +FeedbackLFT-8 46.94Ki ± 0% 46.94Ki ± 0% ~ (p=0.098 n=10) +Append-8 5.109Ki ± 0% 5.109Ki ± 0% ~ (p=1.000 n=10) ¹ +FreqResponse-8 65.33Ki ± 0% 65.33Ki ± 0% ~ (p=0.197 n=10) +FreqResponse_ShortSweep-8 3.031Ki ± 0% 3.031Ki ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N4_W2/StateSpace-8 576.0 ± 0% 576.0 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N4_W2/TransferFunction-8 44.35Ki ± 0% 44.35Ki ± 0% ~ (p=0.170 n=10) +FrequencySweepKernels/N4_W8/StateSpace-8 960.0 ± 0% 960.0 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N4_W8/TransferFunction-8 44.72Ki ± 0% 44.73Ki ± 0% ~ (p=0.136 n=10) +FrequencySweepKernels/N4_W32/StateSpace-8 2.438Ki ± 0% 2.438Ki ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N4_W32/TransferFunction-8 46.23Ki ± 0% 46.23Ki ± 0% ~ (p=0.926 n=10) +FrequencySweepKernels/N4_W100/StateSpace-8 6.812Ki ± 0% 6.812Ki ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N4_W100/TransferFunction-8 50.60Ki ± 0% 50.61Ki ± 0% ~ (p=0.076 n=10) +FrequencySweepKernels/N10_W2/StateSpace-8 2.344Ki ± 0% 2.344Ki ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N10_W2/TransferFunction-8 55.84Ki ± 0% 55.85Ki ± 0% ~ (p=0.898 n=10) +FrequencySweepKernels/N10_W8/StateSpace-8 2.906Ki ± 0% 2.906Ki ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N10_W8/TransferFunction-8 56.41Ki ± 0% 56.41Ki ± 0% ~ (p=0.255 n=10) +FrequencySweepKernels/N10_W32/StateSpace-8 5.156Ki ± 0% 5.156Ki ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N10_W32/TransferFunction-8 58.68Ki ± 0% 58.68Ki ± 0% ~ (p=0.671 n=10) +FrequencySweepKernels/N10_W100/StateSpace-8 11.66Ki ± 0% 11.66Ki ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N10_W100/TransferFunction-8 65.20Ki ± 0% 65.21Ki ± 0% ~ (p=0.288 n=10) +Bode-8 98.82Ki ± 0% 98.83Ki ± 0% ~ (p=0.324 n=10) +Zeros_SISO-8 45.75Ki ± 0% 45.75Ki ± 0% ~ (p=0.123 n=10) +Zeros_MIMO-8 45.74Ki ± 0% 45.74Ki ± 0% ~ (p=0.664 n=10) +Zeros_NonSquare-8 6.734Ki ± 0% 6.734Ki ± 0% ~ (p=1.000 n=10) ¹ +ControllabilityStaircase-8 22.15Ki ± 0% 22.15Ki ± 0% ~ (p=0.839 n=10) +SimulateNoDelay-8 34.38Ki ± 0% 32.60Ki ± 0% -5.17% (p=0.000 n=10) +ThiranDelay-8 808.0 ± 0% 808.0 ± 0% ~ (p=1.000 n=10) ¹ +PadeDelay-8 1.023Ki ± 0% 1.023Ki ± 0% ~ (p=1.000 n=10) ¹ +DecomposeIODelay-8 368.0 ± 0% 368.0 ± 0% ~ (p=1.000 n=10) ¹ +PullDelaysToLFT-8 3.867Ki ± 0% 3.867Ki ± 0% ~ (p=1.000 n=10) ¹ +GetDelayModel-8 4.312Ki ± 0% 4.312Ki ± 0% ~ (p=1.000 n=10) ¹ +SetDelayModel-8 1.484Ki ± 0% 1.484Ki ± 0% ~ (p=1.000 n=10) ¹ +AbsorbInternalDelay-8 4.859Ki ± 0% 4.859Ki ± 0% ~ (p=1.000 n=10) ¹ +DiscretizeWithOpts_Thiran-8 3.591Ki ± 0% 3.591Ki ± 0% ~ (p=1.000 n=10) ¹ +DiscretizeWithOpts_IODelayThiran-8 3.771Ki ± 0% 3.771Ki ± 0% -0.03% (p=0.005 n=10) +FeedbackApproximatedDelays-8 11.39Ki ± 0% 11.39Ki ± 0% ~ (p=0.437 n=10) +SimulateInternalDelay-8 2.000Ki ± 0% 2.000Ki ± 0% ~ (p=1.000 n=10) ¹ +FreqResponseWithDelay-8 52.06Ki ± 0% 52.05Ki ± 0% -0.01% (p=0.021 n=10) +PadeSystem-8 21.12Ki ± 0% 21.12Ki ± 0% ~ (p=0.365 n=10) +ZeroDelayApprox-8 1.556Ki ± 0% 1.556Ki ± 0% ~ (p=1.000 n=10) ¹ +IsStrictlyUpperTriangular-8 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ +FreqResponseLFT-8 9.281Ki ± 0% 9.281Ki ± 0% ~ (p=1.000 n=10) ¹ +Simulate_DCMotor-8 19.68Ki ± 0% 16.28Ki ± 0% -17.28% (p=0.000 n=10) +FreqResponse_B747Lateral-8 57.42Ki ± 0% 57.40Ki ± 0% -0.02% (p=0.000 n=10) +Simulate_MassSpringDamper-8 10.125Ki ± 0% 8.375Ki ± 0% -17.28% (p=0.000 n=10) +DiscretizeAndSimulate_B747Longitudinal-8 7.516Ki ± 0% 6.578Ki ± 0% -12.47% (p=0.000 n=10) +Simulate_Large-8 84.52Ki ± 0% 81.14Ki ± 0% -3.99% (p=0.000 n=10) +FeedbackAndSimulate-8 7.547Ki ± 0% 6.609Ki ± 0% -12.42% (p=0.000 n=10) +Bode_LargeMIMO-8 233.9Ki ± 0% 233.9Ki ± 0% ~ (p=0.481 n=10) +Lyap_N10-8 7.031Ki ± 0% 7.031Ki ± 0% ~ (p=1.000 n=10) ¹ +Lyap_N50-8 122.1Ki ± 0% 122.1Ki ± 0% ~ (p=1.000 n=10) +Lyap_N100-8 372.9Ki ± 0% 373.5Ki ± 0% +0.16% (p=0.000 n=10) +DLyap_N10-8 7.367Ki ± 0% 7.367Ki ± 0% ~ (p=1.000 n=10) ¹ +DLyap_N50-8 124.5Ki ± 0% 124.5Ki ± 0% ~ (p=0.474 n=10) +DLyap_N100-8 439.2Ki ± 0% 439.6Ki ± 0% +0.08% (p=0.000 n=10) +Care_N10_M2-8 1.788Ki ± 0% 1.789Ki ± 0% ~ (p=1.000 n=10) +Care_N50_M5-8 45.73Ki ± 0% 45.73Ki ± 0% ~ (p=1.000 n=10) ¹ +Care_N100_M5-8 172.3Ki ± 1% 170.8Ki ± 1% -0.91% (p=0.011 n=10) +Dare_N10_M2-8 1.703Ki ± 0% 1.702Ki ± 0% ~ (p=0.800 n=10) +Dare_N50_M5-8 46.71Ki ± 0% 46.71Ki ± 0% ~ (p=1.000 n=10) ¹ +Dare_N100_M5-8 299.7Ki ± 1% 298.7Ki ± 1% -0.34% (p=0.017 n=10) +Gram-8 11.76Ki ± 0% 11.76Ki ± 0% ~ (p=0.111 n=10) +Ctrb-8 1.812Ki ± 0% 1.812Ki ± 0% ~ (p=1.000 n=10) ¹ +H2Norm-8 11.79Ki ± 0% 11.79Ki ± 0% ~ (p=0.754 n=10) +HSV-8 28.67Ki ± 0% 28.66Ki ± 0% ~ (p=0.322 n=10) +HinfNorm-8 145.4Ki ± 0% 145.4Ki ± 0% ~ (p=0.868 n=10) +H2Syn_Simple-8 13.59Ki ± 0% 13.59Ki ± 0% ~ (p=0.254 n=10) +HinfSyn_Simple-8 160.9Ki ± 0% 160.9Ki ± 0% -0.01% (p=0.037 n=10) +Balreal-8 33.98Ki ± 0% 33.98Ki ± 0% ~ (p=0.323 n=10) +Balred-8 34.89Ki ± 0% 34.89Ki ± 0% ~ (p=0.210 n=10) +Place_N10_M2-8 6.305Ki ± 0% 6.305Ki ± 0% ~ (p=1.000 n=10) ¹ +Place_N50_M5-8 90.75Ki ± 0% 90.75Ki ± 0% ~ (p=1.000 n=10) +Place_N100_M5-8 226.4Ki ± 0% 226.4Ki ± 0% ~ (p=0.592 n=10) +Acker_N5-8 1.540Ki ± 0% 1.540Ki ± 0% ~ (p=1.000 n=10) ¹ +Acker_N10-8 4.959Ki ± 0% 4.959Ki ± 0% ~ (p=1.000 n=10) +Lqr_N10_M2-8 1.786Ki ± 0% 1.786Ki ± 0% ~ (p=0.480 n=10) +Lqr_N50_M5-8 45.73Ki ± 0% 45.73Ki ± 0% ~ (p=1.000 n=10) ¹ +Lqr_N100_M5-8 173.1Ki ± 1% 168.9Ki ± 1% -2.44% (p=0.000 n=10) +Kalman_N10_M2_P3-8 7.628Ki ± 0% 7.628Ki ± 0% ~ (p=1.000 n=10) +Kalman_N50_M5_P5-8 170.5Ki ± 0% 170.5Ki ± 0% ~ (p=1.000 n=10) ¹ +Kalman_N100_M5_P5-8 478.1Ki ± 0% 473.3Ki ± 0% -1.00% (p=0.000 n=10) +Estim_N10_M2_P3-8 7.078Ki ± 0% 7.078Ki ± 0% ~ (p=1.000 n=10) ¹ +Estim_N50_M5_P5-8 110.3Ki ± 0% 110.3Ki ± 0% ~ (p=1.000 n=10) +Estim_N100_M5_P5-8 380.3Ki ± 0% 379.3Ki ± 0% -0.25% (p=0.000 n=10) +Reg_N10_M2_P3-8 6.438Ki ± 0% 6.438Ki ± 0% ~ (p=1.000 n=10) ¹ +Reg_N50_M5_P5-8 111.4Ki ± 0% 111.4Ki ± 0% ~ (p=1.000 n=10) ¹ +Reg_N100_M5_P5-8 424.2Ki ± 0% 421.4Ki ± 0% -0.66% (p=0.000 n=10) +PolyRoots_N10-8 3.050Ki ± 0% 3.050Ki ± 0% ~ (p=0.998 n=10) +ZPKEval_SISO-8 40.00 ± 0% 40.00 ± 0% ~ (p=1.000 n=10) ¹ +ZPKFreqResponse_SISO_100-8 1.875Ki ± 0% 1.875Ki ± 0% ~ (p=1.000 n=10) ¹ +ZPKToTF_SISO_N10-8 1.852Ki ± 0% 1.852Ki ± 0% ~ (p=1.000 n=10) ¹ +TFToZPK_SISO_N10-8 6.099Ki ± 0% 6.100Ki ± 0% ~ (p=0.150 n=10) +SSToZPK_SISO-8 47.00Ki ± 0% 47.00Ki ± 0% ~ (p=0.305 n=10) +ZPKToSS_SISO-8 1.445Ki ± 0% 1.445Ki ± 0% ~ (p=1.000 n=10) ¹ +PolyFromComplexRoots_N20-8 528.0 ± 0% 528.0 ± 0% ~ (p=1.000 n=10) ¹ +Sigma_SISO-8 48.54Ki ± 0% 48.53Ki ± 0% ~ (p=0.065 n=10) +Sigma_MIMO-8 62.29Ki ± 0% 62.28Ki ± 0% -0.02% (p=0.003 n=10) +Nichols-8 50.46Ki ± 0% 50.45Ki ± 0% -0.01% (p=0.037 n=10) +Nyquist-8 95.45Ki ± 0% 95.44Ki ± 0% -0.01% (p=0.007 n=10) +FreqRespEst_SISO-8 25.94Ki ± 0% 25.94Ki ± 0% ~ (p=1.000 n=10) ¹ +FreqRespEst_MIMO-8 65.00Ki ± 0% 65.00Ki ± 0% ~ (p=1.000 n=10) ¹ +BlkDiag-8 9.812Ki ± 0% 9.812Ki ± 0% ~ (p=1.000 n=10) ¹ +Connect-8 13.87Ki ± 0% 13.87Ki ± 0% -0.01% (p=0.002 n=10) +LFT-8 10.69Ki ± 0% 10.69Ki ± 0% ~ (p=0.087 n=10) +LFT_Large-8 35.32Ki ± 0% 35.32Ki ± 0% -0.00% (p=0.001 n=10) +D2C_ZOH_N2-8 2.172Ki ± 0% 2.171Ki ± 0% ~ (p=0.370 n=10) +D2C_ZOH_N5-8 6.626Ki ± 0% 6.626Ki ± 0% ~ (p=0.985 n=10) +D2C_ZOH_N20-8 77.72Ki ± 0% 77.62Ki ± 0% ~ (p=0.052 n=10) +D2C_ZOH_N50-8 463.9Ki ± 0% 463.7Ki ± 0% ~ (p=0.247 n=10) +D2C_Tustin_N20-8 14.85Ki ± 0% 14.85Ki ± 0% ~ (p=0.168 n=10) +MatLog_N20-8 64.57Ki ± 0% 64.38Ki ± 0% -0.29% (p=0.007 n=10) +MatLog_N50-8 391.3Ki ± 0% 391.0Ki ± 0% ~ (p=0.481 n=10) +DCGain_StableMIMO_N10_M4_P6-8 1.823Ki ± 0% 1.822Ki ± 0% ~ (p=0.170 n=10) +DCGain_IntegratorMIMO_N10_M4_P6-8 5.267Ki ± 0% 5.267Ki ± 0% ~ (p=1.000 n=10) +DCGain_IntegratorMIMO_N40_M8_P8-8 51.72Ki ± 0% 51.72Ki ± 0% ~ (p=0.781 n=10) +SystemFRD_SISO_200-8 59.60Ki ± 0% 59.60Ki ± 0% -0.01% (p=0.039 n=10) +SystemFRD_SISO_2000-8 218.2Ki ± 0% 218.2Ki ± 0% ~ (p=0.128 n=10) +SystemFRD_SISO_10000-8 922.6Ki ± 0% 922.7Ki ± 0% +0.01% (p=0.000 n=10) +SystemFRD_MIMO_200-8 164.5Ki ± 0% 164.5Ki ± 0% ~ (p=0.289 n=10) +SystemFRD_MIMO_2000-8 1.045Mi ± 0% 1.045Mi ± 0% ~ (p=0.093 n=10) +SystemFRD_MIMO_10000-8 4.970Mi ± 0% 4.970Mi ± 0% ~ (p=0.971 n=10) +SystemFRD_Large_2000-8 2.134Mi ± 0% 2.133Mi ± 0% ~ (p=0.342 n=10) +FRDSigma_SISO_200-8 3.609Ki ± 0% 3.609Ki ± 0% ~ (p=1.000 n=10) ¹ +FRDSigma_SISO_2000-8 32.11Ki ± 0% 32.11Ki ± 0% ~ (p=1.000 n=10) ¹ +FRDSigma_MIMO_200-8 8.805Ki ± 0% 8.805Ki ± 0% ~ (p=1.000 n=10) ¹ +FRDSigma_MIMO_2000-8 66.30Ki ± 0% 66.30Ki ± 0% ~ (p=1.000 n=10) ¹ +FRDSigma_MIMO_10000-8 322.3Ki ± 0% 322.3Ki ± 0% ~ (p=1.000 n=10) +FRDSigma_Large_2000-8 83.04Ki ± 0% 83.04Ki ± 0% ~ (p=1.000 n=10) +FRDMargin_200-8 5.422Ki ± 0% 5.422Ki ± 0% ~ (p=1.000 n=10) ¹ +FRDMargin_2000-8 48.17Ki ± 0% 48.17Ki ± 0% ~ (p=1.000 n=10) ¹ +FRDMargin_10000-8 240.2Ki ± 0% 240.2Ki ± 0% ~ (p=0.087 n=10) +FRDMargin_NegGM_2000-8 48.17Ki ± 0% 48.17Ki ± 0% ~ (p=1.000 n=10) ¹ +FRDSigma_MIMO5x5_2000-8 100.2Ki ± 0% 100.2Ki ± 0% ~ (p=1.000 n=10) +FRDSeries_SISO_200-8 14.48Ki ± 0% 14.48Ki ± 0% ~ (p=1.000 n=10) ¹ +FRDSeries_SISO_2000-8 144.1Ki ± 0% 144.1Ki ± 0% ~ (p=1.000 n=10) ¹ +FRDSeries_MIMO_200-8 54.61Ki ± 0% 54.61Ki ± 0% ~ (p=1.000 n=10) ¹ +FRDSeries_MIMO_2000-8 496.1Ki ± 0% 496.1Ki ± 0% ~ (p=0.266 n=10) +FRDSeries_MIMO_10000-8 2.375Mi ± 0% 2.375Mi ± 0% -0.00% (p=0.042 n=10) +FRDParallel_SISO_2000-8 144.1Ki ± 0% 144.1Ki ± 0% ~ (p=1.000 n=10) +FRDParallel_MIMO_2000-8 496.1Ki ± 0% 496.1Ki ± 0% ~ (p=0.908 n=10) +FRDFeedback_SISO_200-8 14.48Ki ± 0% 14.48Ki ± 0% ~ (p=1.000 n=10) ¹ +FRDFeedback_SISO_2000-8 144.1Ki ± 0% 144.1Ki ± 0% ~ (p=1.000 n=10) +FRDFeedback_MIMO_200-8 55.31Ki ± 0% 55.31Ki ± 0% ~ (p=1.000 n=10) ¹ +FRDFeedback_MIMO_2000-8 496.8Ki ± 0% 496.8Ki ± 0% ~ (p=1.000 n=10) ¹ +FRDFeedback_MIMO_10000-8 2.376Mi ± 0% 2.376Mi ± 0% ~ (p=0.303 n=10) +FRDFeedback_MIMO8x8_2000-8 2.388Mi ± 0% 2.388Mi ± 0% ~ (p=1.000 n=10) +FRDAbs_MIMO_2000-8 632.1Ki ± 0% 632.1Ki ± 0% ~ (p=0.051 n=10) +FRDSelectFrequencies_MIMO_2000-8 320.1Ki ± 0% 320.1Ki ± 0% ~ (p=0.086 n=10) +FRDPeakGain_MIMO_2000-8 2.219Ki ± 0% 2.219Ki ± 0% ~ (p=1.000 n=10) ¹ +ModelArrayFreqResponse_MIMO_16x200-8 1.338Mi ± 0% 1.337Mi ± 0% ~ (p=0.739 n=10) +ModelArrayFreqResponseManualLoop_MIMO_16x200-8 1.335Mi ± 0% 1.335Mi ± 0% ~ (p=0.529 n=10) +Step_SISO_N2-8 8.861Ki ± 0% 8.860Ki ± 0% -0.01% (p=0.005 n=10) +Step_SISO_N10-8 43.71Ki ± 0% 40.91Ki ± 0% -6.41% (p=0.000 n=10) +Step_SISO_N50-8 297.1Ki ± 2% 281.2Ki ± 1% -5.37% (p=0.000 n=10) +Step_MIMO_N10-8 96.29Ki ± 0% 96.27Ki ± 0% -0.02% (p=0.042 n=10) +StepInfo_SISO_N10-8 112.0 ± 0% 112.0 ± 0% ~ (p=1.000 n=10) ¹ +StepInfo_MIMO_N10-8 816.0 ± 0% 816.0 ± 0% ~ (p=1.000 n=10) ¹ +ModelArrayStep_MIMO_16-8 1.317Mi ± 0% 1.317Mi ± 0% ~ (p=0.353 n=10) +ModelArrayStepManualLoop_MIMO_16-8 1.316Mi ± 0% 1.316Mi ± 0% ~ (p=0.529 n=10) +Impulse_SISO_N2-8 8.861Ki ± 0% 8.860Ki ± 0% ~ (p=0.332 n=10) +Impulse_SISO_N10-8 43.71Ki ± 0% 40.92Ki ± 0% -6.39% (p=0.000 n=10) +Impulse_SISO_N50-8 293.3Ki ± 3% 281.6Ki ± 1% -4.00% (p=0.001 n=10) +Impulse_MIMO_N10-8 96.29Ki ± 0% 96.28Ki ± 0% ~ (p=0.403 n=10) +Lsim_SISO_N2-8 15.35Ki ± 0% 13.59Ki ± 0% -11.45% (p=0.000 n=10) +Lsim_SISO_N10-8 19.40Ki ± 0% 17.64Ki ± 0% -9.06% (p=0.000 n=10) +Lsim_SISO_N50-8 102.4Ki ± 0% 100.4Ki ± 0% -2.01% (p=0.000 n=10) +Lsim_MIMO_N10-8 53.16Ki ± 0% 51.40Ki ± 0% -3.32% (p=0.000 n=10) +Lsim_SISO_1e4-8 274.9Ki ± 0% 242.6Ki ± 0% -11.76% (p=0.000 n=10) +Lsim_MIMO_1e4-8 1004.9Ki ± 0% 970.5Ki ± 0% -3.42% (p=0.000 n=10) +Lsim_Discrete_SISO-8 27.81Ki ± 0% 24.44Ki ± 0% -12.13% (p=0.000 n=10) +Loopsens_SISO_N2-8 10.49Ki ± 0% 10.49Ki ± 0% -0.01% (p=0.000 n=10) +Loopsens_SISO_N10-8 32.78Ki ± 0% 32.78Ki ± 0% -0.01% (p=0.000 n=10) +Loopsens_MIMO_N10-8 42.75Ki ± 0% 42.74Ki ± 0% -0.02% (p=0.000 n=10) +Canon_Modal_N2-8 1.511Ki ± 0% 1.511Ki ± 0% -0.03% (p=0.033 n=10) +Canon_Modal_N10-8 11.17Ki ± 0% 11.17Ki ± 0% ~ (p=0.065 n=10) +Canon_Modal_N50-8 211.0Ki ± 0% 210.8Ki ± 0% ~ (p=0.481 n=10) +Canon_Modal_N100-8 1.095Mi ± 1% 1.095Mi ± 1% ~ (p=0.781 n=10) +Canon_Comp_N2-8 1.925Ki ± 0% 1.925Ki ± 0% ~ (p=1.000 n=10) ¹ +Canon_Comp_N10-8 13.21Ki ± 0% 13.20Ki ± 0% ~ (p=0.052 n=10) +DescriptorToExplicit_N10-8 4.936Ki ± 0% 4.935Ki ± 0% -0.02% (p=0.003 n=10) +DescriptorFreqResponse_MIMO_N10x200-8 34.48Ki ± 0% 34.48Ki ± 0% ~ (p=1.000 n=10) ¹ +DescriptorFreqResponse_MIMO_N50x200-8 124.5Ki ± 0% 124.5Ki ± 0% ~ (p=1.000 n=10) ¹ +FixedInputReduction_N10-8 1.781Ki ± 0% 1.781Ki ± 0% ~ (p=1.000 n=10) ¹ +TunableGainCurrentSystem_4x4-8 784.0 ± 0% 784.0 ± 0% ~ (p=1.000 n=10) ¹ +TunableGainSampleCurrentSystem_4x4-8 1.781Ki ± 0% 1.781Ki ± 0% ~ (p=1.000 n=10) ¹ +GeneralizedCurrentSystem_SISO-8 544.0 ± 0% 544.0 ± 0% ~ (p=1.000 n=10) ¹ +GeneralizedClosedLoop_SISO-8 3.529Ki ± 0% 3.529Ki ± 0% ~ (p=1.000 n=10) ¹ +TuningGoalWeightedGain_SISO-8 46.33Ki ± 0% 46.32Ki ± 0% -0.03% (p=0.000 n=10) +TuningGoalWeightedGain_MIMO-8 67.61Ki ± 0% 67.60Ki ± 0% ~ (p=0.468 n=10) +TuningGoalDynamicWeightedGain_MIMO-8 178.0Ki ± 0% 177.9Ki ± 0% -0.03% (p=0.002 n=10) +Systune_SISO-8 241.3Ki ± 0% 241.3Ki ± 0% -0.02% (p=0.000 n=10) +Systune_MIMO-8 478.1Ki ± 0% 478.0Ki ± 0% -0.02% (p=0.000 n=10) +PhysicalAssembly_8Components-8 57.23Ki ± 0% 57.23Ki ± 0% -0.00% (p=0.000 n=10) +ModalTruncate_N50_Order10-8 146.8Ki ± 0% 146.8Ki ± 0% ~ (p=0.582 n=10) +Passivity_SISO-8 22.93Ki ± 0% 22.92Ki ± 0% -0.02% (p=0.000 n=10) +FRDPassivity_MIMO-8 1.828Ki ± 0% 1.828Ki ± 0% ~ (p=1.000 n=10) ¹ +Stabsep_N2-8 3.017Ki ± 0% 3.016Ki ± 0% -0.03% (p=0.038 n=10) +Stabsep_N10-8 29.35Ki ± 0% 29.34Ki ± 0% ~ (p=0.671 n=10) +Stabsep_N50-8 636.0Ki ± 0% 634.3Ki ± 0% ~ (p=0.089 n=10) +Stabsep_N100-8 2.526Mi ± 1% 2.532Mi ± 1% ~ (p=0.075 n=10) +Modsep_N10-8 29.31Ki ± 0% 29.31Ki ± 0% ~ (p=0.985 n=10) +Modsep_N50-8 642.3Ki ± 1% 641.5Ki ± 0% ~ (p=0.853 n=10) +Ssbal_N2-8 704.0 ± 0% 704.0 ± 0% ~ (p=1.000 n=10) ¹ +Ssbal_N10-8 2.703Ki ± 0% 2.703Ki ± 0% ~ (p=1.000 n=10) ¹ +Ssbal_N50-8 42.72Ki ± 0% 42.72Ki ± 0% ~ (p=1.000 n=10) ¹ +Prescale_N2-8 896.0 ± 0% 896.0 ± 0% ~ (p=1.000 n=10) ¹ +Prescale_N10-8 2.234Ki ± 0% 2.234Ki ± 0% ~ (p=1.000 n=10) ¹ +Prescale_N50-8 24.12Ki ± 0% 24.12Ki ± 0% -0.00% (p=0.012 n=10) +Sminreal_N2-8 592.0 ± 0% 592.0 ± 0% ~ (p=1.000 n=10) ¹ +Sminreal_N10-8 1.859Ki ± 0% 1.859Ki ± 0% ~ (p=1.000 n=10) ¹ +Sminreal_N50-8 23.30Ki ± 0% 23.30Ki ± 0% ~ (p=1.000 n=10) ¹ +Inv_SISO_N2-8 1.157Ki ± 0% 1.157Ki ± 0% ~ (p=1.000 n=10) ¹ +Inv_SISO_N10-8 4.004Ki ± 0% 4.004Ki ± 0% ~ (p=1.000 n=10) ¹ +Inv_MIMO_N10-8 4.975Ki ± 0% 4.974Ki ± 0% -0.02% (p=0.000 n=10) +Covar_SISO_N2-8 1.485Ki ± 0% 1.485Ki ± 0% ~ (p=1.000 n=10) ¹ +Covar_SISO_N10-8 1.791Ki ± 0% 1.791Ki ± 0% ~ (p=1.000 n=10) +Covar_SISO_N50-8 23.81Ki ± 1% 23.81Ki ± 1% ~ (p=0.562 n=10) +Covar_SISO_N100-8 117.0Ki ± 1% 116.6Ki ± 0% ~ (p=0.867 n=10) +Covar_MIMO_N10-8 1.791Ki ± 0% 1.791Ki ± 0% ~ (p=0.650 n=10) +Pidtune_PI-8 52.64Ki ± 0% 52.63Ki ± 0% -0.01% (p=0.010 n=10) +Pidtune_PID-8 52.64Ki ± 0% 52.63Ki ± 0% -0.01% (p=0.049 n=10) +Pidtune_PIDF-8 52.64Ki ± 0% 52.63Ki ± 0% -0.01% (p=0.009 n=10) +Margin_SISO-8 75.30Ki ± 0% 75.30Ki ± 0% ~ (p=0.050 n=10) +Bandwidth_SISO-8 18.04Ki ± 0% 18.04Ki ± 0% -0.01% (p=0.048 n=10) +DiskMargin_SISO-8 5.989Ki ± 0% 5.989Ki ± 0% ~ (p=1.000 n=10) +geomean ² -0.68% ² +¹ all samples are equal +² summaries must be >0 to compute geomean + + │ baseline.txt │ candidate.txt │ + │ allocs/op │ allocs/op vs base │ +SimulateWithDelay_SISO-8 19.00 ± 0% 19.00 ± 0% ~ (p=1.000 n=10) ¹ +SimulateWithDelay_MIMO-8 20.00 ± 0% 20.00 ± 0% ~ (p=1.000 n=10) ¹ +BilinearDiscretize-8 32.00 ± 0% 32.00 ± 0% ~ (p=1.000 n=10) ¹ +TransferFunction_MIMO-8 162.0 ± 0% 162.0 ± 0% ~ (p=1.000 n=10) ¹ +Reduce-8 170.0 ± 0% 170.0 ± 0% ~ (p=1.000 n=10) ¹ +AbsorbDelay-8 32.00 ± 0% 32.00 ± 0% ~ (p=1.000 n=10) ¹ +DiscretizeZOH-8 28.00 ± 0% 28.00 ± 0% ~ (p=1.000 n=10) ¹ +DenseNorm-8 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ +Series-8 15.00 ± 0% 15.00 ± 0% ~ (p=1.000 n=10) ¹ +Parallel-8 9.000 ± 0% 9.000 ± 0% ~ (p=1.000 n=10) ¹ +Feedback-8 63.00 ± 0% 63.00 ± 0% ~ (p=1.000 n=10) ¹ +FeedbackLFT-8 273.0 ± 0% 273.0 ± 0% ~ (p=1.000 n=10) ¹ +Append-8 9.000 ± 0% 9.000 ± 0% ~ (p=1.000 n=10) ¹ +FreqResponse-8 126.0 ± 0% 126.0 ± 0% ~ (p=1.000 n=10) ¹ +FreqResponse_ShortSweep-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N4_W2/StateSpace-8 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N4_W2/TransferFunction-8 77.00 ± 0% 77.00 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N4_W8/StateSpace-8 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N4_W8/TransferFunction-8 77.00 ± 0% 77.00 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N4_W32/StateSpace-8 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N4_W32/TransferFunction-8 77.00 ± 0% 77.00 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N4_W100/StateSpace-8 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N4_W100/TransferFunction-8 77.00 ± 0% 77.00 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N10_W2/StateSpace-8 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N10_W2/TransferFunction-8 125.0 ± 0% 125.0 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N10_W8/StateSpace-8 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N10_W8/TransferFunction-8 125.0 ± 0% 125.0 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N10_W32/StateSpace-8 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N10_W32/TransferFunction-8 125.0 ± 0% 125.0 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N10_W100/StateSpace-8 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=10) ¹ +FrequencySweepKernels/N10_W100/TransferFunction-8 125.0 ± 0% 125.0 ± 0% ~ (p=1.000 n=10) ¹ +Bode-8 158.0 ± 0% 158.0 ± 0% ~ (p=1.000 n=10) ¹ +Zeros_SISO-8 102.0 ± 0% 102.0 ± 0% ~ (p=1.000 n=10) ¹ +Zeros_MIMO-8 53.00 ± 0% 53.00 ± 0% ~ (p=1.000 n=10) ¹ +Zeros_NonSquare-8 63.00 ± 0% 63.00 ± 0% ~ (p=1.000 n=10) ¹ +ControllabilityStaircase-8 109.0 ± 0% 109.0 ± 0% ~ (p=1.000 n=10) ¹ +SimulateNoDelay-8 29.00 ± 0% 11.00 ± 0% -62.07% (p=0.000 n=10) +ThiranDelay-8 16.00 ± 0% 16.00 ± 0% ~ (p=1.000 n=10) ¹ +PadeDelay-8 16.00 ± 0% 16.00 ± 0% ~ (p=1.000 n=10) ¹ +DecomposeIODelay-8 7.000 ± 0% 7.000 ± 0% ~ (p=1.000 n=10) ¹ +PullDelaysToLFT-8 44.00 ± 0% 44.00 ± 0% ~ (p=1.000 n=10) ¹ +GetDelayModel-8 44.00 ± 0% 44.00 ± 0% ~ (p=1.000 n=10) ¹ +SetDelayModel-8 21.00 ± 0% 21.00 ± 0% ~ (p=1.000 n=10) ¹ +AbsorbInternalDelay-8 40.00 ± 0% 40.00 ± 0% ~ (p=1.000 n=10) ¹ +DiscretizeWithOpts_Thiran-8 72.00 ± 0% 72.00 ± 0% ~ (p=1.000 n=10) ¹ +DiscretizeWithOpts_IODelayThiran-8 81.00 ± 0% 81.00 ± 0% ~ (p=1.000 n=10) ¹ +FeedbackApproximatedDelays-8 82.00 ± 0% 82.00 ± 0% ~ (p=1.000 n=10) ¹ +SimulateInternalDelay-8 11.00 ± 0% 11.00 ± 0% ~ (p=1.000 n=10) ¹ +FreqResponseWithDelay-8 87.00 ± 0% 87.00 ± 0% ~ (p=1.000 n=10) ¹ +PadeSystem-8 173.0 ± 0% 173.0 ± 0% ~ (p=1.000 n=10) ¹ +ZeroDelayApprox-8 26.00 ± 0% 26.00 ± 0% ~ (p=1.000 n=10) ¹ +IsStrictlyUpperTriangular-8 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ +FreqResponseLFT-8 17.00 ± 0% 17.00 ± 0% ~ (p=1.000 n=10) ¹ +Simulate_DCMotor-8 45.00 ± 0% 11.00 ± 0% -75.56% (p=0.000 n=10) +FreqResponse_B747Lateral-8 72.00 ± 0% 72.00 ± 0% ~ (p=1.000 n=10) ¹ +Simulate_MassSpringDamper-8 29.00 ± 0% 11.00 ± 0% -62.07% (p=0.000 n=10) +DiscretizeAndSimulate_B747Longitudinal-8 21.00 ± 0% 11.00 ± 0% -47.62% (p=0.000 n=10) +Simulate_Large-8 45.00 ± 0% 11.00 ± 0% -75.56% (p=0.000 n=10) +FeedbackAndSimulate-8 21.00 ± 0% 11.00 ± 0% -47.62% (p=0.000 n=10) +Bode_LargeMIMO-8 258.0 ± 0% 258.0 ± 0% ~ (p=1.000 n=10) +Lyap_N10-8 22.00 ± 0% 22.00 ± 0% ~ (p=1.000 n=10) ¹ +Lyap_N50-8 63.00 ± 0% 63.00 ± 0% ~ (p=1.000 n=10) ¹ +Lyap_N100-8 363.0 ± 0% 364.0 ± 0% +0.28% (p=0.000 n=10) +DLyap_N10-8 26.00 ± 0% 26.00 ± 0% ~ (p=1.000 n=10) ¹ +DLyap_N50-8 95.00 ± 0% 95.00 ± 0% ~ (p=1.000 n=10) ¹ +DLyap_N100-8 1.619k ± 0% 1.619k ± 0% ~ (p=0.474 n=10) +Care_N10_M2-8 37.00 ± 0% 37.00 ± 0% ~ (p=1.000 n=10) ¹ +Care_N50_M5-8 758.0 ± 0% 758.0 ± 0% ~ (p=1.000 n=10) ¹ +Care_N100_M5-8 2.066k ± 0% 2.023k ± 0% -2.08% (p=0.000 n=10) +Dare_N10_M2-8 34.00 ± 0% 34.00 ± 0% ~ (p=1.000 n=10) ¹ +Dare_N50_M5-8 781.0 ± 0% 781.0 ± 0% ~ (p=1.000 n=10) ¹ +Dare_N100_M5-8 4.051k ± 0% 4.008k ± 0% -1.06% (p=0.000 n=10) +Gram-8 59.00 ± 0% 59.00 ± 0% ~ (p=1.000 n=10) ¹ +Ctrb-8 2.000 ± 0% 2.000 ± 0% ~ (p=1.000 n=10) ¹ +H2Norm-8 56.00 ± 0% 56.00 ± 0% ~ (p=1.000 n=10) ¹ +HSV-8 93.00 ± 0% 93.00 ± 0% ~ (p=1.000 n=10) ¹ +HinfNorm-8 1.446k ± 0% 1.446k ± 0% ~ (p=1.000 n=10) +H2Syn_Simple-8 221.0 ± 0% 221.0 ± 0% ~ (p=1.000 n=10) ¹ +HinfSyn_Simple-8 3.107k ± 0% 3.107k ± 0% ~ (p=1.000 n=10) +Balreal-8 88.00 ± 0% 88.00 ± 0% ~ (p=1.000 n=10) ¹ +Balred-8 97.00 ± 0% 97.00 ± 0% ~ (p=1.000 n=10) ¹ +Place_N10_M2-8 28.00 ± 0% 28.00 ± 0% ~ (p=1.000 n=10) ¹ +Place_N50_M5-8 75.00 ± 0% 75.00 ± 0% ~ (p=1.000 n=10) ¹ +Place_N100_M5-8 337.0 ± 0% 337.0 ± 0% ~ (p=1.000 n=10) ¹ +Acker_N5-8 19.00 ± 0% 19.00 ± 0% ~ (p=1.000 n=10) ¹ +Acker_N10-8 22.00 ± 0% 22.00 ± 0% ~ (p=1.000 n=10) ¹ +Lqr_N10_M2-8 37.00 ± 0% 37.00 ± 0% ~ (p=1.000 n=10) ¹ +Lqr_N50_M5-8 758.0 ± 0% 758.0 ± 0% ~ (p=1.000 n=10) ¹ +Lqr_N100_M5-8 2.067k ± 0% 2.018k ± 0% -2.35% (p=0.000 n=10) +Kalman_N10_M2_P3-8 103.0 ± 0% 103.0 ± 0% ~ (p=1.000 n=10) ¹ +Kalman_N50_M5_P5-8 2.191k ± 0% 2.191k ± 0% ~ (p=1.000 n=10) ¹ +Kalman_N100_M5_P5-8 4.336k ± 0% 4.277k ± 0% -1.35% (p=0.000 n=10) +Estim_N10_M2_P3-8 21.00 ± 0% 21.00 ± 0% ~ (p=1.000 n=10) ¹ +Estim_N50_M5_P5-8 21.00 ± 0% 21.00 ± 0% ~ (p=1.000 n=10) ¹ +Estim_N100_M5_P5-8 31.00 ± 0% 21.00 ± 0% -32.26% (p=0.000 n=10) +Reg_N10_M2_P3-8 25.00 ± 0% 25.00 ± 0% ~ (p=1.000 n=10) ¹ +Reg_N50_M5_P5-8 25.00 ± 0% 25.00 ± 0% ~ (p=1.000 n=10) ¹ +Reg_N100_M5_P5-8 55.00 ± 0% 25.00 ± 0% -54.55% (p=0.000 n=10) +PolyRoots_N10-8 41.00 ± 0% 41.00 ± 0% ~ (p=1.000 n=10) ¹ +ZPKEval_SISO-8 2.000 ± 0% 2.000 ± 0% ~ (p=1.000 n=10) ¹ +ZPKFreqResponse_SISO_100-8 2.000 ± 0% 2.000 ± 0% ~ (p=1.000 n=10) ¹ +ZPKToTF_SISO_N10-8 21.00 ± 0% 21.00 ± 0% ~ (p=1.000 n=10) ¹ +TFToZPK_SISO_N10-8 90.00 ± 0% 90.00 ± 0% ~ (p=1.000 n=10) ¹ +SSToZPK_SISO-8 130.0 ± 0% 130.0 ± 0% ~ (p=1.000 n=10) ¹ +ZPKToSS_SISO-8 32.00 ± 0% 32.00 ± 0% ~ (p=1.000 n=10) ¹ +PolyFromComplexRoots_N20-8 2.000 ± 0% 2.000 ± 0% ~ (p=1.000 n=10) ¹ +Sigma_SISO-8 72.00 ± 0% 72.00 ± 0% ~ (p=1.000 n=10) ¹ +Sigma_MIMO-8 85.00 ± 0% 85.00 ± 0% ~ (p=1.000 n=10) ¹ +Nichols-8 74.00 ± 0% 74.00 ± 0% ~ (p=1.000 n=10) ¹ +Nyquist-8 96.00 ± 0% 96.00 ± 0% ~ (p=1.000 n=10) ¹ +FreqRespEst_SISO-8 15.00 ± 0% 15.00 ± 0% ~ (p=1.000 n=10) ¹ +FreqRespEst_MIMO-8 17.00 ± 0% 17.00 ± 0% ~ (p=1.000 n=10) ¹ +BlkDiag-8 15.00 ± 0% 15.00 ± 0% ~ (p=1.000 n=10) ¹ +Connect-8 38.00 ± 0% 38.00 ± 0% ~ (p=1.000 n=10) ¹ +LFT-8 74.00 ± 0% 74.00 ± 0% ~ (p=1.000 n=10) ¹ +LFT_Large-8 74.00 ± 0% 74.00 ± 0% ~ (p=1.000 n=10) ¹ +D2C_ZOH_N2-8 46.00 ± 0% 46.00 ± 0% ~ (p=1.000 n=10) ¹ +D2C_ZOH_N5-8 48.00 ± 0% 48.00 ± 0% ~ (p=1.000 n=10) ¹ +D2C_ZOH_N20-8 50.00 ± 0% 50.00 ± 0% ~ (p=1.000 n=10) ¹ +D2C_ZOH_N50-8 53.00 ± 0% 53.00 ± 0% ~ (p=1.000 n=10) ¹ +D2C_Tustin_N20-8 32.00 ± 0% 32.00 ± 0% ~ (p=1.000 n=10) ¹ +MatLog_N20-8 30.00 ± 0% 30.00 ± 0% ~ (p=1.000 n=10) ¹ +MatLog_N50-8 32.00 ± 0% 32.00 ± 0% ~ (p=1.000 n=10) +DCGain_StableMIMO_N10_M4_P6-8 13.00 ± 0% 13.00 ± 0% ~ (p=1.000 n=10) ¹ +DCGain_IntegratorMIMO_N10_M4_P6-8 33.00 ± 0% 33.00 ± 0% ~ (p=1.000 n=10) ¹ +DCGain_IntegratorMIMO_N40_M8_P8-8 34.00 ± 0% 34.00 ± 0% ~ (p=1.000 n=10) ¹ +SystemFRD_SISO_200-8 60.00 ± 0% 60.00 ± 0% ~ (p=1.000 n=10) ¹ +SystemFRD_SISO_2000-8 60.00 ± 0% 60.00 ± 0% ~ (p=1.000 n=10) ¹ +SystemFRD_SISO_10000-8 60.50 ± 1% 61.00 ± 0% +0.83% (p=0.033 n=10) +SystemFRD_MIMO_200-8 120.0 ± 0% 120.0 ± 0% ~ (p=1.000 n=10) ¹ +SystemFRD_MIMO_2000-8 125.0 ± 2% 124.0 ± 1% ~ (p=0.097 n=10) +SystemFRD_MIMO_10000-8 129.0 ± 1% 129.0 ± 1% ~ (p=1.000 n=10) +SystemFRD_Large_2000-8 211.0 ± 0% 211.0 ± 0% ~ (p=0.230 n=10) +FRDSigma_SISO_200-8 3.000 ± 0% 3.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDSigma_SISO_2000-8 3.000 ± 0% 3.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDSigma_MIMO_200-8 8.000 ± 0% 8.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDSigma_MIMO_2000-8 8.000 ± 0% 8.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDSigma_MIMO_10000-8 8.000 ± 0% 8.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDSigma_Large_2000-8 8.000 ± 0% 8.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDMargin_200-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDMargin_2000-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDMargin_10000-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDMargin_NegGM_2000-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDSigma_MIMO5x5_2000-8 8.000 ± 0% 8.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDSeries_SISO_200-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDSeries_SISO_2000-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDSeries_MIMO_200-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDSeries_MIMO_2000-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDSeries_MIMO_10000-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDParallel_SISO_2000-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDParallel_MIMO_2000-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDFeedback_SISO_200-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDFeedback_SISO_2000-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDFeedback_MIMO_200-8 10.00 ± 0% 10.00 ± 0% ~ (p=1.000 n=10) ¹ +FRDFeedback_MIMO_2000-8 10.00 ± 0% 10.00 ± 0% ~ (p=1.000 n=10) ¹ +FRDFeedback_MIMO_10000-8 10.00 ± 0% 10.00 ± 0% ~ (p=1.000 n=10) ¹ +FRDFeedback_MIMO8x8_2000-8 10.00 ± 0% 10.00 ± 0% ~ (p=1.000 n=10) ¹ +FRDAbs_MIMO_2000-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDSelectFrequencies_MIMO_2000-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FRDPeakGain_MIMO_2000-8 6.000 ± 0% 6.000 ± 0% ~ (p=1.000 n=10) ¹ +ModelArrayFreqResponse_MIMO_16x200-8 1.620k ± 0% 1.620k ± 0% ~ (p=1.000 n=10) +ModelArrayFreqResponseManualLoop_MIMO_16x200-8 1.615k ± 0% 1.615k ± 0% ~ (p=1.000 n=10) +Step_SISO_N2-8 54.00 ± 0% 54.00 ± 0% ~ (p=1.000 n=10) ¹ +Step_SISO_N10-8 101.00 ± 0% 73.00 ± 0% -27.72% (p=0.000 n=10) +Step_SISO_N50-8 252.5 ± 1% 134.0 ± 0% -46.93% (p=0.000 n=10) +Step_MIMO_N10-8 62.00 ± 0% 62.00 ± 0% ~ (p=1.000 n=10) ¹ +StepInfo_SISO_N10-8 2.000 ± 0% 2.000 ± 0% ~ (p=1.000 n=10) ¹ +StepInfo_MIMO_N10-8 2.000 ± 0% 2.000 ± 0% ~ (p=1.000 n=10) ¹ +ModelArrayStep_MIMO_16-8 883.0 ± 0% 882.0 ± 0% ~ (p=0.115 n=10) +ModelArrayStepManualLoop_MIMO_16-8 877.0 ± 0% 877.0 ± 0% ~ (p=0.635 n=10) +Impulse_SISO_N2-8 54.00 ± 0% 54.00 ± 0% ~ (p=1.000 n=10) ¹ +Impulse_SISO_N10-8 101.00 ± 0% 73.00 ± 0% -27.72% (p=0.000 n=10) +Impulse_SISO_N50-8 252.0 ± 0% 134.0 ± 1% -46.83% (p=0.000 n=10) +Impulse_MIMO_N10-8 62.00 ± 0% 62.00 ± 0% ~ (p=1.000 n=10) ¹ +Lsim_SISO_N2-8 58.00 ± 0% 40.00 ± 0% -31.03% (p=0.000 n=10) +Lsim_SISO_N10-8 60.00 ± 0% 42.00 ± 0% -30.00% (p=0.000 n=10) +Lsim_SISO_N50-8 62.00 ± 0% 44.00 ± 0% -29.03% (p=0.000 n=10) +Lsim_MIMO_N10-8 60.00 ± 0% 42.00 ± 0% -30.00% (p=0.000 n=10) +Lsim_SISO_1e4-8 361.00 ± 0% 43.00 ± 0% -88.09% (p=0.000 n=10) +Lsim_MIMO_1e4-8 368.00 ± 0% 45.50 ± 3% -87.64% (p=0.000 n=10) +Lsim_Discrete_SISO-8 48.00 ± 0% 14.00 ± 0% -70.83% (p=0.000 n=10) +Loopsens_SISO_N2-8 227.0 ± 0% 227.0 ± 0% ~ (p=1.000 n=10) ¹ +Loopsens_SISO_N10-8 227.0 ± 0% 227.0 ± 0% ~ (p=1.000 n=10) ¹ +Loopsens_MIMO_N10-8 227.0 ± 0% 227.0 ± 0% ~ (p=1.000 n=10) ¹ +Canon_Modal_N2-8 36.00 ± 0% 36.00 ± 0% ~ (p=1.000 n=10) ¹ +Canon_Modal_N10-8 54.00 ± 0% 54.00 ± 0% ~ (p=1.000 n=10) ¹ +Canon_Modal_N50-8 113.0 ± 1% 112.0 ± 1% ~ (p=0.070 n=10) +Canon_Modal_N100-8 2.014k ± 0% 2.014k ± 0% ~ (p=0.885 n=10) +Canon_Comp_N2-8 49.00 ± 0% 49.00 ± 0% ~ (p=1.000 n=10) ¹ +Canon_Comp_N10-8 100.0 ± 0% 100.0 ± 0% ~ (p=1.000 n=10) ¹ +DescriptorToExplicit_N10-8 22.00 ± 0% 22.00 ± 0% ~ (p=1.000 n=10) ¹ +DescriptorFreqResponse_MIMO_N10x200-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +DescriptorFreqResponse_MIMO_N50x200-8 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹ +FixedInputReduction_N10-8 10.00 ± 0% 10.00 ± 0% ~ (p=1.000 n=10) ¹ +TunableGainCurrentSystem_4x4-8 8.000 ± 0% 8.000 ± 0% ~ (p=1.000 n=10) ¹ +TunableGainSampleCurrentSystem_4x4-8 30.00 ± 0% 30.00 ± 0% ~ (p=1.000 n=10) ¹ +GeneralizedCurrentSystem_SISO-8 8.000 ± 0% 8.000 ± 0% ~ (p=1.000 n=10) ¹ +GeneralizedClosedLoop_SISO-8 68.00 ± 0% 68.00 ± 0% ~ (p=1.000 n=10) ¹ +TuningGoalWeightedGain_SISO-8 82.00 ± 0% 82.00 ± 0% ~ (p=1.000 n=10) ¹ +TuningGoalWeightedGain_MIMO-8 113.0 ± 0% 113.0 ± 0% ~ (p=1.000 n=10) ¹ +TuningGoalDynamicWeightedGain_MIMO-8 247.0 ± 0% 247.0 ± 0% ~ (p=1.000 n=10) ¹ +Systune_SISO-8 688.0 ± 0% 688.0 ± 0% ~ (p=1.000 n=10) +Systune_MIMO-8 1.287k ± 0% 1.286k ± 0% -0.08% (p=0.023 n=10) +PhysicalAssembly_8Components-8 306.0 ± 0% 306.0 ± 0% ~ (p=1.000 n=10) ¹ +ModalTruncate_N50_Order10-8 156.0 ± 0% 156.0 ± 0% ~ (p=1.000 n=10) ¹ +Passivity_SISO-8 63.00 ± 0% 63.00 ± 0% ~ (p=1.000 n=10) ¹ +FRDPassivity_MIMO-8 2.000 ± 0% 2.000 ± 0% ~ (p=1.000 n=10) ¹ +Stabsep_N2-8 55.00 ± 0% 55.00 ± 0% ~ (p=1.000 n=10) ¹ +Stabsep_N10-8 79.00 ± 0% 79.00 ± 0% ~ (p=1.000 n=10) ¹ +Stabsep_N50-8 157.0 ± 1% 156.0 ± 1% ~ (p=0.370 n=10) +Stabsep_N100-8 480.5 ± 0% 481.0 ± 0% ~ (p=0.165 n=10) +Modsep_N10-8 79.00 ± 0% 79.00 ± 0% ~ (p=1.000 n=10) ¹ +Modsep_N50-8 144.0 ± 1% 143.5 ± 0% ~ (p=1.000 n=10) +Ssbal_N2-8 12.00 ± 0% 12.00 ± 0% ~ (p=1.000 n=10) ¹ +Ssbal_N10-8 13.00 ± 0% 13.00 ± 0% ~ (p=1.000 n=10) ¹ +Ssbal_N50-8 13.00 ± 0% 13.00 ± 0% ~ (p=1.000 n=10) ¹ +Prescale_N2-8 19.00 ± 0% 19.00 ± 0% ~ (p=1.000 n=10) ¹ +Prescale_N10-8 20.00 ± 0% 20.00 ± 0% ~ (p=1.000 n=10) ¹ +Prescale_N50-8 20.00 ± 0% 20.00 ± 0% ~ (p=1.000 n=10) ¹ +Sminreal_N2-8 9.000 ± 0% 9.000 ± 0% ~ (p=1.000 n=10) ¹ +Sminreal_N10-8 11.00 ± 0% 11.00 ± 0% ~ (p=1.000 n=10) ¹ +Sminreal_N50-8 15.00 ± 0% 15.00 ± 0% ~ (p=1.000 n=10) ¹ +Inv_SISO_N2-8 28.00 ± 0% 28.00 ± 0% ~ (p=1.000 n=10) ¹ +Inv_SISO_N10-8 28.00 ± 0% 28.00 ± 0% ~ (p=1.000 n=10) ¹ +Inv_MIMO_N10-8 28.00 ± 0% 28.00 ± 0% ~ (p=1.000 n=10) ¹ +Covar_SISO_N2-8 29.00 ± 0% 29.00 ± 0% ~ (p=1.000 n=10) ¹ +Covar_SISO_N10-8 26.00 ± 0% 26.00 ± 0% ~ (p=1.000 n=10) ¹ +Covar_SISO_N50-8 83.00 ± 0% 83.00 ± 0% ~ (p=1.000 n=10) ¹ +Covar_SISO_N100-8 939.0 ± 0% 939.0 ± 0% ~ (p=1.000 n=10) ¹ +Covar_MIMO_N10-8 26.00 ± 0% 26.00 ± 0% ~ (p=1.000 n=10) ¹ +Pidtune_PI-8 94.00 ± 0% 94.00 ± 0% ~ (p=1.000 n=10) ¹ +Pidtune_PID-8 94.00 ± 0% 94.00 ± 0% ~ (p=1.000 n=10) ¹ +Pidtune_PIDF-8 94.00 ± 0% 94.00 ± 0% ~ (p=1.000 n=10) ¹ +Margin_SISO-8 85.00 ± 0% 85.00 ± 0% ~ (p=1.000 n=10) ¹ +Bandwidth_SISO-8 71.00 ± 0% 71.00 ± 0% ~ (p=1.000 n=10) ¹ +DiskMargin_SISO-8 97.00 ± 0% 97.00 ± 0% ~ (p=1.000 n=10) ¹ +geomean ² -6.60% ² +¹ all samples are equal +² summaries must be >0 to compute geomean diff --git a/docs/benchmarks/gonum-v0.19.0/go1.27.1-full/full-candidate.txt.gz b/docs/benchmarks/gonum-v0.19.0/go1.27.1-full/full-candidate.txt.gz new file mode 100644 index 0000000..58653ad Binary files /dev/null and b/docs/benchmarks/gonum-v0.19.0/go1.27.1-full/full-candidate.txt.gz differ diff --git a/docs/benchmarks/gonum-v0.19.0/go1.27.1-full/metadata.json b/docs/benchmarks/gonum-v0.19.0/go1.27.1-full/metadata.json new file mode 100644 index 0000000..bc311bd --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/go1.27.1-full/metadata.json @@ -0,0 +1,132 @@ +{ + "status": "complete", + "flags": [ + "-test.run=^$", + "-test.bench=.", + "-test.benchtime=100ms", + "-test.benchmem", + "-test.count=1" + ], + "rounds": 10, + "timeout_seconds": 600.0, + "runtime_environment": { + "GOMAXPROCS": "8", + "GODEBUG": null, + "GOGC": null, + "GOMEMLIMIT": null + }, + "binaries": { + "baseline": { + "sha256": "eff31429cdc44c5834806a4d3d0fa9c7cd7082ec3fd2945411b18c381b372da9" + }, + "candidate": { + "sha256": "e5946d31b00f3d5f76c5be4948749bac63897d7405f345908f36a916eb83aedb" + } + }, + "runs": [ + { + "round": 1, + "label": "baseline", + "status": "complete" + }, + { + "round": 1, + "label": "candidate", + "status": "complete" + }, + { + "round": 2, + "label": "candidate", + "status": "complete" + }, + { + "round": 2, + "label": "baseline", + "status": "complete" + }, + { + "round": 3, + "label": "baseline", + "status": "complete" + }, + { + "round": 3, + "label": "candidate", + "status": "complete" + }, + { + "round": 4, + "label": "candidate", + "status": "complete" + }, + { + "round": 4, + "label": "baseline", + "status": "complete" + }, + { + "round": 5, + "label": "baseline", + "status": "complete" + }, + { + "round": 5, + "label": "candidate", + "status": "complete" + }, + { + "round": 6, + "label": "candidate", + "status": "complete" + }, + { + "round": 6, + "label": "baseline", + "status": "complete" + }, + { + "round": 7, + "label": "baseline", + "status": "complete" + }, + { + "round": 7, + "label": "candidate", + "status": "complete" + }, + { + "round": 8, + "label": "candidate", + "status": "complete" + }, + { + "round": 8, + "label": "baseline", + "status": "complete" + }, + { + "round": 9, + "label": "baseline", + "status": "complete" + }, + { + "round": 9, + "label": "candidate", + "status": "complete" + }, + { + "round": 10, + "label": "candidate", + "status": "complete" + }, + { + "round": 10, + "label": "baseline", + "status": "complete" + } + ], + "go_version": "go1.27.1 darwin/arm64", + "candidate_commit": "2027e5d4591595287f4357390a13e3bdaac16248", + "baseline": "fdda4f150d13b34a969de7faed6ae896e827ce94 with go directive 1.27.1 and identical model_array.go from candidate", + "source_verification": "All 191 Go files matched between variants and candidate matched working tree." +} diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/README.md b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/README.md new file mode 100644 index 0000000..3254e9a --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/README.md @@ -0,0 +1,185 @@ +# Issue #10: arm64 regression investigation + +Investigated 2026-09-12 on Apple M1 Pro (darwin/arm64), GOMAXPROCS=8. +[Issue #10](https://github.com/jamestjsp/gonum/issues/10) reports downstream +regressions between v0.17.7-fork and v0.19.0-fork. + +## Findings + +The large Go 1.26.4 regressions reproduce. Their first substantial increase is +at `ebe982daa841625254b141121265738410ba42ee`, the worker-aware DGEMM dispatch +change. The immediately preceding commit `7fd5fefe` does not show the large +slowdowns. The subsequent Darwin threshold calibration preserves them. + +The evidence strongly supports executable-layout sensitivity, not an incorrect +parallel-work threshold: + +- The MatLog_N50 trace contains no Dgemv calls, including setup. Its GEMM shapes + are 51×51×51 (setup), 50×50×50 and 36×36×64. All remain serial under both + releases because they occupy fewer than four output tiles. +- Triangular solves include a 64×36 panel with lda=ldb=100 and a 100×50 solve + with lda=100, ldb=50. Dtrsm source is unchanged between releases. Normalized + disassembly has the same 888 instructions and identical hot-body operations; + differing operands are addresses of panic strings/types in cold paths. + Dtrsm starts at 0x100127980 in the original baseline executable and + 0x100128410 in the candidate, changing its position modulo 64 from 0 to 16. + Other unchanged functions move too. This does not identify Dtrsm alone as + the cause of the whole-program effect. +- Relinking the same Go 1.26.4 code with `-ldflags=-funcalign=64` removes almost + all of the three largest regressions. This changes layout without reverting + dispatch, changing arithmetic, or undoing the scaling fixes. +- With default Go 1.27.1 builds, none of the seven reported regression cases + has a statistically significant slowdown in this ten-sample follow-up. + Absence of significance is not proof of equivalence; smaller effects and + other workloads remain possible. + +No production numerical code was changed. Go 1.27.1 was installed as the host's +default toolchain. The older Go 1.26.4 installation was preserved for diagnosis. +The global alignment flag is an experiment, not a proposed build requirement. +The issue remains reproducible with the older compiler's default layout. + +## Reproduction and bisection + +All entries below are medians from ten interleaved samples per binary. +The release reproduction uses 300ms per case; bisection uses 200ms. + +| Benchmark | Go 1.26.4 old release | New release | Change | +| --- | ---: | ---: | ---: | +| MatLog_N50 | 335.2 us | 377.7 us | +12.67% | +| D2C_ZOH_N50 | 413.1 us | 453.2 us | +9.69% | +| Stabsep_N100 | 9.030 ms | 9.626 ms | +6.60% | +| Reduce | 46.47 us | 49.19 us | +5.85% | +| DiscretizeZOH | 21.35 us | 22.58 us | +5.74% | +| Modsep_N50 | 1.453 ms | 1.535 ms | +5.63% | + +All six comparisons have p≤0.005. The FRD timing regression did not reproduce +(p=0.579), although its median allocation count rose from 60 to 61. Current +master also reproduces the large timing regressions with Go 1.26.4. + +| Go 1.26.4 revision/build | MatLog_N50 | D2C_ZOH_N50 | Stabsep_N100 | +| --- | ---: | ---: | ---: | +| Old release `f43007ad` | 327.7 us | 409.2 us | 8.857 ms | +| Merge `7fd5fefe` | 330.1 us | 411.9 us | 8.846 ms | +| Worker-aware gate `ebe982da` | 370.1 us | 450.3 us | 9.398 ms | +| Darwin calibration `777029ff` | 369.5 us | 450.2 us | 9.452 ms | +| New release `a78cf83e` | 369.7 us | 451.1 us | 9.421 ms | +| Old release, function alignment 64 | 327.1 us | 408.2 us | 8.892 ms | +| New release, function alignment 64 | 329.2 us | 410.6 us | 8.874 ms | + +`bisect-go1.26.4/benchstat.txt` contains all uncertainty and allocation results. +This is attribution of the trigger in these executables, not evidence that +changing the threshold back is the appropriate repair. GEMM reversion loses the +confirmed simulation and regulator gains. + +## Go 1.27.1 and allocation specialization + +Both release endpoints and current master were rebuilt with Go 1.27.1. +The five-way comparison also includes isolated reversions of the old Dgemv +implementation and old dgemm.go into the new release. These are experimental +ablation builds, not proposed source changes. + +| Benchmark | Old release | New release | Current master | +| --- | ---: | ---: | ---: | +| MatLog_N50 | 335.4 us | 340.0 us | 338.7 us | +| D2C_ZOH_N50 | 416.1 us | 418.7 us | 419.1 us | +| Stabsep_N100 | 8.672 ms | 8.697 ms | 8.674 ms | +| Simulate_DCMotor | 44.44 us | 38.12 us | 37.99 us | +| Reg_N100_M5_P5 | 80.56 us | 61.20 us | 60.60 us | + +The new release retains the simulation improvement (-14.22%) and regulator +improvement (-24.02%), with the same 45→11 and 55→25 allocation reductions +observed under Go 1.26.4. These allocation-count changes come from the Gonum +comparison, not from installing the new compiler. Some smaller allocation +increases remain; consult the complete tables rather than timing alone. + +Go 1.27 adds size-specialized allocation calls for small objects; see the +[official release notes](https://go.dev/doc/go1.27#runtime). A separate paired +comparison uses identical new-release source with the feature enabled by +default and disabled with `GOEXPERIMENT=nosizespecializedmalloc`: + +- Disabled Reduce is 1.88% slower (p<0.001): the default feature helps this case. +- Disabled MatLog and D2C are 1.25% and 1.41% faster (p<0.001). +- Stabsep is inconclusive (p=0.579); other results are in + `allocator-go1.27.1/benchstat.txt`. + +The feature therefore does not explain the disappearance of the large original +regressions. Toggling it changes emitted code/layout as well as allocation +calls, so these are whole-program effects, not isolated allocator timings. +No persistent GOEXPERIMENT override was set. + +## Evidence and limitations + +- `go1.26.4/`: original three-way release/master comparison, 10×300ms. +- `go1.27.1/`: five-way release/master/ablation comparison, 10×300ms. +- `allocator-go1.27.1/`: allocator default versus disabled, 10×300ms. +- `bisect-go1.26.4/`: five commit states plus two alignment builds, 10×200ms. +- Each directory contains full raw output, benchstat results, binary SHA-256 + hashes, resolved commits, toolchain versions and alternating run order. +- `matlog-trace.txt`: instrumented one-iteration call-shape trace, including + untimed fixture setup. Its timing is not performance evidence. +- `code-comparison.txt`: normalized instruction-count and address diagnostics. + The reported diff counts include cold panic-address materialization. +- `profiles/`: separate five-second MatLog CPU profiles with Go 1.26.4. The + macOS profiles are dominated by runtime/system samples and are not used to + make a quantitative CPU attribution. + +The unchanged controlsys fixture source is commit +`54d5d6b119c8b4351db0cd0bc0ebb4122bde94d4`; all comparisons replace only its +Gonum dependency. The Gonum endpoints are commits, not annotated tag objects: +`f43007ad8a2d208bc8f47c338e85f05381d9643b` and +`a78cf83eff160df0e423b08af0c7642ade964150`. Current master is +`1c42629c5cb53235d9ae074bb1be6da6471771da`. + +Benchstat: `golang.org/x/perf v0.0.0-20260312031701-16a31bc5fbd0`. + +Normal desktop host, no affinity or power-state control; native default Go +BLAS/LAPACK, no build tags or PGO. All binaries in a timed comparison were +prebuilt, with no concurrent builds, tests or profiling. The interrupted +Go 1.26.4 ablation run was discarded. Comparisons across the two toolchains' +separate sessions are descriptive; each source/feature comparison within a +session is interleaved. No other platforms or worker counts were measured. +This focused investigation does not replace the original 236-case suite or +establish a regression-free release on all workloads. + +## Run again + +Requires Python 3.12+, Go, and local repositories containing the pinned commits. +The harness uses fresh snapshots and refuses to overwrite its output directory. +It checks exit status and matching nonempty benchmark sets. Builds finish before +any timed runs. Use an absolute older Go executable for the old-toolchain test; +do not change the host default back. + +```sh +uv run python3 docs/benchmarks/gonum-v0.19.0/issue10-investigation/run.py \ + --gonum /path/to/gonum \ + --controlsys /path/to/controlsys --go /path/to/go1.27.1/bin/go \ + --suite releases --output /tmp/issue10-releases +uv run python3 docs/benchmarks/gonum-v0.19.0/issue10-investigation/run.py \ + --gonum /path/to/gonum \ + --controlsys /path/to/controlsys --go /path/to/go1.27.1/bin/go \ + --suite allocator --output /tmp/issue10-allocator +uv run python3 docs/benchmarks/gonum-v0.19.0/issue10-investigation/run.py \ + --gonum /path/to/gonum \ + --controlsys /path/to/controlsys --go /path/to/go1.26.4/bin/go \ + --suite bisect --benchtime 200ms --output /tmp/issue10-bisect +benchstat /tmp/issue10-releases/old.txt /tmp/issue10-releases/new.txt +``` + +The new `BenchmarkDtrsmSmallRectangular` in `blas/gonum/dtrsmbench_test.go` +provides bounded, known-solution coverage for the traced solve shapes. It times +RHS restoration plus the public solve and validates the fixture outside timing. +It is a kernel guardrail, not a replacement for the downstream executable when +investigating layout sensitivity. + +Validation on Go 1.27.1: + +- `go test ./blas/gonum ./lapack/gonum ./mat` passed. +- The unchanged controlsys snapshot with current Gonum master passed `go test ./...`. +- All four new benchmark fixtures passed a one-iteration smoke check, with zero + timed allocations. These single samples are not performance claims. +- The retained harness completed its allocator suite with one iteration per + benchmark and one round; this is a functionality check, excluded from tables. + +This directory preserves the local Gonum investigation for the downstream PR. +The original Gonum checkout and its uncommitted benchmark are unchanged. +Pass `--gonum` explicitly when running the copied harness from controlsys. diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/allocator-go1.27.1/allocator_default.txt b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/allocator-go1.27.1/allocator_default.txt new file mode 100644 index 0000000..63f33a7 --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/allocator-go1.27.1/allocator_default.txt @@ -0,0 +1,140 @@ +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7230 44872 ns/op 53696 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 17005 21371 ns/op 22177 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9434 37890 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6045 60636 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 855 417976 ns/op 473914 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1065 336698 ns/op 400641 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1635 227260 ns/op 944777 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8658854 ns/op 2671982 B/op 484 allocs/op +BenchmarkModsep_N50-8 250 1430081 ns/op 654050 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6832 45318 ns/op 53696 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16935 21241 ns/op 22181 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9492 38477 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6328 56243 ns/op 431475 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 859 418507 ns/op 475180 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1069 335306 ns/op 400177 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1318 232854 ns/op 944791 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8768819 ns/op 2675663 B/op 483 allocs/op +BenchmarkModsep_N50-8 250 1428283 ns/op 656477 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7074 44874 ns/op 53699 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16378 21285 ns/op 22188 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9597 37915 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 5518 59593 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 866 419836 ns/op 474883 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1080 334665 ns/op 400196 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1680 233854 ns/op 944772 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8654393 ns/op 2658799 B/op 484 allocs/op +BenchmarkModsep_N50-8 252 1427349 ns/op 655257 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7168 45046 ns/op 53688 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16905 21327 ns/op 22180 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9435 38011 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 5794 60539 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 856 416440 ns/op 474795 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1075 334857 ns/op 400185 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1554 230307 ns/op 944810 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8638154 ns/op 2665182 B/op 483 allocs/op +BenchmarkModsep_N50-8 250 1427739 ns/op 654806 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7166 44971 ns/op 53680 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16833 21749 ns/op 22182 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9601 37863 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6018 58503 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 856 418911 ns/op 474790 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1074 335725 ns/op 400148 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1436 226876 ns/op 944793 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8722667 ns/op 2658675 B/op 484 allocs/op +BenchmarkModsep_N50-8 249 1426503 ns/op 655502 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6991 44928 ns/op 53688 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16866 21149 ns/op 22182 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9517 37908 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6025 56855 ns/op 431475 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 864 417210 ns/op 473983 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1074 334585 ns/op 400426 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1539 228773 ns/op 944794 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8650460 ns/op 2675617 B/op 485 allocs/op +BenchmarkModsep_N50-8 252 1426096 ns/op 656794 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6870 45599 ns/op 53688 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16881 21239 ns/op 22183 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9496 37971 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6020 59540 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 847 415640 ns/op 475291 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1064 333731 ns/op 400229 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1645 224503 ns/op 944810 B/op 61 allocs/op +BenchmarkStabsep_N100-8 42 8646579 ns/op 2655853 B/op 483 allocs/op +BenchmarkModsep_N50-8 252 1424473 ns/op 654574 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6980 44591 ns/op 53693 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16879 21206 ns/op 22181 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9452 37995 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6330 59964 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 861 421026 ns/op 474652 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1075 334884 ns/op 400268 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1542 227836 ns/op 944792 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8753455 ns/op 2652317 B/op 483 allocs/op +BenchmarkModsep_N50-8 252 1428466 ns/op 657322 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6864 45421 ns/op 53687 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 15499 22806 ns/op 22191 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 8998 39171 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 4894 65865 ns/op 431475 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 810 515241 ns/op 473766 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1022 335764 ns/op 400193 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1442 230829 ns/op 944761 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8641434 ns/op 2659031 B/op 483 allocs/op +BenchmarkModsep_N50-8 250 1432305 ns/op 659343 B/op 144 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6930 45455 ns/op 53675 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 17013 21183 ns/op 22187 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9568 38085 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6236 59404 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 860 417084 ns/op 473818 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1076 336443 ns/op 400392 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1532 230992 ns/op 944789 B/op 61 allocs/op +BenchmarkStabsep_N100-8 42 8689293 ns/op 2649934 B/op 483 allocs/op +BenchmarkModsep_N50-8 249 1428184 ns/op 654527 B/op 143 allocs/op +PASS diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/allocator-go1.27.1/benchstat.txt b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/allocator-go1.27.1/benchstat.txt new file mode 100644 index 0000000..8501bc5 --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/allocator-go1.27.1/benchstat.txt @@ -0,0 +1,44 @@ +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro + │ allocator_default.txt │ nosizemalloc.txt │ + │ sec/op │ sec/op vs base │ +Reduce-8 45.01µ ± 1% 45.85µ ± 1% +1.88% (p=0.000 n=10) +DiscretizeZOH-8 21.26µ ± 2% 21.40µ ± 1% ~ (p=0.436 n=10) +Simulate_DCMotor-8 37.98µ ± 1% 37.88µ ± 0% -0.28% (p=0.023 n=10) +Reg_N100_M5_P5-8 59.57µ ± 5% 59.52µ ± 3% ~ (p=0.684 n=10) +D2C_ZOH_N50-8 418.2µ ± 1% 412.3µ ± 0% -1.41% (p=0.000 n=10) +MatLog_N50-8 335.1µ ± 0% 330.9µ ± 0% -1.25% (p=0.000 n=10) +SystemFRD_SISO_10000-8 229.5µ ± 1% 227.2µ ± 5% ~ (p=0.631 n=10) +Stabsep_N100-8 8.657m ± 1% 8.667m ± 0% ~ (p=0.579 n=10) +Modsep_N50-8 1.428m ± 0% 1.423m ± 0% -0.32% (p=0.000 n=10) +geomean 211.9µ 211.5µ -0.19% + + │ allocator_default.txt │ nosizemalloc.txt │ + │ B/op │ B/op vs base │ +Reduce-8 52.43Ki ± 0% 52.44Ki ± 0% ~ (p=0.092 n=10) +DiscretizeZOH-8 21.66Ki ± 0% 21.66Ki ± 0% ~ (p=0.144 n=10) +Simulate_DCMotor-8 16.28Ki ± 0% 16.28Ki ± 0% ~ (p=1.000 n=10) ¹ +Reg_N100_M5_P5-8 421.4Ki ± 0% 421.4Ki ± 0% ~ (p=0.721 n=10) +D2C_ZOH_N50-8 463.6Ki ± 0% 463.4Ki ± 0% ~ (p=0.315 n=10) +MatLog_N50-8 390.8Ki ± 0% 391.0Ki ± 0% ~ (p=0.684 n=10) +SystemFRD_SISO_10000-8 922.6Ki ± 0% 922.6Ki ± 0% ~ (p=0.447 n=10) +Stabsep_N100-8 2.536Mi ± 1% 2.534Mi ± 0% ~ (p=0.247 n=10) +Modsep_N50-8 640.0Ki ± 0% 641.1Ki ± 0% ~ (p=0.218 n=10) +geomean 234.7Ki 234.8Ki +0.01% +¹ all samples are equal + + │ allocator_default.txt │ nosizemalloc.txt │ + │ allocs/op │ allocs/op vs base │ +Reduce-8 170.0 ± 0% 170.0 ± 0% ~ (p=1.000 n=10) ¹ +DiscretizeZOH-8 28.00 ± 0% 28.00 ± 0% ~ (p=1.000 n=10) ¹ +Simulate_DCMotor-8 11.00 ± 0% 11.00 ± 0% ~ (p=1.000 n=10) ¹ +Reg_N100_M5_P5-8 25.00 ± 0% 25.00 ± 0% ~ (p=1.000 n=10) ¹ +D2C_ZOH_N50-8 53.00 ± 0% 53.00 ± 0% ~ (p=1.000 n=10) ¹ +MatLog_N50-8 32.00 ± 0% 32.00 ± 0% ~ (p=1.000 n=10) ¹ +SystemFRD_SISO_10000-8 61.00 ± 0% 61.00 ± 0% ~ (p=1.000 n=10) ¹ +Stabsep_N100-8 483.0 ± 0% 483.0 ± 0% ~ (p=0.065 n=10) +Modsep_N50-8 143.0 ± 0% 143.0 ± 0% ~ (p=1.000 n=10) +geomean 59.50 59.50 +0.00% +¹ all samples are equal diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/allocator-go1.27.1/metadata.json b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/allocator-go1.27.1/metadata.json new file mode 100644 index 0000000..b272c18 --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/allocator-go1.27.1/metadata.json @@ -0,0 +1,75 @@ +{ + "date": "2026-09-12", + "cpu": "Apple M1 Pro", + "GOOS": "darwin", + "GOARCH": "arm64", + "GOMAXPROCS": 8, + "rounds": 10, + "benchtime": "300ms", + "controlsys_commit": "54d5d6b119c8b4351db0cd0bc0ebb4122bde94d4", + "build_flags": "default unless noted per variant", + "tags": [], + "GOFLAGS": "", + "PGO": "none; no default.pgo present", + "order": [ + [ + "allocator_default", + "nosizemalloc" + ], + [ + "nosizemalloc", + "allocator_default" + ], + [ + "allocator_default", + "nosizemalloc" + ], + [ + "nosizemalloc", + "allocator_default" + ], + [ + "allocator_default", + "nosizemalloc" + ], + [ + "nosizemalloc", + "allocator_default" + ], + [ + "allocator_default", + "nosizemalloc" + ], + [ + "nosizemalloc", + "allocator_default" + ], + [ + "allocator_default", + "nosizemalloc" + ], + [ + "nosizemalloc", + "allocator_default" + ] + ], + "variants": { + "allocator_default": { + "gonum_commit": "a78cf83eff160df0e423b08af0c7642ade964150", + "sha256": "d1df446b3223c58358152233bdf15c52c6b146213f15448cbb649bd134bdc554", + "go_version": "go1.27.1", + "GOEXPERIMENT": "", + "ldflags": "", + "reverted_file": null + }, + "nosizemalloc": { + "gonum_commit": "a78cf83eff160df0e423b08af0c7642ade964150", + "sha256": "2d3e741c8a4b9a5a6c44d817d78dba1b450fb365b2fe714be26172c540afa55c", + "go_version": "go1.27.1-X:nosizespecializedmalloc", + "GOEXPERIMENT": "nosizespecializedmalloc", + "ldflags": "", + "reverted_file": null + } + }, + "benchstat": "golang.org/x/perf v0.0.0-20260312031701-16a31bc5fbd0" +} diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/allocator-go1.27.1/nosizemalloc.txt b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/allocator-go1.27.1/nosizemalloc.txt new file mode 100644 index 0000000..38d91d8 --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/allocator-go1.27.1/nosizemalloc.txt @@ -0,0 +1,140 @@ +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7281 45752 ns/op 53698 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16893 21449 ns/op 22183 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9559 37802 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 5658 56165 ns/op 431476 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 871 412663 ns/op 473877 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1093 330947 ns/op 400133 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1666 237510 ns/op 944728 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8645875 ns/op 2651855 B/op 483 allocs/op +BenchmarkModsep_N50-8 253 1424528 ns/op 656953 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7828 45574 ns/op 53684 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16890 21517 ns/op 22176 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9558 37803 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 5948 59248 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 861 414209 ns/op 474028 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1093 330528 ns/op 400364 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1603 238042 ns/op 944758 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8664697 ns/op 2651967 B/op 483 allocs/op +BenchmarkModsep_N50-8 253 1424466 ns/op 654795 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6981 46705 ns/op 53702 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16572 21533 ns/op 22178 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9424 37972 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6354 58046 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 861 410906 ns/op 474665 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1099 330010 ns/op 400486 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1440 226551 ns/op 944805 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8613800 ns/op 2658489 B/op 483 allocs/op +BenchmarkModsep_N50-8 253 1420795 ns/op 655931 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6784 46252 ns/op 53700 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16891 21452 ns/op 22181 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9447 37965 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6074 57693 ns/op 431475 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 858 411782 ns/op 474415 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1082 330908 ns/op 400222 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1586 223285 ns/op 944812 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8673362 ns/op 2644184 B/op 482 allocs/op +BenchmarkModsep_N50-8 252 1422964 ns/op 654904 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6891 45395 ns/op 53695 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16843 21230 ns/op 22179 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9523 37913 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6361 59942 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 871 412024 ns/op 474608 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1084 331434 ns/op 401014 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1588 224939 ns/op 944793 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8649710 ns/op 2665581 B/op 483 allocs/op +BenchmarkModsep_N50-8 253 1421619 ns/op 657841 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6679 46040 ns/op 53685 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16647 21305 ns/op 22179 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9481 37753 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6210 60308 ns/op 431475 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 866 409977 ns/op 474073 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1094 332603 ns/op 399987 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1489 227800 ns/op 944770 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8668629 ns/op 2662809 B/op 484 allocs/op +BenchmarkModsep_N50-8 252 1424286 ns/op 655991 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6960 45732 ns/op 53707 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16584 21360 ns/op 22181 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9570 37996 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 5685 59790 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 864 415141 ns/op 474614 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1081 330803 ns/op 400396 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1500 226457 ns/op 944806 B/op 61 allocs/op +BenchmarkStabsep_N100-8 42 8632594 ns/op 2659703 B/op 483 allocs/op +BenchmarkModsep_N50-8 252 1427542 ns/op 657445 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6784 46494 ns/op 53699 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16875 21659 ns/op 22184 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9513 37886 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 5692 61095 ns/op 431475 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 872 412717 ns/op 474661 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1090 330921 ns/op 401068 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1633 233095 ns/op 944770 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8709096 ns/op 2650732 B/op 482 allocs/op +BenchmarkModsep_N50-8 253 1421631 ns/op 658796 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6967 45788 ns/op 53690 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16993 21256 ns/op 22183 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9410 37779 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6511 58454 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 865 412877 ns/op 473503 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1090 330255 ns/op 400386 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1634 223678 ns/op 944783 B/op 61 allocs/op +BenchmarkStabsep_N100-8 42 8681841 ns/op 2656272 B/op 482 allocs/op +BenchmarkModsep_N50-8 252 1423787 ns/op 658650 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6811 45921 ns/op 53695 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16893 21049 ns/op 22180 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9518 37866 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 5084 60307 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 858 411729 ns/op 474581 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1087 331660 ns/op 399881 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1436 231813 ns/op 944775 B/op 61 allocs/op +BenchmarkStabsep_N100-8 42 8680641 ns/op 2659672 B/op 483 allocs/op +BenchmarkModsep_N50-8 252 1420802 ns/op 655170 B/op 143 allocs/op +PASS diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/bisect-go1.26.4/benchstat.txt b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/bisect-go1.26.4/benchstat.txt new file mode 100644 index 0000000..aeb4919 --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/bisect-go1.26.4/benchstat.txt @@ -0,0 +1,25 @@ +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro + │ old.txt │ merge.txt │ worker.txt │ calibrated.txt │ new.txt │ old_align64.txt │ new_align64.txt │ + │ sec/op │ sec/op vs base │ sec/op vs base │ sec/op vs base │ sec/op vs base │ sec/op vs base │ sec/op vs base │ +D2C_ZOH_N50-8 409.2µ ± 0% 411.9µ ± 5% +0.67% (p=0.000 n=10) 450.3µ ± 1% +10.06% (p=0.000 n=10) 450.2µ ± 1% +10.03% (p=0.000 n=10) 451.1µ ± 1% +10.25% (p=0.000 n=10) 408.2µ ± 1% ~ (p=0.796 n=10) 410.6µ ± 0% +0.36% (p=0.029 n=10) +MatLog_N50-8 327.7µ ± 1% 330.1µ ± 1% +0.75% (p=0.009 n=10) 370.1µ ± 1% +12.92% (p=0.000 n=10) 369.5µ ± 0% +12.77% (p=0.000 n=10) 369.7µ ± 1% +12.82% (p=0.000 n=10) 327.1µ ± 1% ~ (p=0.353 n=10) 329.2µ ± 0% ~ (p=0.075 n=10) +Stabsep_N100-8 8.857m ± 0% 8.846m ± 0% ~ (p=0.529 n=10) 9.398m ± 1% +6.10% (p=0.000 n=10) 9.452m ± 1% +6.72% (p=0.000 n=10) 9.421m ± 1% +6.36% (p=0.000 n=10) 8.892m ± 0% +0.39% (p=0.003 n=10) 8.874m ± 1% ~ (p=0.105 n=10) +geomean 1.059m 1.064m +0.43% 1.161m +9.66% 1.163m +9.81% 1.163m +9.78% 1.059m -0.01% 1.063m +0.33% + + │ old.txt │ merge.txt │ worker.txt │ calibrated.txt │ new.txt │ old_align64.txt │ new_align64.txt │ + │ B/op │ B/op vs base │ B/op vs base │ B/op vs base │ B/op vs base │ B/op vs base │ B/op vs base │ +D2C_ZOH_N50-8 463.2Ki ± 0% 462.8Ki ± 0% ~ (p=0.218 n=10) 463.3Ki ± 0% ~ (p=0.579 n=10) 463.5Ki ± 0% ~ (p=0.280 n=10) 463.2Ki ± 0% ~ (p=0.971 n=10) 463.0Ki ± 0% ~ (p=0.684 n=10) 463.3Ki ± 0% ~ (p=0.579 n=10) +MatLog_N50-8 391.0Ki ± 0% 390.8Ki ± 0% ~ (p=0.165 n=10) 391.0Ki ± 0% ~ (p=0.631 n=10) 390.8Ki ± 0% ~ (p=0.481 n=10) 390.7Ki ± 0% ~ (p=0.089 n=10) 390.8Ki ± 0% ~ (p=0.165 n=10) 391.1Ki ± 0% ~ (p=0.353 n=10) +Stabsep_N100-8 2.528Mi ± 0% 2.522Mi ± 1% ~ (p=0.436 n=10) 2.527Mi ± 0% ~ (p=0.739 n=10) 2.527Mi ± 0% ~ (p=0.684 n=10) 2.532Mi ± 0% ~ (p=0.796 n=10) 2.546Mi ± 1% ~ (p=0.063 n=10) 2.533Mi ± 0% ~ (p=0.247 n=10) +geomean 776.8Ki 775.9Ki -0.12% 776.9Ki +0.01% 776.8Ki -0.00% 777.1Ki +0.03% 778.4Ki +0.20% 777.6Ki +0.10% + + │ old.txt │ merge.txt │ worker.txt │ calibrated.txt │ new.txt │ old_align64.txt │ new_align64.txt │ + │ allocs/op │ allocs/op vs base │ allocs/op vs base │ allocs/op vs base │ allocs/op vs base │ allocs/op vs base │ allocs/op vs base │ +D2C_ZOH_N50-8 53.00 ± 0% 53.00 ± 0% ~ (p=1.000 n=10) 53.00 ± 0% ~ (p=1.000 n=10) ¹ 53.00 ± 0% ~ (p=1.000 n=10) ¹ 53.00 ± 0% ~ (p=1.000 n=10) ¹ 53.00 ± 0% ~ (p=1.000 n=10) ¹ 53.00 ± 0% ~ (p=1.000 n=10) ¹ +MatLog_N50-8 32.00 ± 0% 32.00 ± 0% ~ (p=1.000 n=10) ¹ 32.00 ± 0% ~ (p=1.000 n=10) 32.00 ± 0% ~ (p=1.000 n=10) ¹ 32.00 ± 0% ~ (p=1.000 n=10) ¹ 32.00 ± 0% ~ (p=1.000 n=10) ¹ 32.00 ± 0% ~ (p=1.000 n=10) ¹ +Stabsep_N100-8 482.0 ± 0% 472.0 ± 0% -2.07% (p=0.000 n=10) 472.0 ± 0% -2.07% (p=0.000 n=10) 483.0 ± 0% ~ (p=0.555 n=10) 483.0 ± 0% ~ (p=0.555 n=10) 484.0 ± 0% +0.41% (p=0.008 n=10) 483.0 ± 0% ~ (p=0.086 n=10) +geomean 93.50 92.85 -0.70% 92.85 -0.70% 93.57 +0.07% 93.57 +0.07% 93.63 +0.14% 93.57 +0.07% +¹ all samples are equal diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/bisect-go1.26.4/calibrated.txt b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/bisect-go1.26.4/calibrated.txt new file mode 100644 index 0000000..5156e55 --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/bisect-go1.26.4/calibrated.txt @@ -0,0 +1,80 @@ +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 531 452248 ns/op 474594 B/op 53 allocs/op +BenchmarkMatLog_N50-8 648 369391 ns/op 400157 B/op 32 allocs/op +BenchmarkStabsep_N100-8 25 9384077 ns/op 2648916 B/op 482 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 520 450057 ns/op 474277 B/op 53 allocs/op +BenchmarkMatLog_N50-8 645 369540 ns/op 400284 B/op 32 allocs/op +BenchmarkStabsep_N100-8 25 9529847 ns/op 2656115 B/op 484 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 530 449651 ns/op 475672 B/op 53 allocs/op +BenchmarkMatLog_N50-8 651 369307 ns/op 400323 B/op 32 allocs/op +BenchmarkStabsep_N100-8 25 9531160 ns/op 2660415 B/op 484 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 528 448679 ns/op 474424 B/op 53 allocs/op +BenchmarkMatLog_N50-8 652 369547 ns/op 400224 B/op 32 allocs/op +BenchmarkStabsep_N100-8 25 9444447 ns/op 2665723 B/op 483 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 519 452877 ns/op 473695 B/op 53 allocs/op +BenchmarkMatLog_N50-8 649 368730 ns/op 400067 B/op 32 allocs/op +BenchmarkStabsep_N100-8 24 9477927 ns/op 2640840 B/op 482 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 523 450358 ns/op 475144 B/op 53 allocs/op +BenchmarkMatLog_N50-8 646 371242 ns/op 399419 B/op 32 allocs/op +BenchmarkStabsep_N100-8 25 9503315 ns/op 2660562 B/op 483 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 530 455478 ns/op 474682 B/op 53 allocs/op +BenchmarkMatLog_N50-8 648 368531 ns/op 400146 B/op 32 allocs/op +BenchmarkStabsep_N100-8 25 9389482 ns/op 2621188 B/op 481 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 530 453729 ns/op 473265 B/op 53 allocs/op +BenchmarkMatLog_N50-8 632 370348 ns/op 400198 B/op 32 allocs/op +BenchmarkStabsep_N100-8 25 9408385 ns/op 2649768 B/op 483 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 529 448888 ns/op 475087 B/op 53 allocs/op +BenchmarkMatLog_N50-8 646 373734 ns/op 400506 B/op 32 allocs/op +BenchmarkStabsep_N100-8 25 9455393 ns/op 2648836 B/op 482 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 520 450008 ns/op 475320 B/op 53 allocs/op +BenchmarkMatLog_N50-8 652 369754 ns/op 400559 B/op 32 allocs/op +BenchmarkStabsep_N100-8 25 9448827 ns/op 2649486 B/op 483 allocs/op +PASS diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/bisect-go1.26.4/merge.txt b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/bisect-go1.26.4/merge.txt new file mode 100644 index 0000000..738dd64 --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/bisect-go1.26.4/merge.txt @@ -0,0 +1,80 @@ +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 582 412549 ns/op 473697 B/op 53 allocs/op +BenchmarkMatLog_N50-8 729 327841 ns/op 401089 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8822819 ns/op 2610465 B/op 469 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 580 409940 ns/op 473181 B/op 53 allocs/op +BenchmarkMatLog_N50-8 733 328897 ns/op 399576 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8826276 ns/op 2660262 B/op 473 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 572 434241 ns/op 474180 B/op 53 allocs/op +BenchmarkMatLog_N50-8 726 332270 ns/op 400072 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8813636 ns/op 2638586 B/op 472 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 580 411550 ns/op 473921 B/op 53 allocs/op +BenchmarkMatLog_N50-8 733 327926 ns/op 399553 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8849920 ns/op 2654752 B/op 473 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 577 470392 ns/op 475281 B/op 53 allocs/op +BenchmarkMatLog_N50-8 668 344636 ns/op 399683 B/op 32 allocs/op +BenchmarkStabsep_N100-8 25 9108877 ns/op 2664647 B/op 473 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 572 414215 ns/op 473099 B/op 52 allocs/op +BenchmarkMatLog_N50-8 723 329857 ns/op 400311 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8835317 ns/op 2643744 B/op 472 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 576 411128 ns/op 474984 B/op 53 allocs/op +BenchmarkMatLog_N50-8 722 330884 ns/op 400208 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8859212 ns/op 2659391 B/op 473 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 583 410785 ns/op 473969 B/op 53 allocs/op +BenchmarkMatLog_N50-8 733 329406 ns/op 400249 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8884338 ns/op 2644539 B/op 472 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 583 412318 ns/op 473162 B/op 53 allocs/op +BenchmarkMatLog_N50-8 715 332010 ns/op 400460 B/op 32 allocs/op +BenchmarkStabsep_N100-8 25 8841582 ns/op 2619821 B/op 471 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 580 410352 ns/op 474606 B/op 53 allocs/op +BenchmarkMatLog_N50-8 729 330430 ns/op 399647 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8864341 ns/op 2644154 B/op 472 allocs/op +PASS diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/bisect-go1.26.4/metadata.json b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/bisect-go1.26.4/metadata.json new file mode 100644 index 0000000..cfddb11 --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/bisect-go1.26.4/metadata.json @@ -0,0 +1,165 @@ +{ + "date": "2026-09-12", + "cpu": "Apple M1 Pro", + "GOOS": "darwin", + "GOARCH": "arm64", + "GOMAXPROCS": 8, + "rounds": 10, + "benchtime": "200ms", + "controlsys_commit": "54d5d6b119c8b4351db0cd0bc0ebb4122bde94d4", + "build_flags": "default unless noted per variant", + "tags": [], + "GOFLAGS": "", + "PGO": "none; no default.pgo present", + "order": [ + [ + "old", + "merge", + "worker", + "calibrated", + "new", + "old_align64", + "new_align64" + ], + [ + "new_align64", + "old_align64", + "new", + "calibrated", + "worker", + "merge", + "old" + ], + [ + "old", + "merge", + "worker", + "calibrated", + "new", + "old_align64", + "new_align64" + ], + [ + "new_align64", + "old_align64", + "new", + "calibrated", + "worker", + "merge", + "old" + ], + [ + "old", + "merge", + "worker", + "calibrated", + "new", + "old_align64", + "new_align64" + ], + [ + "new_align64", + "old_align64", + "new", + "calibrated", + "worker", + "merge", + "old" + ], + [ + "old", + "merge", + "worker", + "calibrated", + "new", + "old_align64", + "new_align64" + ], + [ + "new_align64", + "old_align64", + "new", + "calibrated", + "worker", + "merge", + "old" + ], + [ + "old", + "merge", + "worker", + "calibrated", + "new", + "old_align64", + "new_align64" + ], + [ + "new_align64", + "old_align64", + "new", + "calibrated", + "worker", + "merge", + "old" + ] + ], + "variants": { + "old": { + "gonum_commit": "f43007ad8a2d208bc8f47c338e85f05381d9643b", + "sha256": "dcdfa8a5caaf4e8df654563ec2fa368c7854e5551a0400eb9db26721a250d15d", + "go_version": "go1.26.4", + "GOEXPERIMENT": "", + "ldflags": "", + "reverted_file": null + }, + "merge": { + "gonum_commit": "7fd5fefeeb5ce24df4b58ef8a7e2b44361915ab1", + "sha256": "52010952a97766c6e539cbc4eb32e3e133130f8deeca9c050b58911364b32504", + "go_version": "go1.26.4", + "GOEXPERIMENT": "", + "ldflags": "", + "reverted_file": null + }, + "worker": { + "gonum_commit": "ebe982daa841625254b141121265738410ba42ee", + "sha256": "0c9269a24d16c31fcfd91549baba400a6e133318efcdd6f352f65d6754e1090f", + "go_version": "go1.26.4", + "GOEXPERIMENT": "", + "ldflags": "", + "reverted_file": null + }, + "calibrated": { + "gonum_commit": "777029ff0b1fabeaec83cf3786d6025403fa02e3", + "sha256": "32c48d493f18d5b0a3e19d5c80280ef231b27f2c39f1228a04fd5df9f87d6d60", + "go_version": "go1.26.4", + "GOEXPERIMENT": "", + "ldflags": "", + "reverted_file": null + }, + "new": { + "gonum_commit": "a78cf83eff160df0e423b08af0c7642ade964150", + "sha256": "aa1b3e74aacbf59c222b2d37a7144598d019004e80450972382a5ba85a4bfc89", + "go_version": "go1.26.4", + "GOEXPERIMENT": "", + "ldflags": "", + "reverted_file": null + }, + "old_align64": { + "gonum_commit": "f43007ad8a2d208bc8f47c338e85f05381d9643b", + "sha256": "8f06e5d87f675e2f44f95c15648810d239c1fd6b74d81abdf11b5da196233cef", + "go_version": "go1.26.4", + "GOEXPERIMENT": "", + "ldflags": "-funcalign=64", + "reverted_file": null + }, + "new_align64": { + "gonum_commit": "a78cf83eff160df0e423b08af0c7642ade964150", + "sha256": "9bf0d2b338c338eb73ef6c84a499917e66041adb928396fed02f80b5877f5339", + "go_version": "go1.26.4", + "GOEXPERIMENT": "", + "ldflags": "-funcalign=64", + "reverted_file": null + } + }, + "benchstat": "golang.org/x/perf v0.0.0-20260312031701-16a31bc5fbd0" +} diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/bisect-go1.26.4/new.txt b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/bisect-go1.26.4/new.txt new file mode 100644 index 0000000..29deb6e --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/bisect-go1.26.4/new.txt @@ -0,0 +1,80 @@ +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 529 451575 ns/op 474286 B/op 53 allocs/op +BenchmarkMatLog_N50-8 645 370947 ns/op 399544 B/op 32 allocs/op +BenchmarkStabsep_N100-8 25 9401603 ns/op 2642874 B/op 481 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 531 450293 ns/op 474685 B/op 53 allocs/op +BenchmarkMatLog_N50-8 649 367997 ns/op 400344 B/op 32 allocs/op +BenchmarkStabsep_N100-8 25 9400852 ns/op 2661673 B/op 484 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 529 450694 ns/op 474003 B/op 53 allocs/op +BenchmarkMatLog_N50-8 651 369762 ns/op 400204 B/op 32 allocs/op +BenchmarkStabsep_N100-8 25 9418567 ns/op 2654876 B/op 482 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 526 447787 ns/op 474636 B/op 53 allocs/op +BenchmarkMatLog_N50-8 649 367650 ns/op 399981 B/op 32 allocs/op +BenchmarkStabsep_N100-8 25 9423515 ns/op 2665896 B/op 483 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 528 451190 ns/op 474854 B/op 53 allocs/op +BenchmarkMatLog_N50-8 634 372284 ns/op 400131 B/op 32 allocs/op +BenchmarkStabsep_N100-8 25 9466855 ns/op 2644470 B/op 483 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 519 449564 ns/op 473339 B/op 53 allocs/op +BenchmarkMatLog_N50-8 643 372350 ns/op 400078 B/op 32 allocs/op +BenchmarkStabsep_N100-8 25 9517968 ns/op 2671281 B/op 483 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 522 453920 ns/op 474579 B/op 53 allocs/op +BenchmarkMatLog_N50-8 652 368875 ns/op 399500 B/op 32 allocs/op +BenchmarkStabsep_N100-8 25 9401290 ns/op 2659488 B/op 483 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 517 453878 ns/op 474447 B/op 53 allocs/op +BenchmarkMatLog_N50-8 631 369622 ns/op 400275 B/op 32 allocs/op +BenchmarkStabsep_N100-8 25 9402927 ns/op 2654303 B/op 483 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 529 452731 ns/op 473913 B/op 53 allocs/op +BenchmarkMatLog_N50-8 633 369384 ns/op 399761 B/op 32 allocs/op +BenchmarkStabsep_N100-8 25 9441233 ns/op 2626395 B/op 481 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 520 451104 ns/op 474133 B/op 53 allocs/op +BenchmarkMatLog_N50-8 654 369873 ns/op 400639 B/op 32 allocs/op +BenchmarkStabsep_N100-8 25 9526117 ns/op 2643896 B/op 483 allocs/op +PASS diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/bisect-go1.26.4/new_align64.txt b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/bisect-go1.26.4/new_align64.txt new file mode 100644 index 0000000..49e6df2 --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/bisect-go1.26.4/new_align64.txt @@ -0,0 +1,80 @@ +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 579 410201 ns/op 474455 B/op 53 allocs/op +BenchmarkMatLog_N50-8 722 328276 ns/op 400385 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8851508 ns/op 2644510 B/op 482 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 568 407192 ns/op 473625 B/op 53 allocs/op +BenchmarkMatLog_N50-8 732 330149 ns/op 400811 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8883144 ns/op 2656252 B/op 483 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 579 411435 ns/op 474475 B/op 53 allocs/op +BenchmarkMatLog_N50-8 729 329377 ns/op 400676 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8852234 ns/op 2634248 B/op 482 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 565 409680 ns/op 473219 B/op 53 allocs/op +BenchmarkMatLog_N50-8 728 327290 ns/op 400698 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8848354 ns/op 2655740 B/op 483 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 578 409612 ns/op 475410 B/op 53 allocs/op +BenchmarkMatLog_N50-8 734 327932 ns/op 400353 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8956777 ns/op 2667747 B/op 485 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 582 409072 ns/op 475023 B/op 53 allocs/op +BenchmarkMatLog_N50-8 721 328957 ns/op 400924 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8949825 ns/op 2656041 B/op 483 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 573 412044 ns/op 474780 B/op 53 allocs/op +BenchmarkMatLog_N50-8 732 329818 ns/op 400286 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8874619 ns/op 2661765 B/op 484 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 559 411087 ns/op 473448 B/op 53 allocs/op +BenchmarkMatLog_N50-8 733 328303 ns/op 399383 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8913755 ns/op 2666367 B/op 483 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 578 412467 ns/op 474442 B/op 53 allocs/op +BenchmarkMatLog_N50-8 730 329864 ns/op 400720 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8863369 ns/op 2651393 B/op 483 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 559 411632 ns/op 474877 B/op 53 allocs/op +BenchmarkMatLog_N50-8 723 329627 ns/op 400148 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8873808 ns/op 2672669 B/op 485 allocs/op +PASS diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/bisect-go1.26.4/old.txt b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/bisect-go1.26.4/old.txt new file mode 100644 index 0000000..80c5339 --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/bisect-go1.26.4/old.txt @@ -0,0 +1,80 @@ +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 585 408686 ns/op 475021 B/op 53 allocs/op +BenchmarkMatLog_N50-8 720 329527 ns/op 400408 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8834957 ns/op 2650136 B/op 482 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 565 406712 ns/op 474769 B/op 53 allocs/op +BenchmarkMatLog_N50-8 735 325669 ns/op 399764 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8866862 ns/op 2638249 B/op 481 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 560 407283 ns/op 474608 B/op 53 allocs/op +BenchmarkMatLog_N50-8 724 327340 ns/op 401031 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8830460 ns/op 2650477 B/op 483 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 579 409615 ns/op 474454 B/op 53 allocs/op +BenchmarkMatLog_N50-8 728 329553 ns/op 400374 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8895373 ns/op 2656597 B/op 484 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 548 409899 ns/op 474331 B/op 53 allocs/op +BenchmarkMatLog_N50-8 736 327871 ns/op 400670 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8863873 ns/op 2677367 B/op 484 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 582 408990 ns/op 473854 B/op 53 allocs/op +BenchmarkMatLog_N50-8 736 325819 ns/op 400358 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8838237 ns/op 2654835 B/op 482 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 560 409383 ns/op 473774 B/op 53 allocs/op +BenchmarkMatLog_N50-8 732 327524 ns/op 400028 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8852702 ns/op 2660749 B/op 483 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 580 409671 ns/op 474188 B/op 53 allocs/op +BenchmarkMatLog_N50-8 733 330869 ns/op 400097 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8861930 ns/op 2650418 B/op 482 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 559 410889 ns/op 474307 B/op 53 allocs/op +BenchmarkMatLog_N50-8 730 327915 ns/op 400573 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8829792 ns/op 2648997 B/op 482 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 582 407397 ns/op 474050 B/op 53 allocs/op +BenchmarkMatLog_N50-8 735 325686 ns/op 400116 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8892689 ns/op 2628148 B/op 481 allocs/op +PASS diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/bisect-go1.26.4/old_align64.txt b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/bisect-go1.26.4/old_align64.txt new file mode 100644 index 0000000..232d80d --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/bisect-go1.26.4/old_align64.txt @@ -0,0 +1,80 @@ +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 582 406879 ns/op 473645 B/op 53 allocs/op +BenchmarkMatLog_N50-8 740 325580 ns/op 399582 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8934562 ns/op 2672895 B/op 485 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 582 407135 ns/op 474947 B/op 53 allocs/op +BenchmarkMatLog_N50-8 733 326604 ns/op 400272 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8902960 ns/op 2633531 B/op 482 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 583 407377 ns/op 473906 B/op 53 allocs/op +BenchmarkMatLog_N50-8 720 329677 ns/op 400503 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8870224 ns/op 2677363 B/op 484 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 582 408305 ns/op 473539 B/op 53 allocs/op +BenchmarkMatLog_N50-8 726 327075 ns/op 399321 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8879750 ns/op 2656678 B/op 484 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 580 409358 ns/op 474747 B/op 53 allocs/op +BenchmarkMatLog_N50-8 736 327154 ns/op 399988 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8904026 ns/op 2672358 B/op 484 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 573 410015 ns/op 475931 B/op 53 allocs/op +BenchmarkMatLog_N50-8 724 329000 ns/op 400614 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8918136 ns/op 2666506 B/op 484 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 579 410513 ns/op 474288 B/op 53 allocs/op +BenchmarkMatLog_N50-8 726 327266 ns/op 399864 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8864035 ns/op 2661578 B/op 484 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 570 408127 ns/op 474555 B/op 53 allocs/op +BenchmarkMatLog_N50-8 734 326847 ns/op 400338 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8880388 ns/op 2645648 B/op 483 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 571 412188 ns/op 473896 B/op 53 allocs/op +BenchmarkMatLog_N50-8 730 327312 ns/op 400088 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8865995 ns/op 2672027 B/op 484 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 584 408000 ns/op 473880 B/op 53 allocs/op +BenchmarkMatLog_N50-8 734 326930 ns/op 400249 B/op 32 allocs/op +BenchmarkStabsep_N100-8 26 8967982 ns/op 2682819 B/op 484 allocs/op +PASS diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/bisect-go1.26.4/worker.txt b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/bisect-go1.26.4/worker.txt new file mode 100644 index 0000000..52a5ff8 --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/bisect-go1.26.4/worker.txt @@ -0,0 +1,80 @@ +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 530 451001 ns/op 473879 B/op 53 allocs/op +BenchmarkMatLog_N50-8 645 369711 ns/op 401175 B/op 32 allocs/op +BenchmarkStabsep_N100-8 25 9373372 ns/op 2641934 B/op 471 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 530 449965 ns/op 474467 B/op 53 allocs/op +BenchmarkMatLog_N50-8 645 369667 ns/op 400843 B/op 32 allocs/op +BenchmarkStabsep_N100-8 25 9393807 ns/op 2641401 B/op 471 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 523 449305 ns/op 475179 B/op 53 allocs/op +BenchmarkMatLog_N50-8 644 370081 ns/op 400434 B/op 32 allocs/op +BenchmarkStabsep_N100-8 25 9401442 ns/op 2647558 B/op 472 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 529 449070 ns/op 473722 B/op 53 allocs/op +BenchmarkMatLog_N50-8 650 372566 ns/op 400017 B/op 32 allocs/op +BenchmarkStabsep_N100-8 24 9442658 ns/op 2658728 B/op 473 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 508 465109 ns/op 474459 B/op 53 allocs/op +BenchmarkMatLog_N50-8 652 374130 ns/op 400360 B/op 32 allocs/op +BenchmarkStabsep_N100-8 24 9484014 ns/op 2651919 B/op 472 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 526 450115 ns/op 475240 B/op 53 allocs/op +BenchmarkMatLog_N50-8 643 370608 ns/op 400045 B/op 32 allocs/op +BenchmarkStabsep_N100-8 25 9531245 ns/op 2648629 B/op 472 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 522 450567 ns/op 474214 B/op 53 allocs/op +BenchmarkMatLog_N50-8 652 367969 ns/op 401100 B/op 32 allocs/op +BenchmarkStabsep_N100-8 25 9447888 ns/op 2663619 B/op 473 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 518 453986 ns/op 473618 B/op 53 allocs/op +BenchmarkMatLog_N50-8 648 372023 ns/op 400335 B/op 32 allocs/op +BenchmarkStabsep_N100-8 25 9382877 ns/op 2652757 B/op 472 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 526 449975 ns/op 474677 B/op 53 allocs/op +BenchmarkMatLog_N50-8 651 370019 ns/op 400689 B/op 32 allocs/op +BenchmarkStabsep_N100-8 25 9381602 ns/op 2619480 B/op 470 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkD2C_ZOH_N50-8 516 454875 ns/op 475109 B/op 53 allocs/op +BenchmarkMatLog_N50-8 640 368616 ns/op 399022 B/op 31 allocs/op +BenchmarkStabsep_N100-8 25 9377892 ns/op 2659968 B/op 473 allocs/op +PASS diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/code-comparison.txt b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/code-comparison.txt new file mode 100644 index 0000000..0c8b303 --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/code-comparison.txt @@ -0,0 +1,36 @@ +Implementation.Dtrsm old 0x100127980 mod64= 0 instructions= 888 +Implementation.Dtrsm new 0x100128410 mod64= 16 instructions= 888 +Implementation.Dtrsm no_gemv 0x100127bc0 mod64= 0 instructions= 888 +Implementation.Dtrsm no_gemm 0x1001281d0 mod64= 16 instructions= 888 +new normalized diff lines: 90 +no_gemv normalized diff lines: 0 + +no_gemm normalized diff lines: 77 +f64.Ger old 0x100120dd0 mod64= 16 instructions= 132 +f64.Ger new 0x100120e10 mod64= 16 instructions= 132 +f64.Ger no_gemv 0x100120dd0 mod64= 16 instructions= 132 +f64.Ger no_gemm 0x100120e10 mod64= 16 instructions= 132 +new normalized diff lines: 0 + +no_gemv normalized diff lines: 0 + +no_gemm normalized diff lines: 0 + +Implementation.Dgemv old 0x100124470 mod64= 48 instructions= 200 +Implementation.Dgemv new 0x100124eb0 mod64= 48 instructions= 220 +Implementation.Dgemv no_gemv 0x1001246b0 mod64= 48 instructions= 200 +Implementation.Dgemv no_gemm 0x100124c70 mod64= 48 instructions= 220 +new normalized diff lines: 304 +no_gemv normalized diff lines: 0 + +no_gemm normalized diff lines: 302 +dgemmSerialNotNot old 0x100122b60 mod64= 32 instructions= 96 +dgemmSerialNotNot new 0x100122de0 mod64= 32 instructions= 96 +dgemmSerialNotNot no_gemv 0x100122da0 mod64= 32 instructions= 96 +dgemmSerialNotNot no_gemm 0x100122ba0 mod64= 32 instructions= 96 +new normalized diff lines: 0 + +no_gemv normalized diff lines: 0 + +no_gemm normalized diff lines: 0 + diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.26.4/benchstat.txt b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.26.4/benchstat.txt new file mode 100644 index 0000000..f45d6ca --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.26.4/benchstat.txt @@ -0,0 +1,43 @@ +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro + │ old.txt │ new.txt │ master.txt │ + │ sec/op │ sec/op vs base │ sec/op vs base │ +Reduce-8 46.47µ ± 5% 49.19µ ± 5% +5.85% (p=0.005 n=10) 49.74µ ± 5% +7.05% (p=0.004 n=10) +DiscretizeZOH-8 21.35µ ± 7% 22.58µ ± 6% +5.74% (p=0.003 n=10) 23.23µ ± 4% +8.78% (p=0.001 n=10) +Simulate_DCMotor-8 47.36µ ± 4% 40.37µ ± 2% -14.76% (p=0.000 n=10) 40.26µ ± 2% -15.00% (p=0.000 n=10) +Reg_N100_M5_P5-8 79.39µ ± 7% 59.99µ ± 6% -24.43% (p=0.000 n=10) 62.16µ ± 4% -21.70% (p=0.000 n=10) +D2C_ZOH_N50-8 413.1µ ± 4% 453.2µ ± 2% +9.69% (p=0.000 n=10) 462.2µ ± 2% +11.87% (p=0.000 n=10) +MatLog_N50-8 335.2µ ± 3% 377.7µ ± 7% +12.67% (p=0.000 n=10) 381.1µ ± 3% +13.68% (p=0.000 n=10) +SystemFRD_SISO_10000-8 237.9µ ± 7% 237.3µ ± 5% ~ (p=0.579 n=10) 236.8µ ± 2% ~ (p=0.971 n=10) +Stabsep_N100-8 9.030m ± 3% 9.626m ± 2% +6.60% (p=0.000 n=10) 9.607m ± 2% +6.39% (p=0.000 n=10) +Modsep_N50-8 1.453m ± 2% 1.535m ± 2% +5.63% (p=0.000 n=10) 1.519m ± 1% +4.56% (p=0.000 n=10) +geomean 227.2µ 227.2µ +0.01% 229.4µ +0.98% + + │ old.txt │ new.txt │ master.txt │ + │ B/op │ B/op vs base │ B/op vs base │ +Reduce-8 52.44Ki ± 0% 52.44Ki ± 0% ~ (p=0.926 n=10) 52.44Ki ± 0% ~ (p=0.341 n=10) +DiscretizeZOH-8 21.66Ki ± 0% 21.67Ki ± 0% ~ (p=0.869 n=10) 21.66Ki ± 0% ~ (p=0.515 n=10) +Simulate_DCMotor-8 19.67Ki ± 0% 16.28Ki ± 0% -17.21% (p=0.000 n=10) 16.28Ki ± 0% -17.21% (p=0.000 n=10) +Reg_N100_M5_P5-8 424.2Ki ± 0% 421.4Ki ± 0% -0.67% (p=0.000 n=10) 421.4Ki ± 0% -0.67% (p=0.000 n=10) +D2C_ZOH_N50-8 463.5Ki ± 0% 463.6Ki ± 0% ~ (p=0.631 n=10) 462.9Ki ± 0% ~ (p=0.052 n=10) +MatLog_N50-8 391.3Ki ± 0% 391.3Ki ± 0% ~ (p=0.529 n=10) 391.1Ki ± 0% ~ (p=0.393 n=10) +SystemFRD_SISO_10000-8 922.6Ki ± 0% 922.6Ki ± 0% +0.01% (p=0.011 n=10) 922.7Ki ± 0% +0.01% (p=0.008 n=10) +Stabsep_N100-8 2.534Mi ± 1% 2.530Mi ± 1% ~ (p=0.631 n=10) 2.530Mi ± 0% ~ (p=0.579 n=10) +Modsep_N50-8 641.4Ki ± 0% 640.7Ki ± 0% ~ (p=0.105 n=10) 640.5Ki ± 0% ~ (p=0.052 n=10) +geomean 240.0Ki 234.7Ki -2.18% 234.7Ki -2.20% + + │ old.txt │ new.txt │ master.txt │ + │ allocs/op │ allocs/op vs base │ allocs/op vs base │ +Reduce-8 170.0 ± 0% 170.0 ± 0% ~ (p=1.000 n=10) ¹ 170.0 ± 0% ~ (p=1.000 n=10) ¹ +DiscretizeZOH-8 28.00 ± 0% 28.00 ± 0% ~ (p=1.000 n=10) ¹ 28.00 ± 0% ~ (p=1.000 n=10) ¹ +Simulate_DCMotor-8 45.00 ± 0% 11.00 ± 0% -75.56% (p=0.000 n=10) 11.00 ± 0% -75.56% (p=0.000 n=10) +Reg_N100_M5_P5-8 55.00 ± 0% 25.00 ± 0% -54.55% (p=0.000 n=10) 25.00 ± 0% -54.55% (p=0.000 n=10) +D2C_ZOH_N50-8 53.00 ± 0% 53.00 ± 0% ~ (p=1.000 n=10) ¹ 53.00 ± 0% ~ (p=1.000 n=10) ¹ +MatLog_N50-8 32.00 ± 0% 32.00 ± 0% ~ (p=1.000 n=10) ¹ 32.00 ± 0% ~ (p=1.000 n=10) ¹ +SystemFRD_SISO_10000-8 60.00 ± 2% 61.00 ± 0% +1.67% (p=0.003 n=10) 61.00 ± 0% +1.67% (p=0.003 n=10) +Stabsep_N100-8 481.0 ± 0% 483.0 ± 0% +0.42% (p=0.000 n=10) 483.0 ± 0% +0.42% (p=0.000 n=10) +Modsep_N50-8 143.5 ± 0% 143.0 ± 0% -0.35% (p=0.033 n=10) 143.0 ± 0% -0.35% (p=0.033 n=10) +geomean 75.81 59.50 -21.51% 59.50 -21.51% +¹ all samples are equal diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.26.4/master.txt b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.26.4/master.txt new file mode 100644 index 0000000..268dee8 --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.26.4/master.txt @@ -0,0 +1,140 @@ +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 5613 55017 ns/op 53700 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 15310 24039 ns/op 22182 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 8671 39850 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6207 61613 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 744 472440 ns/op 473713 B/op 53 allocs/op +BenchmarkMatLog_N50-8 906 383432 ns/op 399668 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1306 237662 ns/op 944796 B/op 61 allocs/op +BenchmarkStabsep_N100-8 37 9734580 ns/op 2656131 B/op 483 allocs/op +BenchmarkModsep_N50-8 230 1531503 ns/op 657851 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6841 50235 ns/op 53688 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 15771 23001 ns/op 22185 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 8893 40845 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6237 63456 ns/op 431475 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 753 475127 ns/op 474047 B/op 53 allocs/op +BenchmarkMatLog_N50-8 903 386659 ns/op 399667 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1480 239717 ns/op 944796 B/op 61 allocs/op +BenchmarkStabsep_N100-8 37 9778543 ns/op 2642167 B/op 482 allocs/op +BenchmarkModsep_N50-8 235 1540286 ns/op 654943 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6613 52385 ns/op 53699 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 14871 23453 ns/op 22184 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9105 40145 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6030 63460 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 770 461806 ns/op 473369 B/op 53 allocs/op +BenchmarkMatLog_N50-8 877 383042 ns/op 400826 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1688 231875 ns/op 944795 B/op 61 allocs/op +BenchmarkStabsep_N100-8 38 9529077 ns/op 2653670 B/op 483 allocs/op +BenchmarkModsep_N50-8 236 1545441 ns/op 654531 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6340 50757 ns/op 53710 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 15414 22203 ns/op 22179 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9116 40022 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6601 59759 ns/op 431475 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 795 450160 ns/op 473827 B/op 53 allocs/op +BenchmarkMatLog_N50-8 955 369953 ns/op 400627 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1488 229595 ns/op 944799 B/op 61 allocs/op +BenchmarkStabsep_N100-8 38 9563745 ns/op 2643089 B/op 482 allocs/op +BenchmarkModsep_N50-8 235 1505492 ns/op 654967 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6826 48126 ns/op 53698 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 15633 24022 ns/op 22193 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 8788 40532 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 5432 61572 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 794 450855 ns/op 474525 B/op 53 allocs/op +BenchmarkMatLog_N50-8 979 371555 ns/op 400400 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1410 234892 ns/op 944799 B/op 61 allocs/op +BenchmarkStabsep_N100-8 37 9436697 ns/op 2664135 B/op 483 allocs/op +BenchmarkModsep_N50-8 237 1495848 ns/op 655728 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6517 47979 ns/op 53712 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 15886 22317 ns/op 22173 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9081 40370 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 5361 66683 ns/op 431475 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 744 462960 ns/op 474052 B/op 53 allocs/op +BenchmarkMatLog_N50-8 921 389658 ns/op 400557 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1425 232921 ns/op 944786 B/op 61 allocs/op +BenchmarkStabsep_N100-8 37 9777246 ns/op 2652966 B/op 484 allocs/op +BenchmarkModsep_N50-8 232 1535642 ns/op 657476 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6636 48299 ns/op 53677 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16057 22230 ns/op 22181 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9109 39316 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6111 62700 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 752 467122 ns/op 473853 B/op 53 allocs/op +BenchmarkMatLog_N50-8 954 379282 ns/op 401056 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1563 240380 ns/op 944771 B/op 61 allocs/op +BenchmarkStabsep_N100-8 37 9700900 ns/op 2648954 B/op 483 allocs/op +BenchmarkModsep_N50-8 232 1507419 ns/op 656016 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6398 48551 ns/op 53686 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16152 22809 ns/op 22195 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9141 39598 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 5912 59998 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 766 455213 ns/op 474684 B/op 53 allocs/op +BenchmarkMatLog_N50-8 970 370729 ns/op 401036 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1470 237800 ns/op 944785 B/op 61 allocs/op +BenchmarkStabsep_N100-8 38 9498296 ns/op 2650154 B/op 483 allocs/op +BenchmarkModsep_N50-8 240 1499055 ns/op 656824 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6048 50344 ns/op 53689 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 15098 23547 ns/op 22185 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 8782 40433 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 5761 57934 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 790 451597 ns/op 474750 B/op 53 allocs/op +BenchmarkMatLog_N50-8 936 382931 ns/op 400235 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1392 246812 ns/op 944755 B/op 61 allocs/op +BenchmarkStabsep_N100-8 36 9650990 ns/op 2654992 B/op 483 allocs/op +BenchmarkModsep_N50-8 236 1507956 ns/op 656392 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6364 49249 ns/op 53678 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 15726 30629 ns/op 22197 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 8509 41517 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 5466 62774 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 772 462569 ns/op 474814 B/op 53 allocs/op +BenchmarkMatLog_N50-8 909 373681 ns/op 400473 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1444 235973 ns/op 944794 B/op 61 allocs/op +BenchmarkStabsep_N100-8 37 9481182 ns/op 2655792 B/op 483 allocs/op +BenchmarkModsep_N50-8 240 1530798 ns/op 654518 B/op 143 allocs/op +PASS diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.26.4/metadata.json b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.26.4/metadata.json new file mode 100644 index 0000000..1bb93b2 --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.26.4/metadata.json @@ -0,0 +1,93 @@ +{ + "date": "2026-09-12", + "cpu": "Apple M1 Pro", + "GOOS": "darwin", + "GOARCH": "arm64", + "GOMAXPROCS": 8, + "rounds": 10, + "benchtime": "300ms", + "controlsys_commit": "54d5d6b119c8b4351db0cd0bc0ebb4122bde94d4", + "build_flags": "default unless noted per variant", + "tags": [], + "GOFLAGS": "", + "PGO": "none; no default.pgo present", + "order": [ + [ + "old", + "new", + "master" + ], + [ + "master", + "new", + "old" + ], + [ + "old", + "new", + "master" + ], + [ + "master", + "new", + "old" + ], + [ + "old", + "new", + "master" + ], + [ + "master", + "new", + "old" + ], + [ + "old", + "new", + "master" + ], + [ + "master", + "new", + "old" + ], + [ + "old", + "new", + "master" + ], + [ + "master", + "new", + "old" + ] + ], + "variants": { + "old": { + "gonum_commit": "f43007ad8a2d208bc8f47c338e85f05381d9643b", + "sha256": "5c0dcb81d615638d998758ce33796d6fc7cafa20e5c3c221695e7630fd82ae57", + "go_version": "go1.26.4", + "GOEXPERIMENT": "", + "ldflags": "", + "reverted_file": null + }, + "new": { + "gonum_commit": "a78cf83eff160df0e423b08af0c7642ade964150", + "sha256": "f427b78a589e5534a194b5bdd3994b6b091cb6328468a5f94f7cedc9e36f49b1", + "go_version": "go1.26.4", + "GOEXPERIMENT": "", + "ldflags": "", + "reverted_file": null + }, + "master": { + "gonum_commit": "1c42629c5cb53235d9ae074bb1be6da6471771da", + "sha256": "36b980704fde553dbc6a1923a461bba19a176f782b78c558b6da326bf923cab0", + "go_version": "go1.26.4", + "GOEXPERIMENT": "", + "ldflags": "", + "reverted_file": null + } + }, + "benchstat": "golang.org/x/perf v0.0.0-20260312031701-16a31bc5fbd0" +} diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.26.4/new.txt b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.26.4/new.txt new file mode 100644 index 0000000..687c864 --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.26.4/new.txt @@ -0,0 +1,140 @@ +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6722 51207 ns/op 53710 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 15058 23715 ns/op 22187 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9052 40582 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6012 60001 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 783 492546 ns/op 473623 B/op 53 allocs/op +BenchmarkMatLog_N50-8 909 405900 ns/op 399614 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1555 244982 ns/op 944766 B/op 61 allocs/op +BenchmarkStabsep_N100-8 36 9823210 ns/op 2660089 B/op 483 allocs/op +BenchmarkModsep_N50-8 230 1541796 ns/op 656865 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6398 52266 ns/op 53700 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 15244 23604 ns/op 22185 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 8794 40732 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 5403 69656 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 763 461554 ns/op 475046 B/op 53 allocs/op +BenchmarkMatLog_N50-8 940 383299 ns/op 400251 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1401 248191 ns/op 944795 B/op 61 allocs/op +BenchmarkStabsep_N100-8 34 9867745 ns/op 2663115 B/op 484 allocs/op +BenchmarkModsep_N50-8 231 1543188 ns/op 656038 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6694 49213 ns/op 53694 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 15529 22610 ns/op 22183 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9075 40700 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6109 63404 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 770 455356 ns/op 474558 B/op 53 allocs/op +BenchmarkMatLog_N50-8 960 384308 ns/op 400387 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1612 251227 ns/op 944796 B/op 61 allocs/op +BenchmarkStabsep_N100-8 36 9844321 ns/op 2655415 B/op 483 allocs/op +BenchmarkModsep_N50-8 230 1576435 ns/op 657825 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6830 48484 ns/op 53715 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16017 21983 ns/op 22172 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9170 39507 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 5968 60851 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 794 451956 ns/op 474262 B/op 53 allocs/op +BenchmarkMatLog_N50-8 944 372125 ns/op 400965 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1456 234132 ns/op 944807 B/op 61 allocs/op +BenchmarkStabsep_N100-8 37 9589236 ns/op 2645990 B/op 483 allocs/op +BenchmarkModsep_N50-8 236 1524790 ns/op 654604 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6740 49928 ns/op 53683 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 15570 22546 ns/op 22186 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 8997 40143 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6024 61083 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 800 453083 ns/op 475383 B/op 53 allocs/op +BenchmarkMatLog_N50-8 973 369440 ns/op 401054 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1472 229996 ns/op 944785 B/op 61 allocs/op +BenchmarkStabsep_N100-8 38 9494171 ns/op 2642681 B/op 482 allocs/op +BenchmarkModsep_N50-8 240 1496806 ns/op 655032 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6603 48107 ns/op 53689 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 15765 22537 ns/op 22179 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 8804 39476 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 5844 59684 ns/op 431473 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 799 453268 ns/op 474759 B/op 53 allocs/op +BenchmarkMatLog_N50-8 975 368881 ns/op 400937 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1587 221093 ns/op 944812 B/op 61 allocs/op +BenchmarkStabsep_N100-8 37 9452812 ns/op 2630089 B/op 481 allocs/op +BenchmarkModsep_N50-8 240 1545512 ns/op 656170 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6712 49162 ns/op 53712 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16168 22526 ns/op 22186 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9146 39351 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 5685 59582 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 786 451124 ns/op 473727 B/op 53 allocs/op +BenchmarkMatLog_N50-8 976 370315 ns/op 400903 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1580 231243 ns/op 944784 B/op 61 allocs/op +BenchmarkStabsep_N100-8 38 9399838 ns/op 2630962 B/op 481 allocs/op +BenchmarkModsep_N50-8 238 1543244 ns/op 654530 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6705 48561 ns/op 53684 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 15765 22160 ns/op 22178 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9078 40720 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6356 59976 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 792 449320 ns/op 475036 B/op 53 allocs/op +BenchmarkMatLog_N50-8 979 371505 ns/op 401417 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1551 233303 ns/op 944799 B/op 61 allocs/op +BenchmarkStabsep_N100-8 38 9453146 ns/op 2657050 B/op 483 allocs/op +BenchmarkModsep_N50-8 240 1508557 ns/op 657255 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6585 47953 ns/op 53709 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 15972 23845 ns/op 22192 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 8948 40180 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6447 57672 ns/op 431475 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 794 452154 ns/op 474680 B/op 53 allocs/op +BenchmarkMatLog_N50-8 969 475819 ns/op 400165 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1515 247426 ns/op 944764 B/op 61 allocs/op +BenchmarkStabsep_N100-8 36 9851101 ns/op 2660599 B/op 484 allocs/op +BenchmarkModsep_N50-8 232 1517766 ns/op 656840 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6543 51570 ns/op 53697 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 15838 23996 ns/op 22186 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 8925 40563 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6184 59478 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 782 457992 ns/op 475112 B/op 53 allocs/op +BenchmarkMatLog_N50-8 912 393642 ns/op 399909 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1372 240382 ns/op 944781 B/op 61 allocs/op +BenchmarkStabsep_N100-8 37 9662901 ns/op 2649449 B/op 483 allocs/op +BenchmarkModsep_N50-8 237 1527928 ns/op 655739 B/op 143 allocs/op +PASS diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.26.4/old.txt b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.26.4/old.txt new file mode 100644 index 0000000..ef0c316 --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.26.4/old.txt @@ -0,0 +1,140 @@ +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7152 46074 ns/op 53700 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16576 21317 ns/op 22179 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 7578 47995 ns/op 20137 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 5509 79622 ns/op 434363 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 853 430916 ns/op 474507 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1008 337475 ns/op 400600 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1690 237461 ns/op 944701 B/op 60 allocs/op +BenchmarkStabsep_N100-8 38 9277308 ns/op 2640938 B/op 480 allocs/op +BenchmarkModsep_N50-8 241 1466449 ns/op 658506 B/op 144 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6624 49556 ns/op 53716 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 15825 22825 ns/op 22173 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 7248 49110 ns/op 20143 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 4676 74607 ns/op 434358 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 830 413727 ns/op 474348 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1032 341212 ns/op 400986 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1454 249831 ns/op 944717 B/op 60 allocs/op +BenchmarkStabsep_N100-8 38 9196565 ns/op 2659384 B/op 481 allocs/op +BenchmarkModsep_N50-8 241 1468744 ns/op 655062 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6756 48875 ns/op 53688 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 15778 23364 ns/op 22189 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 7198 48662 ns/op 20136 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 5016 84840 ns/op 434363 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 808 436256 ns/op 473976 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1030 358270 ns/op 400814 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1564 253215 ns/op 944711 B/op 60 allocs/op +BenchmarkStabsep_N100-8 39 9170046 ns/op 2652807 B/op 480 allocs/op +BenchmarkModsep_N50-8 242 1468261 ns/op 657875 B/op 144 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6957 46320 ns/op 53716 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16438 21442 ns/op 22189 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 7562 46791 ns/op 20136 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 5202 80958 ns/op 434363 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 864 413432 ns/op 475116 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1087 333186 ns/op 401250 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1490 242706 ns/op 944788 B/op 61 allocs/op +BenchmarkStabsep_N100-8 39 8938478 ns/op 2660068 B/op 481 allocs/op +BenchmarkModsep_N50-8 250 1440630 ns/op 656758 B/op 144 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7080 46426 ns/op 53695 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16702 21575 ns/op 22190 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 7603 46493 ns/op 20135 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 5083 75984 ns/op 434365 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 862 411581 ns/op 474692 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1087 329057 ns/op 400516 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1542 238346 ns/op 944837 B/op 61 allocs/op +BenchmarkStabsep_N100-8 39 8913919 ns/op 2663766 B/op 481 allocs/op +BenchmarkModsep_N50-8 250 1435598 ns/op 656869 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6535 48870 ns/op 53704 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 15616 21286 ns/op 22182 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 7600 49272 ns/op 20138 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 5217 82298 ns/op 434364 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 854 410802 ns/op 474334 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1066 346434 ns/op 400345 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1548 220820 ns/op 944697 B/op 60 allocs/op +BenchmarkStabsep_N100-8 39 9345479 ns/op 2660546 B/op 481 allocs/op +BenchmarkModsep_N50-8 241 1479516 ns/op 658717 B/op 144 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6712 46704 ns/op 53689 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16720 21313 ns/op 22184 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 7694 47554 ns/op 20141 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 4503 85444 ns/op 434357 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 838 429386 ns/op 475574 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1057 337282 ns/op 400976 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1730 226085 ns/op 944733 B/op 60 allocs/op +BenchmarkStabsep_N100-8 40 9121596 ns/op 2664207 B/op 481 allocs/op +BenchmarkModsep_N50-8 246 1465501 ns/op 656185 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7808 46364 ns/op 53688 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16767 21273 ns/op 22183 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 7657 47173 ns/op 20143 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 5176 73834 ns/op 434358 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 874 409668 ns/op 475734 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1093 329226 ns/op 400354 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1476 240101 ns/op 944780 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8888289 ns/op 2643660 B/op 481 allocs/op +BenchmarkModsep_N50-8 252 1419447 ns/op 655789 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6771 46402 ns/op 53710 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16462 21283 ns/op 22184 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 7624 46738 ns/op 20138 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 5590 71900 ns/op 434364 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 866 408213 ns/op 475186 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1093 329798 ns/op 401301 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1702 215934 ns/op 944710 B/op 60 allocs/op +BenchmarkStabsep_N100-8 40 8907433 ns/op 2617934 B/op 478 allocs/op +BenchmarkModsep_N50-8 252 1440257 ns/op 657775 B/op 144 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6874 46508 ns/op 53686 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16766 21386 ns/op 22179 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 7777 46618 ns/op 20135 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 4893 79150 ns/op 434369 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 867 412865 ns/op 474451 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1088 331092 ns/op 400138 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1526 223915 ns/op 944728 B/op 60 allocs/op +BenchmarkStabsep_N100-8 40 8898181 ns/op 2654169 B/op 481 allocs/op +BenchmarkModsep_N50-8 249 1420257 ns/op 656776 B/op 143 allocs/op +PASS diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.27.1/benchstat.txt b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.27.1/benchstat.txt new file mode 100644 index 0000000..83be9a1 --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.27.1/benchstat.txt @@ -0,0 +1,43 @@ +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro + │ old.txt │ new.txt │ master.txt │ no_gemv.txt │ no_gemm.txt │ + │ sec/op │ sec/op vs base │ sec/op vs base │ sec/op vs base │ sec/op vs base │ +Reduce-8 45.19µ ± 3% 45.55µ ± 1% ~ (p=0.315 n=10) 45.38µ ± 2% ~ (p=0.739 n=10) 45.03µ ± 1% ~ (p=0.529 n=10) 45.03µ ± 1% ~ (p=0.447 n=10) +DiscretizeZOH-8 21.35µ ± 2% 21.44µ ± 8% ~ (p=0.353 n=10) 21.46µ ± 3% ~ (p=0.280 n=10) 21.31µ ± 1% ~ (p=0.912 n=10) 21.61µ ± 1% ~ (p=0.075 n=10) +Simulate_DCMotor-8 44.44µ ± 1% 38.12µ ± 1% -14.22% (p=0.000 n=10) 37.99µ ± 1% -14.51% (p=0.000 n=10) 36.42µ ± 1% -18.05% (p=0.000 n=10) 45.56µ ± 3% +2.53% (p=0.000 n=10) +Reg_N100_M5_P5-8 80.56µ ± 3% 61.20µ ± 4% -24.02% (p=0.000 n=10) 60.60µ ± 6% -24.78% (p=0.000 n=10) 59.90µ ± 2% -25.64% (p=0.000 n=10) 80.10µ ± 5% ~ (p=0.436 n=10) +D2C_ZOH_N50-8 416.1µ ± 3% 418.7µ ± 0% ~ (p=0.123 n=10) 419.1µ ± 1% ~ (p=0.075 n=10) 415.9µ ± 1% ~ (p=0.393 n=10) 422.8µ ± 1% +1.59% (p=0.019 n=10) +MatLog_N50-8 335.4µ ± 5% 340.0µ ± 4% ~ (p=0.218 n=10) 338.7µ ± 1% ~ (p=0.315 n=10) 332.7µ ± 1% ~ (p=0.052 n=10) 338.5µ ± 1% ~ (p=0.247 n=10) +SystemFRD_SISO_10000-8 228.5µ ± 8% 235.4µ ± 7% ~ (p=0.247 n=10) 235.3µ ± 3% ~ (p=0.247 n=10) 227.7µ ± 2% ~ (p=0.853 n=10) 227.8µ ± 9% ~ (p=0.912 n=10) +Stabsep_N100-8 8.672m ± 4% 8.697m ± 3% ~ (p=0.684 n=10) 8.674m ± 1% ~ (p=0.971 n=10) 8.671m ± 1% ~ (p=0.631 n=10) 8.700m ± 0% ~ (p=0.684 n=10) +Modsep_N50-8 1.442m ± 2% 1.434m ± 1% ~ (p=0.315 n=10) 1.430m ± 1% ~ (p=0.123 n=10) 1.431m ± 1% -0.77% (p=0.029 n=10) 1.436m ± 1% ~ (p=0.247 n=10) +geomean 223.2µ 214.3µ -4.01% 213.7µ -4.28% 210.7µ -5.63% 224.4µ +0.54% + + │ old.txt │ new.txt │ master.txt │ no_gemv.txt │ no_gemm.txt │ + │ B/op │ B/op vs base │ B/op vs base │ B/op vs base │ B/op vs base │ +Reduce-8 52.43Ki ± 0% 52.44Ki ± 0% ~ (p=0.137 n=10) 52.44Ki ± 0% ~ (p=0.255 n=10) 52.43Ki ± 0% ~ (p=0.470 n=10) 52.43Ki ± 0% ~ (p=0.926 n=10) +DiscretizeZOH-8 21.67Ki ± 0% 21.66Ki ± 0% ~ (p=0.515 n=10) 21.66Ki ± 0% ~ (p=0.309 n=10) 21.66Ki ± 0% -0.02% (p=0.015 n=10) 21.66Ki ± 0% ~ (p=0.156 n=10) +Simulate_DCMotor-8 19.67Ki ± 0% 16.28Ki ± 0% -17.23% (p=0.000 n=10) 16.28Ki ± 0% -17.23% (p=0.000 n=10) 16.28Ki ± 0% -17.23% (p=0.000 n=10) 19.67Ki ± 0% ~ (p=0.053 n=10) +Reg_N100_M5_P5-8 424.2Ki ± 0% 421.4Ki ± 0% -0.66% (p=0.000 n=10) 421.4Ki ± 0% -0.66% (p=0.000 n=10) 421.4Ki ± 0% -0.66% (p=0.000 n=10) 424.2Ki ± 0% +0.00% (p=0.016 n=10) +D2C_ZOH_N50-8 464.0Ki ± 0% 463.3Ki ± 0% -0.14% (p=0.009 n=10) 463.2Ki ± 0% -0.17% (p=0.001 n=10) 463.3Ki ± 0% -0.15% (p=0.015 n=10) 463.3Ki ± 0% -0.14% (p=0.023 n=10) +MatLog_N50-8 391.3Ki ± 0% 391.1Ki ± 0% ~ (p=0.436 n=10) 390.9Ki ± 0% ~ (p=0.089 n=10) 390.8Ki ± 0% -0.13% (p=0.043 n=10) 391.3Ki ± 0% ~ (p=0.481 n=10) +SystemFRD_SISO_10000-8 922.6Ki ± 0% 922.6Ki ± 0% +0.01% (p=0.000 n=10) 922.6Ki ± 0% +0.01% (p=0.000 n=10) 922.7Ki ± 0% +0.01% (p=0.000 n=10) 922.6Ki ± 0% ~ (p=0.699 n=10) +Stabsep_N100-8 2.536Mi ± 0% 2.541Mi ± 0% +0.21% (p=0.007 n=10) 2.542Mi ± 0% ~ (p=0.075 n=10) 2.536Mi ± 0% ~ (p=0.631 n=10) 2.525Mi ± 0% -0.42% (p=0.007 n=10) +Modsep_N50-8 642.7Ki ± 0% 640.7Ki ± 0% -0.31% (p=0.029 n=10) 640.6Ki ± 0% -0.33% (p=0.009 n=10) 640.8Ki ± 0% -0.29% (p=0.023 n=10) 640.0Ki ± 1% ~ (p=0.089 n=10) +geomean 240.1Ki 234.8Ki -2.18% 234.8Ki -2.19% 234.8Ki -2.21% 239.8Ki -0.11% + + │ old.txt │ new.txt │ master.txt │ no_gemv.txt │ no_gemm.txt │ + │ allocs/op │ allocs/op vs base │ allocs/op vs base │ allocs/op vs base │ allocs/op vs base │ +Reduce-8 170.0 ± 0% 170.0 ± 0% ~ (p=1.000 n=10) ¹ 170.0 ± 0% ~ (p=1.000 n=10) ¹ 170.0 ± 0% ~ (p=1.000 n=10) ¹ 170.0 ± 0% ~ (p=1.000 n=10) ¹ +DiscretizeZOH-8 28.00 ± 0% 28.00 ± 0% ~ (p=1.000 n=10) ¹ 28.00 ± 0% ~ (p=1.000 n=10) ¹ 28.00 ± 0% ~ (p=1.000 n=10) ¹ 28.00 ± 0% ~ (p=1.000 n=10) ¹ +Simulate_DCMotor-8 45.00 ± 0% 11.00 ± 0% -75.56% (p=0.000 n=10) 11.00 ± 0% -75.56% (p=0.000 n=10) 11.00 ± 0% -75.56% (p=0.000 n=10) 45.00 ± 0% ~ (p=1.000 n=10) ¹ +Reg_N100_M5_P5-8 55.00 ± 0% 25.00 ± 0% -54.55% (p=0.000 n=10) 25.00 ± 0% -54.55% (p=0.000 n=10) 25.00 ± 0% -54.55% (p=0.000 n=10) 55.00 ± 0% ~ (p=1.000 n=10) ¹ +D2C_ZOH_N50-8 53.00 ± 0% 53.00 ± 0% ~ (p=1.000 n=10) ¹ 53.00 ± 0% ~ (p=1.000 n=10) ¹ 53.00 ± 0% ~ (p=1.000 n=10) ¹ 53.00 ± 0% ~ (p=1.000 n=10) ¹ +MatLog_N50-8 32.00 ± 0% 32.00 ± 0% ~ (p=1.000 n=10) ¹ 32.00 ± 0% ~ (p=1.000 n=10) ¹ 32.00 ± 0% ~ (p=1.000 n=10) ¹ 32.00 ± 0% ~ (p=1.000 n=10) ¹ +SystemFRD_SISO_10000-8 60.00 ± 2% 61.00 ± 0% +1.67% (p=0.003 n=10) 61.00 ± 0% +1.67% (p=0.003 n=10) 61.00 ± 0% +1.67% (p=0.003 n=10) 60.00 ± 2% ~ (p=1.000 n=10) +Stabsep_N100-8 480.0 ± 0% 484.0 ± 0% +0.83% (p=0.000 n=10) 483.5 ± 0% +0.73% (p=0.000 n=10) 483.0 ± 0% +0.63% (p=0.000 n=10) 480.0 ± 0% ~ (p=0.750 n=10) +Modsep_N50-8 143.5 ± 0% 143.0 ± 0% -0.35% (p=0.033 n=10) 143.0 ± 0% -0.35% (p=0.033 n=10) 143.0 ± 0% -0.35% (p=0.033 n=10) 143.0 ± 1% ~ (p=0.650 n=10) +geomean 75.80 59.52 -21.48% 59.51 -21.48% 59.50 -21.49% 75.77 -0.04% +¹ all samples are equal diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.27.1/master.txt b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.27.1/master.txt new file mode 100644 index 0000000..1ab3b05 --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.27.1/master.txt @@ -0,0 +1,140 @@ +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7309 45542 ns/op 53707 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16872 21583 ns/op 22184 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9410 38240 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6277 58985 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 853 420781 ns/op 474502 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1030 335551 ns/op 400562 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1682 231801 ns/op 944786 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8790345 ns/op 2668535 B/op 484 allocs/op +BenchmarkModsep_N50-8 250 1431605 ns/op 657200 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7011 45568 ns/op 53700 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16827 21674 ns/op 22181 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9464 38145 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6144 60752 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 856 418945 ns/op 474591 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1077 339417 ns/op 399658 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1366 223708 ns/op 944812 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8646636 ns/op 2676131 B/op 484 allocs/op +BenchmarkModsep_N50-8 247 1428838 ns/op 655143 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6345 47707 ns/op 53676 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16730 21469 ns/op 22187 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9458 37867 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 5896 63966 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 823 423875 ns/op 474018 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1064 338722 ns/op 400641 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1450 245262 ns/op 944804 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8657992 ns/op 2668999 B/op 484 allocs/op +BenchmarkModsep_N50-8 249 1432170 ns/op 655045 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7023 45527 ns/op 53712 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 17002 21309 ns/op 22181 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9561 37955 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6075 61056 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 836 418104 ns/op 474010 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1081 336515 ns/op 400245 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1377 233190 ns/op 944790 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8663438 ns/op 2667924 B/op 483 allocs/op +BenchmarkModsep_N50-8 249 1425032 ns/op 656138 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6876 45238 ns/op 53678 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16768 21459 ns/op 22181 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9244 37955 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6606 61161 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 837 417855 ns/op 474354 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1070 338763 ns/op 400396 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1461 237410 ns/op 944769 B/op 61 allocs/op +BenchmarkStabsep_N100-8 36 8642057 ns/op 2663382 B/op 483 allocs/op +BenchmarkModsep_N50-8 248 1444091 ns/op 656058 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6891 46137 ns/op 53703 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16426 22033 ns/op 22187 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9378 38213 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6446 59526 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 850 423687 ns/op 474680 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1051 338713 ns/op 400083 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1411 231254 ns/op 944793 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8731033 ns/op 2658631 B/op 483 allocs/op +BenchmarkModsep_N50-8 246 1435820 ns/op 656422 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6768 44890 ns/op 53689 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16798 21268 ns/op 22180 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9134 38019 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6361 60183 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 850 418285 ns/op 473295 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1076 336601 ns/op 400833 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1308 243311 ns/op 944749 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8693943 ns/op 2655826 B/op 484 allocs/op +BenchmarkModsep_N50-8 250 1425933 ns/op 655533 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7014 44820 ns/op 53694 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16993 21264 ns/op 22175 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9528 37923 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6055 56931 ns/op 431475 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 865 419352 ns/op 474816 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1078 342420 ns/op 400573 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1627 237651 ns/op 944773 B/op 61 allocs/op +BenchmarkStabsep_N100-8 36 8693412 ns/op 2675625 B/op 485 allocs/op +BenchmarkModsep_N50-8 249 1425502 ns/op 658025 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6963 44806 ns/op 53693 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 15919 23049 ns/op 22186 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9489 39245 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6061 65085 ns/op 431475 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 811 430138 ns/op 473917 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1005 353518 ns/op 399759 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1377 241378 ns/op 944778 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8684882 ns/op 2658582 B/op 483 allocs/op +BenchmarkModsep_N50-8 240 1471807 ns/op 655830 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6878 45033 ns/op 53694 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16944 21344 ns/op 22187 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9438 37944 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 5816 60440 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 853 415745 ns/op 474318 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1065 334761 ns/op 399839 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1626 228903 ns/op 944767 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8652260 ns/op 2655405 B/op 483 allocs/op +BenchmarkModsep_N50-8 250 1426927 ns/op 655358 B/op 143 allocs/op +PASS diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.27.1/metadata.json b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.27.1/metadata.json new file mode 100644 index 0000000..53614f4 --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.27.1/metadata.json @@ -0,0 +1,129 @@ +{ + "date": "2026-09-12", + "cpu": "Apple M1 Pro", + "GOOS": "darwin", + "GOARCH": "arm64", + "GOMAXPROCS": 8, + "rounds": 10, + "benchtime": "300ms", + "controlsys_commit": "54d5d6b119c8b4351db0cd0bc0ebb4122bde94d4", + "build_flags": "default unless noted per variant", + "tags": [], + "GOFLAGS": "", + "PGO": "none; no default.pgo present", + "order": [ + [ + "old", + "new", + "master", + "no_gemv", + "no_gemm" + ], + [ + "no_gemm", + "no_gemv", + "master", + "new", + "old" + ], + [ + "old", + "new", + "master", + "no_gemv", + "no_gemm" + ], + [ + "no_gemm", + "no_gemv", + "master", + "new", + "old" + ], + [ + "old", + "new", + "master", + "no_gemv", + "no_gemm" + ], + [ + "no_gemm", + "no_gemv", + "master", + "new", + "old" + ], + [ + "old", + "new", + "master", + "no_gemv", + "no_gemm" + ], + [ + "no_gemm", + "no_gemv", + "master", + "new", + "old" + ], + [ + "old", + "new", + "master", + "no_gemv", + "no_gemm" + ], + [ + "no_gemm", + "no_gemv", + "master", + "new", + "old" + ] + ], + "variants": { + "old": { + "gonum_commit": "f43007ad8a2d208bc8f47c338e85f05381d9643b", + "sha256": "1d29baebce29fcb40a8c323a345a1a8588c9730c6e4ac3a584159b8d85175a17", + "go_version": "go1.27.1", + "GOEXPERIMENT": "", + "ldflags": "", + "reverted_file": null + }, + "new": { + "gonum_commit": "a78cf83eff160df0e423b08af0c7642ade964150", + "sha256": "d1df446b3223c58358152233bdf15c52c6b146213f15448cbb649bd134bdc554", + "go_version": "go1.27.1", + "GOEXPERIMENT": "", + "ldflags": "", + "reverted_file": null + }, + "master": { + "gonum_commit": "1c42629c5cb53235d9ae074bb1be6da6471771da", + "sha256": "8e3bce0816b0d1aef6ebf2af3d32b3d9070925f1472cb754401641ba83d480c3", + "go_version": "go1.27.1", + "GOEXPERIMENT": "", + "ldflags": "", + "reverted_file": null + }, + "no_gemv": { + "gonum_commit": "a78cf83eff160df0e423b08af0c7642ade964150", + "sha256": "933aad663443f15287542675fe0e6b3a8b00899cb12a2e5d1c05ea31ab7f1a79", + "go_version": "go1.27.1", + "GOEXPERIMENT": "", + "ldflags": "", + "reverted_file": "blas/gonum/level2float64.go" + }, + "no_gemm": { + "gonum_commit": "a78cf83eff160df0e423b08af0c7642ade964150", + "sha256": "1d98d11fdb6803674d9277196855d9245256800854f0492dbedf050a0957c12e", + "go_version": "go1.27.1", + "GOEXPERIMENT": "", + "ldflags": "", + "reverted_file": "blas/gonum/dgemm.go" + } + }, + "benchstat": "golang.org/x/perf v0.0.0-20260312031701-16a31bc5fbd0" +} diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.27.1/new.txt b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.27.1/new.txt new file mode 100644 index 0000000..9d9c4b6 --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.27.1/new.txt @@ -0,0 +1,140 @@ +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7268 46112 ns/op 53692 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16827 21433 ns/op 22180 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9513 38186 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 5974 60582 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 855 419530 ns/op 474767 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1074 338617 ns/op 400589 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1424 228152 ns/op 944820 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8641154 ns/op 2665964 B/op 484 allocs/op +BenchmarkModsep_N50-8 247 1428549 ns/op 656531 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7213 45328 ns/op 53700 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16902 21715 ns/op 22192 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9324 38473 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6428 59712 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 855 416171 ns/op 474382 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1071 337408 ns/op 400931 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1658 225915 ns/op 944801 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8694699 ns/op 2676266 B/op 484 allocs/op +BenchmarkModsep_N50-8 249 1442220 ns/op 655598 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6723 49176 ns/op 53715 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 15463 26483 ns/op 22189 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9463 38345 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6357 61337 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 854 420082 ns/op 475045 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1072 354204 ns/op 400293 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1443 237033 ns/op 944772 B/op 61 allocs/op +BenchmarkStabsep_N100-8 39 8649715 ns/op 2662072 B/op 485 allocs/op +BenchmarkModsep_N50-8 248 1451144 ns/op 657503 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6834 44990 ns/op 53689 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16609 21623 ns/op 22177 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9380 38824 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6626 63710 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 842 420042 ns/op 473835 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1080 347515 ns/op 400097 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1388 242441 ns/op 944758 B/op 61 allocs/op +BenchmarkStabsep_N100-8 39 8978643 ns/op 2662188 B/op 484 allocs/op +BenchmarkModsep_N50-8 250 1435223 ns/op 656851 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6944 45645 ns/op 53704 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16804 21368 ns/op 22178 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9418 38050 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6076 61113 ns/op 431475 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 853 419688 ns/op 474076 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1081 341355 ns/op 400035 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1476 436708 ns/op 944771 B/op 61 allocs/op +BenchmarkStabsep_N100-8 42 8718651 ns/op 2669299 B/op 483 allocs/op +BenchmarkModsep_N50-8 247 1432903 ns/op 657496 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7016 45890 ns/op 53684 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16826 21392 ns/op 22185 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9346 37995 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6246 61296 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 840 416805 ns/op 474693 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1045 341806 ns/op 400878 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1602 227653 ns/op 944787 B/op 61 allocs/op +BenchmarkStabsep_N100-8 42 8698556 ns/op 2659199 B/op 483 allocs/op +BenchmarkModsep_N50-8 249 1440589 ns/op 654905 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7035 45615 ns/op 53695 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 15879 23168 ns/op 22190 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9283 38294 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6264 63379 ns/op 431475 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 812 423871 ns/op 474006 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1034 354523 ns/op 399997 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1453 251183 ns/op 944765 B/op 61 allocs/op +BenchmarkStabsep_N100-8 39 9002220 ns/op 2661240 B/op 483 allocs/op +BenchmarkModsep_N50-8 249 1453788 ns/op 655708 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6780 45478 ns/op 53692 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16686 21247 ns/op 22181 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9598 37851 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6066 57623 ns/op 431475 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 848 417690 ns/op 474959 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1075 335357 ns/op 400813 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1568 236093 ns/op 944749 B/op 61 allocs/op +BenchmarkStabsep_N100-8 36 8657416 ns/op 2672102 B/op 485 allocs/op +BenchmarkModsep_N50-8 250 1431126 ns/op 657198 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6926 45029 ns/op 53700 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16828 21187 ns/op 22183 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9487 37941 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6412 60587 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 862 416837 ns/op 474553 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1076 336440 ns/op 400445 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1518 234772 ns/op 944762 B/op 61 allocs/op +BenchmarkStabsep_N100-8 42 8661970 ns/op 2667240 B/op 484 allocs/op +BenchmarkModsep_N50-8 252 1427446 ns/op 654988 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6861 44997 ns/op 53693 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16761 21449 ns/op 22179 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9480 37898 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6481 61535 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 858 417953 ns/op 474181 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1072 333689 ns/op 400467 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1602 229442 ns/op 944813 B/op 61 allocs/op +BenchmarkStabsep_N100-8 42 8763085 ns/op 2663427 B/op 484 allocs/op +BenchmarkModsep_N50-8 248 1430702 ns/op 655485 B/op 143 allocs/op +PASS diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.27.1/no_gemm.txt b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.27.1/no_gemm.txt new file mode 100644 index 0000000..1380a3b --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.27.1/no_gemm.txt @@ -0,0 +1,140 @@ +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7418 44315 ns/op 53695 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16480 21741 ns/op 22187 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 7800 45558 ns/op 20137 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 5067 73109 ns/op 434360 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 824 421363 ns/op 474602 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1062 341084 ns/op 400425 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1456 243164 ns/op 944777 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8686993 ns/op 2646201 B/op 480 allocs/op +BenchmarkModsep_N50-8 248 1434770 ns/op 654825 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7995 45350 ns/op 53684 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16760 21694 ns/op 22181 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 7849 47129 ns/op 20142 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 5079 82097 ns/op 434362 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 838 423771 ns/op 474294 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1035 343080 ns/op 400858 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1449 221830 ns/op 944712 B/op 60 allocs/op +BenchmarkStabsep_N100-8 40 8718275 ns/op 2660677 B/op 481 allocs/op +BenchmarkModsep_N50-8 249 1439085 ns/op 658006 B/op 144 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6976 44939 ns/op 53706 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16724 21637 ns/op 22178 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 8026 45496 ns/op 20141 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 4777 81499 ns/op 434362 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 840 425401 ns/op 474197 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1059 341859 ns/op 401026 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1604 217709 ns/op 944699 B/op 60 allocs/op +BenchmarkStabsep_N100-8 40 8730740 ns/op 2649691 B/op 480 allocs/op +BenchmarkModsep_N50-8 246 1429268 ns/op 654860 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6753 45463 ns/op 53680 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16624 21699 ns/op 22194 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 7808 45714 ns/op 20142 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 5023 81146 ns/op 434360 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 847 421768 ns/op 474451 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1045 337487 ns/op 401574 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1579 247199 ns/op 944703 B/op 60 allocs/op +BenchmarkStabsep_N100-8 40 8713535 ns/op 2643207 B/op 480 allocs/op +BenchmarkModsep_N50-8 249 1437869 ns/op 657272 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6958 45303 ns/op 53693 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16484 21773 ns/op 22178 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 7728 45343 ns/op 20138 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 5234 78389 ns/op 434363 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 843 424621 ns/op 473882 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1050 337747 ns/op 401996 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1425 232013 ns/op 944696 B/op 60 allocs/op +BenchmarkStabsep_N100-8 36 8736081 ns/op 2649726 B/op 480 allocs/op +BenchmarkModsep_N50-8 246 1446406 ns/op 663710 B/op 144 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6934 45608 ns/op 53698 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16340 21521 ns/op 22186 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 7960 45560 ns/op 20141 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 5070 76468 ns/op 434361 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 846 425665 ns/op 474231 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1050 341572 ns/op 400493 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1496 220655 ns/op 944741 B/op 60 allocs/op +BenchmarkStabsep_N100-8 40 8739527 ns/op 2664026 B/op 481 allocs/op +BenchmarkModsep_N50-8 247 1447328 ns/op 659130 B/op 144 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7167 45072 ns/op 53700 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16551 21580 ns/op 22177 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 7930 45120 ns/op 20142 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 5066 76540 ns/op 434357 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 848 418961 ns/op 475490 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1065 337575 ns/op 400193 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1448 222469 ns/op 944692 B/op 60 allocs/op +BenchmarkStabsep_N100-8 39 8659669 ns/op 2644856 B/op 479 allocs/op +BenchmarkModsep_N50-8 250 1436590 ns/op 654900 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7010 44991 ns/op 53690 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16845 21546 ns/op 22181 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 7030 48645 ns/op 20143 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 4581 86514 ns/op 434355 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 823 442190 ns/op 474475 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1057 336587 ns/op 400548 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1648 289348 ns/op 944659 B/op 60 allocs/op +BenchmarkStabsep_N100-8 40 8667556 ns/op 2649524 B/op 479 allocs/op +BenchmarkModsep_N50-8 249 1432339 ns/op 653796 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7302 44765 ns/op 53672 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16822 21276 ns/op 22178 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 8070 45703 ns/op 20139 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 5132 79046 ns/op 434362 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 852 420361 ns/op 474931 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1042 337180 ns/op 400586 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1510 230559 ns/op 944755 B/op 61 allocs/op +BenchmarkStabsep_N100-8 36 8677213 ns/op 2644391 B/op 481 allocs/op +BenchmarkModsep_N50-8 250 1426251 ns/op 655867 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7104 44413 ns/op 53673 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16737 21507 ns/op 22178 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 8209 45211 ns/op 20139 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 4957 82123 ns/op 434360 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 849 420137 ns/op 474917 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1066 339159 ns/op 400856 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1611 224983 ns/op 944689 B/op 60 allocs/op +BenchmarkStabsep_N100-8 40 8675018 ns/op 2645456 B/op 479 allocs/op +BenchmarkModsep_N50-8 252 1429756 ns/op 654935 B/op 143 allocs/op +PASS diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.27.1/no_gemv.txt b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.27.1/no_gemv.txt new file mode 100644 index 0000000..c6beb53 --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.27.1/no_gemv.txt @@ -0,0 +1,140 @@ +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7534 44977 ns/op 53726 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16644 21367 ns/op 22177 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9693 36368 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6232 60923 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 860 416425 ns/op 474686 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1084 332322 ns/op 400459 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1311 231863 ns/op 944832 B/op 61 allocs/op +BenchmarkStabsep_N100-8 39 8676347 ns/op 2657041 B/op 483 allocs/op +BenchmarkModsep_N50-8 250 1432593 ns/op 656542 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7072 44730 ns/op 53682 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16812 21353 ns/op 22184 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9818 36522 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6051 59869 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 862 416748 ns/op 474163 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1050 337299 ns/op 400252 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1476 224781 ns/op 944799 B/op 61 allocs/op +BenchmarkStabsep_N100-8 42 8674741 ns/op 2665713 B/op 483 allocs/op +BenchmarkModsep_N50-8 252 1424781 ns/op 656224 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7098 44527 ns/op 53696 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16843 21155 ns/op 22184 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9946 36467 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6406 59934 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 856 416347 ns/op 473705 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1087 329929 ns/op 399792 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1418 226638 ns/op 944763 B/op 61 allocs/op +BenchmarkStabsep_N100-8 42 8667292 ns/op 2666357 B/op 483 allocs/op +BenchmarkModsep_N50-8 253 1433804 ns/op 656179 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6918 44819 ns/op 53702 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16779 21277 ns/op 22178 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9709 36335 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6352 60339 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 871 412931 ns/op 474532 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1070 334471 ns/op 401036 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1459 228876 ns/op 944803 B/op 61 allocs/op +BenchmarkStabsep_N100-8 42 8653604 ns/op 2666508 B/op 484 allocs/op +BenchmarkModsep_N50-8 252 1428457 ns/op 654224 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7044 45529 ns/op 53676 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16581 21303 ns/op 22180 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9897 36459 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6392 60606 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 856 417685 ns/op 474334 B/op 53 allocs/op +BenchmarkMatLog_N50-8 986 333349 ns/op 399816 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1640 231764 ns/op 944787 B/op 61 allocs/op +BenchmarkStabsep_N100-8 37 8726516 ns/op 2657116 B/op 484 allocs/op +BenchmarkModsep_N50-8 250 1437483 ns/op 655075 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7299 45536 ns/op 53688 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16782 21609 ns/op 22179 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 10000 36618 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 5762 58232 ns/op 431475 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 868 414758 ns/op 475218 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1086 330741 ns/op 400145 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1400 232375 ns/op 944760 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8705140 ns/op 2654584 B/op 483 allocs/op +BenchmarkModsep_N50-8 244 1441776 ns/op 654815 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6890 45852 ns/op 53693 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16926 21191 ns/op 22175 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9859 36775 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6237 60085 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 868 424214 ns/op 474914 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1075 333072 ns/op 399851 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1713 227892 ns/op 944792 B/op 61 allocs/op +BenchmarkStabsep_N100-8 39 8652985 ns/op 2664544 B/op 484 allocs/op +BenchmarkModsep_N50-8 252 1421365 ns/op 658287 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6972 44727 ns/op 53683 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16911 21300 ns/op 22187 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9925 36213 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 6039 58691 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 848 413840 ns/op 475066 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1098 333651 ns/op 400397 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1671 225973 ns/op 944802 B/op 61 allocs/op +BenchmarkStabsep_N100-8 42 8609196 ns/op 2656047 B/op 483 allocs/op +BenchmarkModsep_N50-8 252 1437774 ns/op 655672 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6912 45265 ns/op 53681 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16754 21309 ns/op 22182 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9861 36376 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 5972 59721 ns/op 431474 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 864 415395 ns/op 473680 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1084 330852 ns/op 399997 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1536 224268 ns/op 944806 B/op 61 allocs/op +BenchmarkStabsep_N100-8 36 8612594 ns/op 2656197 B/op 483 allocs/op +BenchmarkModsep_N50-8 252 1418586 ns/op 658498 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7087 45074 ns/op 53711 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16388 21530 ns/op 22174 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 9829 36260 ns/op 16672 B/op 11 allocs/op +BenchmarkReg_N100_M5_P5-8 5811 59650 ns/op 431475 B/op 25 allocs/op +BenchmarkD2C_ZOH_N50-8 867 413589 ns/op 473863 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1098 329612 ns/op 400660 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1566 227472 ns/op 944797 B/op 61 allocs/op +BenchmarkStabsep_N100-8 39 8699827 ns/op 2661922 B/op 484 allocs/op +BenchmarkModsep_N50-8 250 1427942 ns/op 656262 B/op 143 allocs/op +PASS diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.27.1/old.txt b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.27.1/old.txt new file mode 100644 index 0000000..5b7e61a --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/go1.27.1/old.txt @@ -0,0 +1,140 @@ +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7370 45072 ns/op 53699 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16512 21545 ns/op 22189 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 8073 44500 ns/op 20145 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 4845 80307 ns/op 434357 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 847 417577 ns/op 474093 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1054 333534 ns/op 400471 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1562 228010 ns/op 944747 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8677273 ns/op 2660710 B/op 481 allocs/op +BenchmarkModsep_N50-8 250 1440008 ns/op 660652 B/op 144 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7003 46642 ns/op 53678 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16000 21146 ns/op 22184 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 8028 44253 ns/op 20141 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 5020 77127 ns/op 434359 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 805 432105 ns/op 476075 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1026 358740 ns/op 400720 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1332 241839 ns/op 944663 B/op 60 allocs/op +BenchmarkStabsep_N100-8 39 8849487 ns/op 2659878 B/op 480 allocs/op +BenchmarkModsep_N50-8 243 1467306 ns/op 659616 B/op 144 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7054 45602 ns/op 53704 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 15892 22164 ns/op 22181 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 8234 44491 ns/op 20146 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 5054 80322 ns/op 434355 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 841 416569 ns/op 475198 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1070 345669 ns/op 400895 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1532 228918 ns/op 944667 B/op 60 allocs/op +BenchmarkStabsep_N100-8 42 9026585 ns/op 2650745 B/op 479 allocs/op +BenchmarkModsep_N50-8 236 1498316 ns/op 663134 B/op 144 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6951 44860 ns/op 53669 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 17073 21290 ns/op 22185 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 8211 44270 ns/op 20143 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 4994 82415 ns/op 434357 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 854 414789 ns/op 474893 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1078 334048 ns/op 400233 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1653 221860 ns/op 944707 B/op 60 allocs/op +BenchmarkStabsep_N100-8 40 8611730 ns/op 2654207 B/op 481 allocs/op +BenchmarkModsep_N50-8 249 1426630 ns/op 656191 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6790 46607 ns/op 53675 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16622 21227 ns/op 22177 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 8095 44382 ns/op 20143 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 5180 78968 ns/op 434359 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 854 415199 ns/op 474716 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1070 332131 ns/op 400223 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1623 217636 ns/op 944721 B/op 60 allocs/op +BenchmarkStabsep_N100-8 42 8667503 ns/op 2657664 B/op 480 allocs/op +BenchmarkModsep_N50-8 252 1451352 ns/op 656392 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7093 45308 ns/op 53702 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16350 21782 ns/op 22184 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 7960 45078 ns/op 20141 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 5076 82701 ns/op 434358 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 859 426839 ns/op 474690 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1024 353170 ns/op 400810 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1654 226426 ns/op 944684 B/op 60 allocs/op +BenchmarkStabsep_N100-8 39 10651975 ns/op 2659614 B/op 480 allocs/op +BenchmarkModsep_N50-8 240 1466495 ns/op 655611 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6880 45818 ns/op 53684 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16275 21492 ns/op 22186 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 8260 44688 ns/op 20140 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 5016 80332 ns/op 434357 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 829 419102 ns/op 475708 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1039 336806 ns/op 400680 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1455 259798 ns/op 944754 B/op 61 allocs/op +BenchmarkStabsep_N100-8 40 8737880 ns/op 2666754 B/op 481 allocs/op +BenchmarkModsep_N50-8 248 1443366 ns/op 657562 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7125 44586 ns/op 53686 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16917 21254 ns/op 22185 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 8149 44183 ns/op 20142 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 4638 81545 ns/op 434361 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 835 415696 ns/op 476106 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1076 337568 ns/op 400830 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1510 230601 ns/op 944769 B/op 61 allocs/op +BenchmarkStabsep_N100-8 37 8641472 ns/op 2666053 B/op 480 allocs/op +BenchmarkModsep_N50-8 250 1434077 ns/op 658710 B/op 144 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 6998 44759 ns/op 53681 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 17164 21091 ns/op 22189 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 8217 45136 ns/op 20141 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 5054 80783 ns/op 434357 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 860 411920 ns/op 475953 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1066 331405 ns/op 400002 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1564 245750 ns/op 944692 B/op 60 allocs/op +BenchmarkStabsep_N100-8 40 8627373 ns/op 2653169 B/op 480 allocs/op +BenchmarkModsep_N50-8 252 1425013 ns/op 656416 B/op 143 allocs/op +PASS +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkReduce-8 7074 44596 ns/op 53699 B/op 170 allocs/op +BenchmarkDiscretizeZOH-8 16837 21410 ns/op 22188 B/op 28 allocs/op +BenchmarkSimulate_DCMotor-8 8068 44044 ns/op 20145 B/op 45 allocs/op +BenchmarkReg_N100_M5_P5-8 4837 83031 ns/op 434356 B/op 55 allocs/op +BenchmarkD2C_ZOH_N50-8 854 415582 ns/op 475104 B/op 53 allocs/op +BenchmarkMatLog_N50-8 1087 332026 ns/op 401812 B/op 32 allocs/op +BenchmarkSystemFRD_SISO_10000-8 1714 213097 ns/op 944688 B/op 60 allocs/op +BenchmarkStabsep_N100-8 37 8601935 ns/op 2658460 B/op 480 allocs/op +BenchmarkModsep_N50-8 250 1436343 ns/op 658958 B/op 144 allocs/op +PASS diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/matlog-trace.txt b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/matlog-trace.txt new file mode 100644 index 0000000..b5b79df --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/matlog-trace.txt @@ -0,0 +1,14 @@ +TRACE Dgemm NN 51x51x51 gonum.org/v1/gonum/blas/blas64.Gemm +TRACE Dtrsm LLNU 51x51 lda=51 ldb=51 gonum.org/v1/gonum/lapack/gonum.Implementation.Dgetrs +TRACE Dtrsm LUNN 51x51 lda=51 ldb=51 gonum.org/v1/gonum/lapack/gonum.Implementation.Dgetrs +TRACE Dgemm NN 50x50x50 gonum.org/v1/gonum/lapack/gonum.Implementation.Dtrevc3 +TRACE Dtrsm LLNU 64x36 lda=100 ldb=100 gonum.org/v1/gonum/lapack/gonum.Implementation.Dgetrf +TRACE Dgemm NN 36x36x64 gonum.org/v1/gonum/lapack/gonum.Implementation.Dgetrf +TRACE Dtrsm LLNU 100x50 lda=100 ldb=50 gonum.org/v1/gonum/lapack/gonum.Implementation.Dgetrs +TRACE Dtrsm LUNN 100x50 lda=100 ldb=50 gonum.org/v1/gonum/lapack/gonum.Implementation.Dgetrs +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro +BenchmarkMatLog_N50-8 1 1277834 ns/op +PASS diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/profiles/new.pprof b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/profiles/new.pprof new file mode 100644 index 0000000..3870188 Binary files /dev/null and b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/profiles/new.pprof differ diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/profiles/old.pprof b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/profiles/old.pprof new file mode 100644 index 0000000..39b03d7 Binary files /dev/null and b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/profiles/old.pprof differ diff --git a/docs/benchmarks/gonum-v0.19.0/issue10-investigation/run.py b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/run.py new file mode 100644 index 0000000..1a5c974 --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/issue10-investigation/run.py @@ -0,0 +1,117 @@ +#!/usr/bin/env python3 +"""Build immutable controlsys/Gonum snapshots and compare prebuilt binaries.""" +import argparse +import hashlib +import io +import json +import os +from pathlib import Path +import re +import shutil +import subprocess +import tarfile + +CONTROL = "54d5d6b119c8b4351db0cd0bc0ebb4122bde94d4" +OLD = "f43007ad8a2d208bc8f47c338e85f05381d9643b" +NEW = "a78cf83eff160df0e423b08af0c7642ade964150" +MASTER = "1c42629c5cb53235d9ae074bb1be6da6471771da" +CASES = "MatLog_N50|D2C_ZOH_N50|Stabsep_N100|SystemFRD_SISO_10000|Reduce|Modsep_N50|DiscretizeZOH|Simulate_DCMotor|Reg_N100_M5_P5" + + +def capture(args, **kwargs): + return subprocess.check_output(args, text=True, **kwargs).strip() + + +def archive(repo, revision, destination): + destination.mkdir(parents=True) + data = subprocess.check_output(["git", "-C", str(repo), "archive", revision]) + with tarfile.open(fileobj=io.BytesIO(data)) as source: + source.extractall(destination, filter="data") + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--gonum", type=Path, default=Path(__file__).resolve().parents[4]) + parser.add_argument("--controlsys", type=Path, required=True) + parser.add_argument("--go", default="go") + parser.add_argument("--output", type=Path, required=True) + parser.add_argument("--suite", choices=["releases", "allocator", "bisect"], default="releases") + parser.add_argument("--rounds", type=int, default=10) + parser.add_argument("--benchtime", default="300ms") + args = parser.parse_args() + if args.rounds < 1: + parser.error("rounds must be positive") + go = shutil.which(args.go) + if not go: + parser.error("Go executable not found") + output = args.output.resolve() + output.mkdir(parents=True, exist_ok=False) + variants = [("old", OLD), ("new", NEW), ("master", MASTER), + ("no_gemv", NEW), ("no_gemm", NEW)] + cases = CASES + if args.suite == "allocator": + variants = [("allocator_default", NEW), ("nosizemalloc", NEW)] + elif args.suite == "bisect": + variants = [("old", OLD), ("merge", "7fd5fefe"), ("worker", "ebe982da"), + ("calibrated", "777029ff"), ("new", NEW), + ("old_align64", OLD), ("new_align64", NEW)] + cases = "MatLog_N50|D2C_ZOH_N50|Stabsep_N100" + metadata = { + "controlsys": CONTROL, "go": capture([go, "version"]), + "go_env": json.loads(capture([go, "env", "-json", "GOOS", "GOARCH", "GOFLAGS", "GOEXPERIMENT", "GOTOOLCHAIN"])), + "runtime_env": {k: os.environ.get(k, "") for k in ["GODEBUG", "GOMEMLIMIT", "GOGC"]}, + "GOMAXPROCS": 8, "rounds": args.rounds, "benchtime": args.benchtime, + "bench": "^Benchmark(" + cases + ")$", "variants": {}, "order": [], + } + for label, revision in variants: + revision = capture(["git", "-C", str(args.gonum), "rev-parse", revision + "^{commit}"]) + directory = output / label + gonum, control = directory / "gonum", directory / "controlsys" + archive(args.gonum, revision, gonum) + archive(args.controlsys, CONTROL, control) + reverted = {"no_gemv": "blas/gonum/level2float64.go", "no_gemm": "blas/gonum/dgemm.go"}.get(label) + if reverted: + (gonum / reverted).write_bytes(subprocess.check_output( + ["git", "-C", str(args.gonum), "show", OLD + ":" + reverted])) + env = dict(os.environ) + if label == "nosizemalloc": + if env.get("GOEXPERIMENT"): + raise RuntimeError("allocator comparison requires an unset GOEXPERIMENT") + env["GOEXPERIMENT"] = "nosizespecializedmalloc" + subprocess.run([go, "mod", "edit", "-replace=gonum.org/v1/gonum=" + str(gonum)], cwd=control, check=True) + binary = directory / "controlsys.test" + command = [go, "test", "-c", "-o", str(binary)] + if label.endswith("_align64"): + command.append("-ldflags=-funcalign=64") + subprocess.run(command, cwd=control, env=env, check=True) + metadata["variants"][label] = { + "gonum": revision, "reverted_file": reverted, "build": command, + "GOEXPERIMENT": env.get("GOEXPERIMENT", ""), + "sha256": hashlib.sha256(binary.read_bytes()).hexdigest(), + "binary_version": capture([go, "version", "-m", str(binary)]), + } + print("built", label, flush=True) + expected = None + labels = [label for label, _ in variants] + for round_index in range(args.rounds): + order = labels if round_index % 2 == 0 else labels[::-1] + metadata["order"].append(order) + for label in order: + command = [str(output / label / "controlsys.test"), "-test.run=^$", + "-test.bench=" + metadata["bench"], "-test.benchmem", + "-test.benchtime=" + args.benchtime, "-test.count=1"] + result = subprocess.run(command, cwd=output, env={**os.environ, "GOMAXPROCS": "8"}, + stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True) + with (output / (label + ".txt")).open("a") as stream: + stream.write(result.stdout) + result.check_returncode() + names = re.findall(r"^(Benchmark\S+)\s+\d+\s+", result.stdout, re.MULTILINE) + if not names or (expected is not None and names != expected): + raise RuntimeError("empty or mismatched benchmark selection: " + label) + expected = names + (output / "metadata.json").write_text(json.dumps(metadata, indent=2) + "\n") + print("round", round_index + 1, flush=True) + + +if __name__ == "__main__": + main() diff --git a/docs/benchmarks/gonum-v0.19.0/metadata.json b/docs/benchmarks/gonum-v0.19.0/metadata.json new file mode 100644 index 0000000..aa193dd --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/metadata.json @@ -0,0 +1,128 @@ +{ + "status": "complete", + "flags": [ + "-test.run=^$", + "-test.bench=.", + "-test.benchtime=100ms", + "-test.benchmem", + "-test.count=1" + ], + "rounds": 10, + "timeout_seconds": 600.0, + "runtime_environment": { + "GOMAXPROCS": "8", + "GODEBUG": null, + "GOGC": null, + "GOMEMLIMIT": null + }, + "binaries": { + "baseline": { + "sha256": "b14e292dc7e7b84f9e2c7c90dcbb1e77ea005152b32e0626ee77030d39dbbf2f" + }, + "candidate": { + "sha256": "0e52b094ef36ca5e9f415fa8a9a1b4f3a91cc32d2528fa89a21e1fe77129f81a" + } + }, + "runs": [ + { + "round": 1, + "label": "baseline", + "status": "complete" + }, + { + "round": 1, + "label": "candidate", + "status": "complete" + }, + { + "round": 2, + "label": "candidate", + "status": "complete" + }, + { + "round": 2, + "label": "baseline", + "status": "complete" + }, + { + "round": 3, + "label": "baseline", + "status": "complete" + }, + { + "round": 3, + "label": "candidate", + "status": "complete" + }, + { + "round": 4, + "label": "candidate", + "status": "complete" + }, + { + "round": 4, + "label": "baseline", + "status": "complete" + }, + { + "round": 5, + "label": "baseline", + "status": "complete" + }, + { + "round": 5, + "label": "candidate", + "status": "complete" + }, + { + "round": 6, + "label": "candidate", + "status": "complete" + }, + { + "round": 6, + "label": "baseline", + "status": "complete" + }, + { + "round": 7, + "label": "baseline", + "status": "complete" + }, + { + "round": 7, + "label": "candidate", + "status": "complete" + }, + { + "round": 8, + "label": "candidate", + "status": "complete" + }, + { + "round": 8, + "label": "baseline", + "status": "complete" + }, + { + "round": 9, + "label": "baseline", + "status": "complete" + }, + { + "round": 9, + "label": "candidate", + "status": "complete" + }, + { + "round": 10, + "label": "candidate", + "status": "complete" + }, + { + "round": 10, + "label": "baseline", + "status": "complete" + } + ] +} diff --git a/docs/benchmarks/gonum-v0.19.0/subcase-baseline.txt.gz b/docs/benchmarks/gonum-v0.19.0/subcase-baseline.txt.gz new file mode 100644 index 0000000..5ad54ec Binary files /dev/null and b/docs/benchmarks/gonum-v0.19.0/subcase-baseline.txt.gz differ diff --git a/docs/benchmarks/gonum-v0.19.0/subcase-benchstat.txt b/docs/benchmarks/gonum-v0.19.0/subcase-benchstat.txt new file mode 100644 index 0000000..d49cc13 --- /dev/null +++ b/docs/benchmarks/gonum-v0.19.0/subcase-benchstat.txt @@ -0,0 +1,16 @@ +goos: darwin +goarch: arm64 +pkg: github.com/jamestjsp/controlsys +cpu: Apple M1 Pro + │ baseline.txt │ candidate.txt │ + │ sec/op │ sec/op vs base │ +FrequencySweepKernels/N4_W2/TransferFunction-8 9.322µ ± 2% 9.433µ ± 2% ~ (p=0.447 n=10) + + │ baseline.txt │ candidate.txt │ + │ B/op │ B/op vs base │ +FrequencySweepKernels/N4_W2/TransferFunction-8 44.35Ki ± 0% 44.35Ki ± 0% ~ (p=0.620 n=10) + + │ baseline.txt │ candidate.txt │ + │ allocs/op │ allocs/op vs base │ +FrequencySweepKernels/N4_W2/TransferFunction-8 77.00 ± 0% 77.00 ± 0% ~ (p=1.000 n=10) ¹ +¹ all samples are equal diff --git a/docs/benchmarks/gonum-v0.19.0/subcase-candidate.txt.gz b/docs/benchmarks/gonum-v0.19.0/subcase-candidate.txt.gz new file mode 100644 index 0000000..a4fa0b0 Binary files /dev/null and b/docs/benchmarks/gonum-v0.19.0/subcase-candidate.txt.gz differ diff --git a/go.mod b/go.mod index b560322..41577da 100644 --- a/go.mod +++ b/go.mod @@ -1,7 +1,7 @@ module github.com/jamestjsp/controlsys -go 1.26.3 +go 1.27.1 require gonum.org/v1/gonum v0.15.0 -replace gonum.org/v1/gonum => github.com/jamestjsp/gonum v0.17.7-fork +replace gonum.org/v1/gonum => github.com/jamestjsp/gonum v0.19.0-fork diff --git a/go.sum b/go.sum index 5b429a6..62d350b 100644 --- a/go.sum +++ b/go.sum @@ -1,2 +1,2 @@ -github.com/jamestjsp/gonum v0.17.7-fork h1:evxkama96reFIjJEZiHYhRGtibxK4d076+3vB/Q0t+c= -github.com/jamestjsp/gonum v0.17.7-fork/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= +github.com/jamestjsp/gonum v0.19.0-fork h1:HoyJewH8DzHgZsgouf2uRZQcigijbXJ5B62mAb57Xgo= +github.com/jamestjsp/gonum v0.19.0-fork/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= diff --git a/model_array.go b/model_array.go index e4d010b..dcba781 100644 --- a/model_array.go +++ b/model_array.go @@ -1,6 +1,9 @@ package controlsys -import "fmt" +import ( + "fmt" + "slices" +) type ModelArray struct { models []*System @@ -284,13 +287,13 @@ func (a *ModelArray) flatIndex(index []int) (int, error) { } flat := 0 stride := 1 - for dim := len(a.shape) - 1; dim >= 0; dim-- { + for dim, v := range slices.Backward(a.shape) { idx := index[dim] - if idx < 0 || idx >= a.shape[dim] { + if idx < 0 || idx >= v { return 0, fmt.Errorf("ModelArray.Model: index %d out of range for dimension %d: %w", idx, dim, ErrDimensionMismatch) } flat += idx * stride - stride *= a.shape[dim] + stride *= v } return flat, nil }