From 99887ecf4ae372544d91e4604b0e0e6d1ce5456c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9ophile=20Bastian?= Date: Fri, 29 Mar 2024 20:41:30 +0100 Subject: [PATCH] Describe briefly Pipedream's fully qualified instructions --- manuscrit/30_palmed/30_pipedream.tex | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) 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