\definecolor{col_bench_gen}{HTML}{5a7eff}
\definecolor{col_bench_gen_bg}{HTML}{dbeeff}
\definecolor{col_bench_harness}{HTML}{ffa673}
\definecolor{col_results}{HTML}{000000}
\centering
\begin{tikzpicture}[
hiddennode/.style={rectangle,draw=normal text.bg, very thick, minimum size=5mm, align=center, font=\footnotesize},
normnode/.style={rectangle,draw=black, very thick, minimum size=5mm, align=center, font=\footnotesize},
resultnode/.style={rectangle,draw=col_results, fill=black!2, very thick, minimum size=5mm, align=center, font=\footnotesize},
bluenode/.style={rectangle, draw=col_bench_gen, fill=col_bench_gen_bg, very thick, minimum height=5mm, minimum width=4cm, align=center, font=\footnotesize},
rednode/.style={rectangle, draw=col_bench_harness, fill=orange!5, very thick, minimum size=5mm, align=center, font=\footnotesize},
bencher/.style={rednode, minimum width=2.5cm, minimum height=5mm},
genarrow/.style={draw=col_bench_gen},
harnarrow/.style={draw=col_bench_harness},
]
\centering
%Nodes
\node[bluenode] (bench) {Benchmark suite \figref{ssec:bench_suite}};
\node[bluenode] (pocc) [below=of bench] {Loop nest optimizers \figref{ssec:loop_nest_optimizer}};
\node[bluenode] (kernel) [below=of pocc] {Constraining utility \figref{ssec:kernelify}};
\node[bluenode] (gcc) [below=of kernel] {Compilations \figref{ssec:compile}};
\node[rednode] (gdb) [right=0.1\textwidth of gcc] {Basic block \\extraction \figref{ssec:bb_extr}};
\node[bencher] (ithemal) [right=4cm of gdb] {Ithemal};
\node[bencher] (iaca) [above=0.5em of ithemal] {IACA};
\node[bencher] (uica) [above=0.5em of iaca] {uiCA};
\node[bencher] (llvm) [above=0.5em of uica] {llvm-mca};
\node[bencher] (bhive) [above=0.5em of llvm] {BHive (measure)};
\node[rednode] (ppapi) [left=1cm of bhive] {perf (measure)};
\node[rednode] (gus) [below=0.5em of ppapi] {Gus};
%% \node[rednode] (uica) [below=of gdb] {uiCA};
\node[rednode] (lifting) [below right=1em and 0.2cm of gdb] {
Prediction lifting};
\node[
draw=black,
very thick,
dotted,
fit=(ppapi) (gus) (bhive) (llvm) (uica) (iaca) (ithemal)
] (comps) {};
\node (throughput_label) [above=0.2em of comps,align=center] {
\footnotesize Throughput predictions \\\footnotesize \& measures
\figref{ssec:throughput_pred_meas}};
\node[draw=black,
very thick,
dotted,
%% label={below:\footnotesize Variations},
label={[above,xshift=1cm]\footnotesize Variations},
fit=(pocc) (kernel) (gcc)
] (vars) {};
\node[resultnode] (bench2) [right=of lifting] {Evaluation metrics \\ for
code analyzers};
% Key
\node[] (keyblue1) [below left=0.7cm and 0cm of vars] {};
\node[hiddennode] (keyblue2) [right=0.5cm of keyblue1] {Generating microbenchmarks};
\node[] (keyred1) [below=.5em of keyblue1] {};
\node[hiddennode] (keyred2) [right=0.5cm of keyred1] {Benchmarking harness};
\node[] (keyresult1) [below=.5em of keyred1] {};
\node[hiddennode] (keyresult2) [right=0.5cm of keyresult1]
{Results analysis};
%Lines
\draw[-, very thick, harnarrow] (keyred1.east) -- (keyred2.west);
\draw[-, very thick, genarrow] (keyblue1.east) -- (keyblue2.west);
\draw[-, very thick] (keyresult1.east) -- (keyresult2.west);
\draw[->, very thick, genarrow] (bench.south) -- (pocc.north);
\draw[->, very thick, genarrow] (pocc.south) -- (kernel.north);
\draw[->, very thick, genarrow] (kernel.south) -- (gcc.north);
\draw[->, very thick, genarrow] (gcc.east) -- (gdb.west);
\draw[->, very thick, genarrow] (gcc.east) -- (ppapi.west);
\draw[->, very thick, genarrow] (gcc.east) -- (gus.west);
\draw[->, very thick, harnarrow] (gdb.east) -- (uica.west);
\draw[->, very thick, harnarrow] (gdb.east) -- (iaca.west);
\draw[->, very thick, harnarrow] (gdb.east) -- (ithemal.west);
\draw[->, very thick, harnarrow] (gdb.east) -- (bhive.west);
\draw[->, very thick, harnarrow] (gdb.east) -- (llvm.west);
\draw[->, very thick, harnarrow] (comps.south-|lifting) -- (lifting.north);
\draw[->, very thick] (lifting.east) -- (bench2.west);
\end{tikzpicture}