\begin{figure*}[ht!]
    \definecolor{col_bench_gen}{HTML}{5a7eff}
    \definecolor{col_bench_gen_bg}{HTML}{dbeeff}
    \definecolor{col_bench_harness}{HTML}{ffa673}
    \definecolor{col_results}{HTML}{000000}
\centerline{
  \begin{tikzpicture}[
      hiddennode/.style={rectangle,draw=white, 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\\\figref{ssec:harness_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]   {Section~\ref{sec:bench_gen}~: generating microbenchmarks};
  \node[]  (keyred1)     [below=.5em of keyblue1]   {};
  \node[hiddennode]  (keyred2)     [right=0.5cm of keyred1] {Section~\ref{sec:bench_harness}~: benchmarking harness};
  \node[]  (keyresult1)     [below=.5em of keyred1]   {};
  \node[hiddennode]  (keyresult2)     [right=0.5cm of keyresult1]
      {Section~\ref{sec:results_analysis}~: 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}
}
\caption{Our analysis and measurement environment.\label{fig:contrib}}
\end{figure*}
