\subsection{Intel MPI Benchmark (IMB)}

Zur Messung der Kommunikationsleistung wurden die MPI-Test Ping-Pong, Barrier, Allreduce und Alltoall mit variierenden Nachrichtengrößen durchgeführt.

\subsubsection{Ping-Pong}

\pgfplotstableread{
fs t s
0 88.99 0.00
1 109.42 0.01
2 109.43 0.02
4 109.62 0.03
8 109.83 0.07
16 109.87 0.14
32 110.12 0.28
64 143.19 0.43
128 149.24 0.82
256 150.41 1.62
512 155.65 3.14
1024 160.39 6.09
2048 164.54 11.87
4096 217.32 17.97
8192 308.20 25.35
16384 434.78 35.94
32768 573.14 54.52
65536 1742.36 35.87
131072 1800.80 69.41
262144 3070.65 81.42
524288 5457.60 91.62
1048576 10350.31 96.62
2097152 20150.02 99.26
4194304 38953.70 102.69
8388608 77368.40 103.40
16777216 154088.97 103.84
33554432 319229.01 100.24
67108864 634328.48 100.89
134217728 1262632.97 101.38
268435456 2514089.47 101.83
536870912 5052755.00 101.33
}\imbpingpong

\begin{tikzpicture}
\pgfplotsset{
    y axis style/.style={
        yticklabel style=#1,
        y axis line style=#1,
        ylabel style=#1,
        ytick style=#1
   }
}
    \begin{axis}[
        xmin=1,
        xmax=536870912,
        xmode=log,
        log basis x=2,
        xlabel={Nachrichtengr\"o{\ss}e in MiB},
        ymode=log,
        axis y line*=left,
        ylabel={Zugriffszeit in $\mu$s},
        y axis style=blue!75!black,
        width=15cm, height=10cm
    ]
    \addplot[smooth,blue] table[x={fs}, y={t}] {\imbpingpong};
    \end{axis}
    \begin{axis}[
        xmin=1,
        xmax=536870912,
        xmode=log,
        axis x line=none,
        ytick pos=right,
        axis y line* = right,
        ylabel={{\"U}bertragungsgeschwindigkeit in MiB/s},
        ylabel near ticks,
        y axis style=red!75!black,
        width=15cm, height=10cm
      ]
    \addplot[smooth,red] table[x={fs}, y={s}] {\imbpingpong};
    \end{axis}
\end{tikzpicture}

\subsubsection{Auswertung}

Die Zugriffszeiten für kleine Nachrichtengrößen entsprechen in etwa dem Ping zwischen 2 Nodes. Mit zunehmender Nachrichtengröße steigt die Zugriffszeit exponentiell an. Ab einer Nachrichtengröße von $2^7$ MiB steigt die Übertragungsgeschwindigkeit mit zunehmender Nachrichtengröße solange an, bis sie bei einer Nachrichtengröße von ca. $2^{21}$ MiB auf einem Wert von knapp über $100$ MiB/s stagniert. Dies ist auf eine Sättigung des Netzwerks zurückzuführen. Die Zugriffszeit steigt ebenfalls mit der Anzahl der Prozesse, wie in den folgenden Test ersichtlich wird. 

\subsubsection{Barrier}

Verzögerungszeiten: (jeweils Mittelwert aus 1000 Messläufen)
\begin{itemize}
	\item 2 Prozesse: 151 $\mu$s
	\item 4 Prozesse: 177 $\mu$s
	\item 8 Prozesse: 670 $\mu$s
\end{itemize}

\pagebreak

\subsubsection{All-to-All}

\paragraph{2 Prozesse} \mbox{}\\

\begin{figure}[h!]
  \centering
  \includegraphics{benchmarks/all-to-all-2.pdf}
\end{figure}

\paragraph{4 Prozesse} \mbox{}\\

\begin{figure}[h!]
  \centering
  \includegraphics{benchmarks/all-to-all-4.pdf}
\end{figure}

\pagebreak

\paragraph{8 Prozesse} \mbox{}\\

\begin{figure}[h!]
  \centering
  \includegraphics{benchmarks/all-to-all-8.pdf}
\end{figure}

\subsubsection{All-Reduce}

\paragraph{2 Prozesse} \mbox{}\\

\begin{figure}[h!]
  \centering
  \includegraphics{benchmarks/all-reduce-2.pdf}
\end{figure}

\pagebreak

\paragraph{4 Prozesse} \mbox{}\\

\begin{figure}[h!]
  \centering
  \includegraphics{benchmarks/all-reduce-4.pdf}
\end{figure}

\paragraph{8 Prozesse} \mbox{}\\

\begin{figure}[h!]
  \centering
  \includegraphics{benchmarks/all-reduce-8.pdf}
\end{figure}
