\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}