diff --git a/manuscrit/30_palmed/30_pipedream.tex b/manuscrit/30_palmed/30_pipedream.tex index e56f74f..035d214 100644 --- a/manuscrit/30_palmed/30_pipedream.tex +++ b/manuscrit/30_palmed/30_pipedream.tex @@ -1,8 +1,6 @@ \section{Measuring a kernel's throughput: \pipedream{}}\label{sec:palmed_pipedream} -\todo{Introduce pipedream notation for instructions} - To build a mapping of a CPU, Palmed fundamentally depends on the ability to measure the execution time $\cyc{\kerK}$ of a kernel $\kerK$. However, as we saw above, Palmed defines a kernel as a multiset of instructions, and makes @@ -40,6 +38,13 @@ that $\texttt{\footnotesize{}UNROLL\_SIZE} \times \lstc{UNROLL_SIZE}, \lstc{TOTAL_INSN} and \lstc{NUM_MEASURES} are parameters of the benchmark generation. +\pipedream{} must be able to distinguish between variants of instructions with +the same mnemonic --~\eg{} \lstxasm{mov}~-- but different operand kinds, +altering the semantics and performance of the instruction --~such as a +\lstxasm{mov} loading from memory versus a \lstxasm{mov} between registers. To +this end, \pipedream{} represents instructions fully qualified with their +operands' kind --~this can be seen as a process akin to C++'s name mangling. + As \pipedream{} gets a multiset of instructions as a kernel, these instructions' arguments must be instantiated to turn them into actual assembly code ---~that is, turn \eg{} \lstxasm{ADD_GPR64i64_IMMi8} (the x86-64 variant