109 lines
4.3 KiB
TeX
109 lines
4.3 KiB
TeX
%% SCRAP: experiments/02-experiments/physics-optimization/doe-guide
|
|
%% SOURCE: docs/working/experiments/02-experiments/physics-optimization/doe-guide.md
|
|
%% STATUS: CURRENT
|
|
%% FITS: experiments/ch-physics-opt, cookbook/ch-doe
|
|
%% EDITORIAL: lifted — prose rewritten to press voice
|
|
|
|
\section{Physics Optimization DoE Guide}
|
|
\label{sec:physics-opt-doe-guide}
|
|
|
|
\subsection{Overview}
|
|
|
|
Five optimisation opportunities in the StarForth physics engine are tested
|
|
sequentially using progressive design-of-experiments: each opportunity
|
|
explores 3--4 parameter variations at 60~samples per configuration (two
|
|
iterations of 30~samples), and the winner is locked in before proceeding to
|
|
the next opportunity.
|
|
|
|
\subsection{Q48.16 Fixed-Point Format}
|
|
|
|
All metrics are reported in Q48.16 fixed-point representation: 48 integer
|
|
bits and 16 fractional bits. This format is deterministic, free of
|
|
floating-point rounding, and formally verifiable.
|
|
|
|
\begin{center}
|
|
\begin{tabular}{lrl}
|
|
\toprule
|
|
Decimal value & Q48.16 integer & Conversion \\
|
|
\midrule
|
|
0.2 & 13107 & $0.2 \times 65536 = 13107.2$ \\
|
|
0.33 & 21627 & $0.33 \times 65536 = 21626.9$ \\
|
|
0.5 & 32768 & $0.5 \times 65536 = 32768$ \\
|
|
0.7 & 45875 & $0.7 \times 65536 = 45875.2$ \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\end{center}
|
|
|
|
To convert a Q48.16 CSV value to a decimal: divide by~65536. For example,
|
|
\texttt{vm\_workload\_duration\_ns\_q48} = 315{,}797{,}667{,}840 corresponds
|
|
to $315{,}797{,}667{,}840 / 65536 \approx 4{,}822{,}021$~nanoseconds.
|
|
|
|
\subsection{Optimisation Opportunities}
|
|
|
|
\paragraph{Opportunity~1 — Decay Slope Inference.}
|
|
Four decay slope values in Q48.16 are tested: 13107 (0.2), 21627 (0.33,
|
|
baseline), 32768 (0.5), 45875 (0.7). The decay slope controls how rapidly
|
|
execution heat dissipates from the hot-words cache. Expected improvement:
|
|
8--15\%. Decision criterion: highest cache hit rate combined with lowest
|
|
workload duration.
|
|
|
|
\paragraph{Opportunity~2 — Variance-Based Window Width Tuning.}
|
|
Three rolling window sizes are tested: 2048, 4096 (baseline), 8192~bytes.
|
|
Window size determines how many execution events are retained for adaptive
|
|
decisions. Expected improvement: 6--12\%. Decision criterion: best balance
|
|
of context prediction accuracy and workload duration.
|
|
|
|
\paragraph{Opportunity~3 — Decay Rate Parameter Tuning.}
|
|
Three combinations of decay interval (nanoseconds) and adaptive shrink rate
|
|
are tested: fast/fast (500~ns, shrink~50), normal/normal (1000~ns, shrink~75,
|
|
baseline), slow/slow (2000~ns, shrink~100). Expected improvement: 3--6\%.
|
|
|
|
\paragraph{Opportunity~4 — Window $\times$ Decay Interaction.}
|
|
A $2 \times 2$ factorial crossing two window sizes (2048, 8192) with two
|
|
decay slopes (0.33, 0.5) reveals interaction effects between the two
|
|
parameters. Expected improvement: 5--8\%.
|
|
|
|
\paragraph{Opportunity~5 — Hot-Words Cache Threshold.}
|
|
Four cache-promotion thresholds are tested: 5, 10 (baseline), 20, 50
|
|
execution-count units. Lower thresholds promote more words to the cache;
|
|
higher thresholds produce a leaner, higher-precision cache. Expected
|
|
improvement: 2--4\%.
|
|
|
|
\subsection{Execution}
|
|
|
|
%% TODO(bob): confirm canonical path for run_optimization_doe.sh in published repo
|
|
|
|
\begin{lstlisting}[language=bash]
|
|
# Opportunity 1: Decay Slope (4 configs x 60 runs = 240 total)
|
|
./scripts/run_optimization_doe.sh --opportunity 1 OPP_01_DECAY_SLOPE
|
|
|
|
# Opportunity 2: Window Width (3 configs x 60 runs = 180 total)
|
|
./scripts/run_optimization_doe.sh --opportunity 2 OPP_02_WINDOW_WIDTH
|
|
|
|
# ... opportunities 3-5 follow the same pattern
|
|
\end{lstlisting}
|
|
|
|
All five opportunities complete in approximately 9~minutes at two iterations.
|
|
To increase statistical power, add \texttt{--exp-iterations 4} (doubles
|
|
samples per configuration).
|
|
|
|
\subsection{Analysis}
|
|
|
|
For each opportunity, sort the CSV by \texttt{vm\_workload\_duration\_ns\_q48}
|
|
ascending to identify the fastest configuration:
|
|
|
|
\begin{lstlisting}[language=bash]
|
|
tail -n +2 experiment_results.csv | sort -t',' -k27 -n | head -5
|
|
\end{lstlisting}
|
|
|
|
The winner is then locked into the Makefile before proceeding to the next
|
|
opportunity. After all five opportunities are completed, a validation run
|
|
confirms the cumulative improvement over the pre-optimisation baseline.
|
|
|
|
\subsection{Expected Cumulative Improvement}
|
|
|
|
Sequential optimisation of all five opportunities is expected to yield a
|
|
15--30\% cumulative reduction in \texttt{vm\_workload\_duration\_ns\_q48}
|
|
compared to the untuned default configuration.
|
|
|