The best results for various kernels are given in~\prettyref{tbl:res-kernels}. The optimization binary \verb|roofline_full_manpack| was used for these results. This is the binary with all optimizations and the intrinsics kernel enabled. The following parameters were used: \verb|roofline_full_manpack -s 150000000 -r 5|. One double array was therefore 1144.41 MB big -- clearly too big for the cache.

Note how \verb|simple8| is clearly flawed with \verb|-ffast-math| enabled. This is due to the non IEEE compliant optimization as described in~\prettyref{sec:advanced-kernels}. At this level of optimization only \verb|simple8fastmath| (which is fastmath safe but flawed with lower optimization levels) should be considered as a \emph{replacement} of \verb|simple8|.

The simple* kernel are those kernels that do not make use of FMA but can be safely used with processors without an FMA unit. fma* kernels on the other hand are those that should make use of FMA. simple8fastmath is a simple8 that can be safely used with \verb|-ffast-math| optimization. And fma8manpack is the kernel which uses intrinsics to ensure that is solely operates with FMA instructions on packed floats.

\begin{table}[h!]
  \centering
  \begin{tabular}{ll}
    \toprule
    Kernel          & Max. GFLOP/s \\
    \midrule
    simple16        & 0.9919       \\
    fma16           & 0.9891       \\
    simple8         & 123.4004     \\
    simple8fastmath & 8.7187       \\
    fma8            & 21.7866      \\
    fma8manpack     & 18.9066      \\
    \bottomrule
  \end{tabular}
  \caption{Results for various kernels}
  \label{tbl:res-kernels}
\end{table}

The rooftop graph with the best runs of the 2 best kernels of each category (\verb|simple16| and \verb|fma8|) is depictured in~\prettyref{fig:roofline-withres}.

\begin{figure}
  \begin{adjustbox}{center}
    \includegraphics[width=0.8\linewidth]{res/rooftop_res}
  \end{adjustbox}
  \caption{Roofline graph with kernel results}
  \label{fig:roofline-withres}
\end{figure}

\FloatBarrier

Best results for an input size of 100000000 are given in~\prettyref{tbl:res-kernels-10} and~\prettyref{fig:roofline-withres-10}.

\begin{table}[h!]
  \centering
  \begin{tabular}{ll}
    \toprule
    Kernel          & Max. GFLOP/s \\
    \midrule
    fma16           & 0.9816\\
    fma8            & 21.8837      \\
    \bottomrule
  \end{tabular}
  \caption{Best results for 100000000}
  \label{tbl:res-kernels-10}
\end{table}

\begin{figure}
  \begin{adjustbox}{center}
    \includegraphics[width=0.8\linewidth]{res/rooftop_res10}
  \end{adjustbox}
  \caption{Roofline graph with best results for 100000000}
  \label{fig:roofline-withres-10}
\end{figure}

Best results for an input size of 250000000 are given in~\prettyref{tbl:res-kernels-25} and~\prettyref{fig:roofline-withres-25}.

\begin{table}[h!]
  \centering
  \begin{tabular}{ll}
    \toprule
    Kernel   & Max. GFLOP/s \\
    \midrule
    simple16 & 1.0476       \\
    fma8     & 21.4297      \\
    \bottomrule
  \end{tabular}
  \caption{Best results for 250000000}
  \label{tbl:res-kernels-25}
\end{table}

\begin{figure}
  \begin{adjustbox}{center}
    \includegraphics[width=0.8\linewidth]{res/rooftop_res25}
  \end{adjustbox}
  \caption{Roofline graph with best results for 250000000}
  \label{fig:roofline-withres-25}
\end{figure}

%%% Local Variables:
%%% mode: latex
%%% TeX-master: "../report"
%%% End:
