Describe briefly Pipedream's fully qualified instructions

This commit is contained in:
Théophile Bastian 2024-03-29 20:41:30 +01:00
parent 4810a53168
commit 99887ecf4a

View file

@ -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