From a580939d29f847d3c76d570a5a9c67cb73743340 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Constantin=20F=C3=BCrst?= Date: Sun, 4 Feb 2024 16:45:29 +0100 Subject: [PATCH] rewrite chapter 3 with the corrected benchmark results, add these corrected results, re-add structograms with different names --- thesis/content/30_performance.tex | 119 +++++++++++------- ...k-v2-inner.pdf => nsd-benchmark-inner.pdf} | Bin ...cto-benchmark-v2.pdf => nsd-benchmark.pdf} | Bin .../images/plot-allnodes-cpu-throughput.pdf | Bin 0 -> 12635 bytes thesis/images/plot-allnodes-throughput.pdf | Bin 0 -> 12634 bytes .../images/plot-andrepeak-cpu-throughput.pdf | Bin 0 -> 12562 bytes thesis/images/plot-brute-cpu-throughput.pdf | Bin 0 -> 12636 bytes thesis/images/plot-mtsubmit.pdf | Bin 0 -> 12572 bytes thesis/images/plot-smart-throughput.pdf | Bin 0 -> 12636 bytes thesis/images/plot-submitmethod.pdf | Bin 0 -> 14739 bytes 10 files changed, 75 insertions(+), 44 deletions(-) rename thesis/images/{structo-benchmark-v2-inner.pdf => nsd-benchmark-inner.pdf} (100%) rename thesis/images/{structo-benchmark-v2.pdf => nsd-benchmark.pdf} (100%) create mode 100644 thesis/images/plot-allnodes-cpu-throughput.pdf create mode 100644 thesis/images/plot-allnodes-throughput.pdf create mode 100644 thesis/images/plot-andrepeak-cpu-throughput.pdf create mode 100644 thesis/images/plot-brute-cpu-throughput.pdf create mode 100644 thesis/images/plot-mtsubmit.pdf create mode 100644 thesis/images/plot-smart-throughput.pdf create mode 100644 thesis/images/plot-submitmethod.pdf diff --git a/thesis/content/30_performance.tex b/thesis/content/30_performance.tex index c84972f..8fe8f61 100644 --- a/thesis/content/30_performance.tex +++ b/thesis/content/30_performance.tex @@ -8,7 +8,7 @@ The performance of \gls{dsa} has been evaluated in great detail by Reese Kuper e \section{Benchmarking Methodology} \label{sec:perf:method} -\begin{figure}[H] +\begin{figure}[ht] \centering \includegraphics[width=0.9\textwidth]{images/xeonmax-numa-layout.png} \caption{Xeon Max \glsentrylong{node} Layout \cite[Fig. 14]{intel:maxtuning} for a 2-Socket System when configured with HBM-Flat. Showing separate \glsentryshort{numa:node} IDs for manual \glsentryshort{hbm} access and for Cores and \glsentryshort{dram}.} @@ -19,14 +19,29 @@ The benchmarks were conducted on a dual-socket server equipped with two Intel Xe As \gls{intel:dml} does not have support for \glsentryshort{dsa:dwq}s, we run benchmarks exclusively with access through \glsentryshort{dsa:swq}s. The application written for the benchmarks can be obtained in source form under the directory \texttt{benchmarks} in the thesis repository \cite{thesis-repo}. \par -\begin{figure}[H] +\begin{figure}[ht] \centering - \includegraphics[width=0.9\textwidth]{images/nsd-benchmark.pdf} - \caption{Benchmark Procedure Pseudocode. Timing marked with yellow background. Showing data allocation and the benchmarking loop for a single thread.} + \begin{subfigure}{0.3\textwidth} + \includegraphics[width=\textwidth]{images/nsd-benchmark.pdf} + \caption{Outer benchmark function.} + \label{fig:bench:outer} + \end{subfigure} + \hfill + \begin{subfigure}{0.7\textwidth} + \includegraphics[width=\textwidth]{images/nsd-benchmark-inner.pdf} + \caption{Inner benchmark function.} + \label{fig:bench:inner} + \end{subfigure} + \hfill + \caption{Benchmark Procedure Pseudocode. Timing marked with yellow background. Showing location preparation and launch in (a) and work submission in (b).} \label{fig:benchmark-function} \end{figure} -The benchmark performs node setup as described in Section \ref{sec:state:dml} and allocates source and destination memory on the nodes passed in as parameters. To avoid page faults affecting the results, the entire memory regions are written to before the timed part of the benchmark starts. To get accurate results, the benchmark is repeated at least 100 times. Each iteration is timed from beginning to end, marked by yellow in Figure \ref{fig:benchmark-function}. The launch is synchronized by use of a barrier for each iteration. The behaviour then differs depending on the submission method selected which can be a single submission or a batch of given size. This can be seen in Figure \ref{fig:benchmark-function} at the switch statement for \enquote{mode}. Single submission follows the example given in Section \ref{sec:state:dml}, and we therefore do not go into detail explaining it here. Batch submission works unlike the former. A sequence with specified size is created which tasks are then added to. This sequence is submitted to the engine similar to the submission of a single descriptor. \par +The benchmark performs node setup as described in Section \ref{sec:state:dml} and allocates source and destination memory on the nodes passed in as parameters. To avoid page faults affecting the results, the entire memory regions are written to before the timed part of the benchmark starts. We therefore also do not use \enquote{.block\_on\_fault()}, as we did for the memcpy-example in Section \ref{sec:state:dml}. \par + +To get accurate results, the benchmark is repeated 10 times. Each iteration is timed from beginning to end, marked by yellow in Figure \ref{fig:bench:outer}. For small task sizes, the iterations complete in a very short amount of time, which can have adverse effects on the results \cite{time-longer-sections}. Therefore, we repeat the code of the inner loop for a configurable amount, virtually extending the duration of a single iteration for these cases. \par + +For all \gls{dsa}s used in the benchmark, a submission thread executing the inner benchmark routine is spawned. The launch is synchronized by use of a barrier for each iteration. The behaviour in the inner function then differs depending on the submission method selected which can be a single submission or a batch of given size. This can be seen in Figure \ref{fig:bench:inner} at the switch statement for \enquote{mode}. Single submission follows the example given in Section \ref{sec:state:dml}, and we therefore do not go into detail explaining it here. Batch submission works unlike the former. A sequence with specified size is created which tasks are then added to. This sequence is submitted to the engine similar to the submission of a single descriptor. \par \section{Benchmarks} \label{sec:perf:bench} @@ -40,83 +55,97 @@ With each submission, descriptors must be prepared and sent to the underlying ha We anticipate that single submissions will consistently yield poorer performance, particularly with a pronounced effect on smaller transfer sizes. This expectation arises from the fact that the overhead of a single submission with the \gls{dsa:swq} is incurred for every iteration, whereas the batch experiences this overhead only once for multiple copies. \par -\begin{figure}[H] +\begin{figure}[ht] \centering - \includegraphics[width=0.7\textwidth]{images/plot-opt-submitmethod.pdf} + \includegraphics[width=0.7\textwidth]{images/plot-submitmethod.pdf} \caption{Throughput for different Submission Methods and Sizes. Performing a copy with source and destination being node 0, executed by the \glsentryshort{dsa} on node 0. Observable is the submission cost which affects small transfer sizes differently, as there the completion time is lower.} \label{fig:perf-submitmethod} \end{figure} In Figure \ref{fig:perf-submitmethod} we conclude that with transfers of 1 MiB and upwards, the submission method makes no noticeable difference. For smaller transfers the performance varies greatly, with batch operations leading in throughput. This finding is aligned with the observation that \enquote{SWQ observes lower throughput between 1-8 KB [transfer size]} \cite[p. 6 and 7]{intel:analysis} for normal submission method. \par -Another limitation may be observed in this result, namely the inherent throughput limit per \gls{dsa} chip of close to 30 GiB/s. This is apparently caused by I/O fabric limitations \cite[p. 5]{intel:analysis}. We therefore conclude, that the use of multiple \gls{dsa} is required to fully utilize the available bandwidth of \gls{hbm} which theoretically lies at 256 GB/s \cite[Table I]{hbm-arch-paper}. \par +Another limitation may be observed in this result, namely the inherent throughput limit per \gls{dsa} chip of close to 30 GiB/s. This is apparently caused by I/O fabric limitations \cite[p. 5]{intel:analysis}. \par \subsection{Multithreaded Submission} \label{subsec:perf:mtsubmit} As we might encounter access to one \gls{dsa} from multiple threads through the associated \glsentrylong{dsa:swq}, understanding the impact of this type of access is crucial. We benchmark multithreaded submission for one, two, and twelve threads - the latter representing the core count of one processing sub-node on the test system. Each configuration is assigned the same 120 copy tasks split across the available threads, all submitting to one \gls{dsa}. We perform this benchmark with sizes of 1 MiB and 1 GiB to examine, if the behaviour changes with submission size. For smaller sizes, the completion time may be faster than submission time, leading to potentially different effects of threading due to the fact that multiple threads work to fill the queue, preventing task starvation. We may also experience lower-than-peak throughput with rising thread count, caused by the synchronization inherent with \gls{dsa:swq}. \par -\begin{figure}[H] +\begin{figure}[ht] \centering - \includegraphics[width=0.7\textwidth]{images/plot-perf-mtsubmit.pdf} + \includegraphics[width=0.7\textwidth]{images/plot-mtsubmit.pdf} \caption{Throughput for different Thread Counts and Sizes. Multiple threads submit to the same Shared Work Queue. Performing a copy with source and destination being node 0, executed by the DSA on node 0.} \label{fig:perf-mtsubmit} \end{figure} -In Figure \ref{fig:perf-mtsubmit}, we note that threading has no discernible negative impact. The synchronization appears to affect single-threaded access in the same manner as it does for multiple threads. Interestingly, for the smaller size of 1 MiB, our assumption proved accurate, and performance actually increased with the addition of threads, which we attribute to enhanced queue usage. However, we were unable to identify an explanation for the speed difference between sizes. This finding contradicts the rationale that higher transfer sizes would result in less impact on submission time and, consequently, higher throughput. \par +In Figure \ref{fig:perf-mtsubmit}, we note that threading has no discernible negative impact. The synchronization appears to affect single-threaded access in the same manner as it does for multiple threads. Interestingly, for the smaller size of 1 MiB, our assumption proved accurate, and performance increased with the addition of threads, which we attribute to enhanced queue usage. We ascribe the higher throughput observed with 1 GiB to the submission delay which is incurred more frequently with lower transfer sizes. \par \subsection{Data Movement from \glsentryshort{dram} to \glsentryshort{hbm}} \label{subsec:perf:datacopy} -Moving data from \gls{dram} to \gls{hbm} is most relevant to the rest of this work, as it is the target application. As we discovered in Section \ref{subsec:perf:submitmethod}, one \gls{dsa} has a peak bandwidth limit of 30 GiB/s. We write to \gls{hbm} with its theoretical peak of 256 GB/s \cite[Table I]{hbm-arch-paper}. Our top speed is therefore limited by the slower main memory. For each node, the test system is configured with two DIMMs of DDR5-4800. We calculate the theoretical throughput as follows: \(2\ DIMMs * \frac{4800\ Megatransfers}{Second\ and\ DIMM} * \frac{64-bit width}{8 bits/byte} = 76800\ MT/s = 75\ GiB/s\)\todo{how to verify this calculation with a citation? is it even correct because we see close to 100 GiB/s throughput?}. We conclude that to achieve closer-to-peak speeds, a copy task has to be split across multiple \gls{dsa}s. \par +Moving data from \gls{dram} to \gls{hbm} is most relevant to the rest of this work, as it is the target application. As we discovered in Section \ref{subsec:perf:submitmethod}, one \gls{dsa} has a peak bandwidth limit of 30 GiB/s. For each node, the test system is configured with two DIMMs of DDR5-4800. \par + +The naming scheme contains the data rate in megatransfers per second \cite{kingston:ddr5-spec-overview}. We calculate the transfers performed per second as follows: + +\[2\ DIMMs * \frac{4800\ MT}{s\ and\ DIMM} = 76800\ T/s\] -Two methods of splitting will be evaluated. The first employs a brute force approach, utilizing all available resources for any transfer direction. The second method's behaviour depends on the data source and destination locations. Given that our system consists of multiple sockets, communication crossing between sockets could introduce latency and bandwidth disadvantages\todo{cite this}. We posit that for intra-socket transfers, utilizing the \gls{dsa} from the second socket will have only a marginal effect. For transfers crossing sockets, we assume every \gls{dsa} performs equally worse, prompting us to use only the ones on the destination and source nodes for them being the physically closest to both memory regions. While this choice may result in lower performance, it uses only one-fourth of the engines in the brute force approach for inter-socket transfers and half for intra-socket transfers. This approach also frees up additional chips for other threads to utilize.\par +The data width of DDR5 is 64 bit \cite{kingston:ddr5-spec-overview}. The theoretical peak transfer speed in GiB/s therefore is: + +\[76800\ T/s * \frac{64b}{8b/B} = 75\ GiB/s\] + +\par + +We conclude that to achieve peak speeds, a copy task has to be split across multiple \gls{dsa}s. Two methods of splitting will be evaluated. The first employs a brute force approach, utilizing all available resources for any transfer direction. The second method's behaviour depends on the data source and destination locations. Given that our system consists of multiple sockets, communication crossing between sockets could introduce latency and bandwidth disadvantages \cite{bench:heterogeneous-communication}. We posit that for intra-socket transfers, utilizing the \gls{dsa} from the second socket will have only a marginal effect. For transfers crossing sockets, we assume every \gls{dsa} performs equally worse, prompting us to use only the ones on the destination and source nodes for them being the physically closest to both memory regions. While this choice may result in lower performance, it uses only one-fourth of the engines in the brute force approach for inter-socket transfers and half for intra-socket transfers. This approach also frees up additional chips for other threads to utilize.\par For this benchmark, we transfer 1 Gibibyte of data from node 0 to the destination node, employing the submission method previously described. For each utilized node, we spawn one pinned thread responsible for submission. We present data for nodes 8, 11, 12, and 15. To understand the selection, refer to Figure \ref{fig:perf-xeonmaxnuma}, which illustrates the node IDs of the configured systems and the corresponding storage technology. Node 8 accesses the \gls{hbm} on node 0, making it the physically closest possible destination. Node 11 is located diagonally on the chip, representing the furthest intra-socket operation benchmarked. Nodes 12 and 15 lie diagonally on the second socket's CPU, making them representative of inter-socket transfer operations. \par -\begin{figure}[H] +\begin{figure}[ht] \centering - \includegraphics[width=0.7\textwidth]{images/plot-perf-allnodes-throughput-selectbarplot.pdf} - \caption{Throughput for brute force copy from \glsentryshort{dram} to \glsentryshort{hbm}. Using all available DSA. Copying 1 GiB from \glsentryshort{numa:node} 0 to the destination \glsentryshort{numa:node} specified on the x-axis. Shows peak throughput achievable with \glsentryshort{dsa}.} - \label{fig:perf-peak-brute} + \begin{subfigure}{0.4\textwidth} + \includegraphics[width=\textwidth]{images/plot-perf-smart-throughput-selectbarplot.pdf} + \caption{Brute Force Assignment: using all available \glsentryshort{dsa}, irrespective of source and destination locations.} + \label{fig:perf-dsa:smart} + \end{subfigure} + \hfill + \begin{subfigure}{0.4\textwidth} + \includegraphics[width=\textwidth]{images/plot-perf-allnodes-throughput-selectbarplot.pdf} + \caption{Smart Assignment: using four on-socket \glsentryshort{dsa} for intra-socket operation and the \glsentryshort{dsa} on source and destination node for inter-socket copies.} + \label{fig:perf-dsa:allnodes} + \end{subfigure} + \hfill + \caption{Copying 1 GiB from \glsentryshort{numa:node} 0 to the destination \glsentryshort{numa:node} specified on the x-axis. Shows peak throughput achievable with \glsentryshort{dsa} for different load balancing techniques.} + \label{fig:perf-dsa} \end{figure} -\begin{figure}[H] - \centering - \includegraphics[width=0.7\textwidth]{images/plot-perf-smart-throughput-selectbarplot.pdf} - \caption{Throughput for smart copy from \glsentryshort{dram} to \glsentryshort{hbm}. Using four on-socket \glsentryshort{dsa} for intra-socket operation and the \glsentryshort{dsa} on source and destination node for inter-socket. Copying 1 GiB from \glsentryshort{numa:node} 0 to the destination \glsentryshort{numa:node} specified on the x-axis. Shows conservative performance.} - \label{fig:perf-peak-smart} -\end{figure} +\todo{update} -From the results of the brute force approach illustrated in Figure \ref{fig:perf-peak-brute}, we observe peak speeds of 96 GiB/s when copying across the socket from Node 0 to Node 15. This contradicts our initial assumption that peak bandwidth would be achieved in the intra-socket scenario\todo{find out why, perhaps due to certain factors?} and goes against the calculated peak throughput of the memory on our system\todo{potential calculation error or other influencing factors?}. Nevertheless, these results align with findings presented in \cite[Fig. 10]{intel:analysis}. \par +From the results of the brute force approach illustrated in Figure \ref{fig:perf-peak-brute}, we observe peak speeds of close to 64 GiB/s when copying across the socket from Node 0 to Node 15. This contradicts our assumption that peak bandwidth would be limited by the interconnect. \par While consuming significantly more resources, the brute force copy depicted in Figure \ref{fig:perf-peak-brute} surpasses the performance of the smart approach shown in Figure \ref{fig:perf-peak-smart}. We observe an increase in transfer speed by utilizing all available \gls{dsa}, achieving 2 GiB/s for copying to Node 8, 18 GiB/s for Nodes 11 and 12, and 30 GiB/s for Node 15. The smart approach could accommodate another intra-socket copy on the second socket, we assume, without observing negative impacts. From this, we conclude that the smart copy assignment is worth using, as it provides better scalability. \par \subsection{Data Movement using CPU} -For evaluating CPU copy performance two approaches were selected. One requires no code changes, showing the performance of running code developed for \gls{dsa} on systems where this hardware is not present. For the other approach we modified the code to result in peak performance. \par - -\begin{figure}[H] - \centering - \includegraphics[width=0.7\textwidth]{images/plot-perf-smart-cpu-throughput-selectbarplot.pdf} - \caption{Throughput from \glsentryshort{dram} to \glsentryshort{hbm} on CPU. Using the exact same code as smart copy, therefore spawning one thread on Node 0, 1, 2 and 3. Copying 1 GiB from \glsentryshort{numa:node} 0 to the destination \glsentryshort{numa:node} specified on the x-axis. This shows the low performance of software path, when not adapting the code.} - \label{fig:perf-cpu-peak-smart} -\end{figure} - -For Figure \ref{fig:perf-cpu-peak-smart} we used the smart copy procedure as in \ref{subsec:perf:datacopy}, selecting the software path with no other changes to the benchmarking code. \par +For evaluating CPU copy performance we use the benchmark code from Section \ref{subsec:perf:datacopy}, selecting the software instead of hardware execution path (see Section \ref{subsec:state:dsa-software-view}). Colleagues performed extensive benchmarking of the peak throughput on CPU for the test system \cite{xeonmax-peakthroughput}, from which we will present results as well. \par -\begin{figure}[H] +\begin{figure}[ht] \centering - \includegraphics[width=0.7\textwidth]{images/plot-perf-brute-cpu-throughput-selectbarplot.pdf} - \caption{Throughput from \gls{dram} to \gls{hbm} on CPU. Using 12 Threads spawned on \gls{numa:node} 0 for the task. Copying 1 GiB from \gls{numa:node} 0 to the destination \gls{numa:node} specified on the x-axis.} - \label{fig:perf-cpu-peak-brute} + \begin{subfigure}{0.4\textwidth} + \includegraphics[width=\textwidth]{images/plot-allnodes-cpu-throughput.pdf} + \caption{Using allnodes code with software path.} + \label{fig:perf-cpu:swpath} + \end{subfigure} + \hfill + \begin{subfigure}{0.4\textwidth} + \includegraphics[width=\textwidth]{images/plot-andrepeak-cpu-throughput.pdf} + \caption{Colleague's benchmark \cite{xeonmax-peakthroughput}.} + \label{fig:perf-cpu:andrepeak} + \end{subfigure} + \hfill + \caption{Throughput from \glsentryshort{dram} to \glsentryshort{hbm} on CPU. Copying from \glsentryshort{numa:node} 0 to the destination \glsentryshort{numa:node} specified on the x-axis.} + \label{fig:perf-cpu} \end{figure} -The benchmark resulting in Figure \ref{fig:perf-cpu-peak-brute} fully utilizes node 0 of the test system by spawning 12 threads on it. This level of utilization required code modifications beyond selecting a different execution path and would therefore not be achieved without additional programming efforts. \par - -We attribute the low performance of the inter-socket copy operation to overhead of the interconnect between the two sockets. We attribute the slight difference between node 12 and 15 to the on-chip location of these in reference to node 0 which. As Figure \ref{fig:perf-xeonmaxnuma} shows, node 12 is slightly closer to node 0. \par - -Comparing the results in Figure \ref{fig:perf-cpu-peak-smart} with the data from the adapted test displayed in Figure \ref{fig:perf-cpu-peak-brute} we conclude that the software path primarily serves compatibility. The throughput is comparatively low, requiring code changes to increase performance. This leads us to advice against its use. \par +The \section{Analysis} \label{sec:perf:analysis} @@ -129,7 +158,9 @@ In this section we summarize the conclusions drawn from the three benchmarks per \item In \ref{subsec:perf:datacopy}, we chose to use the presented smart copy methodology to split copy tasks across multiple \gls{dsa} chips to achieve low utilization with acceptable performance. \end{itemize} -Once again, we refer to Figures \ref{fig:perf-peak-brute} and \ref{fig:perf-cpu-peak-brute}, both representing the maximum throughput achieved with the utilization of either \gls{dsa} for the former and CPU for the latter. Noticeably, the \gls{dsa} does not seem to suffer from inter-socket overhead like the CPU. On the contrary, we observe the highest throughput when copying across sockets\todo{explanation needed?}. In any case, \gls{dsa} outperforms the CPU for transfer sizes over 1 MiB, demonstrating its potential to increase throughput while simultaneously freeing up CPU cycles. \par +\todo{update} + +Once again, we refer to Figures \ref{fig:perf-cpu} and \ref{fig:perf-cpu-peak-brute}, both representing the maximum throughput achieved with the utilization of either \gls{dsa} for the former and CPU for the latter. Noticeably, the \gls{dsa} does not seem to suffer from inter-socket overhead like the CPU. In any case, \gls{dsa} performs at or above CPUs peak throughput, demonstrating potential for faster data movement while simultaneously freeing up CPU cycles. \par %%% Local Variables: %%% TeX-master: "diplom" diff --git a/thesis/images/structo-benchmark-v2-inner.pdf b/thesis/images/nsd-benchmark-inner.pdf similarity index 100% rename from thesis/images/structo-benchmark-v2-inner.pdf rename to thesis/images/nsd-benchmark-inner.pdf diff --git a/thesis/images/structo-benchmark-v2.pdf b/thesis/images/nsd-benchmark.pdf similarity index 100% rename from thesis/images/structo-benchmark-v2.pdf rename to thesis/images/nsd-benchmark.pdf diff --git a/thesis/images/plot-allnodes-cpu-throughput.pdf b/thesis/images/plot-allnodes-cpu-throughput.pdf new file mode 100644 index 0000000000000000000000000000000000000000..42e17dcfed503baaa745104bd76dd9e71ad1d3be GIT binary patch literal 12635 zcmb_@2{@Ep*l%5@&~5-$ zO9!Ar4x&OReII~=#&WH>T31}(v^LykKcGxg#7F%8fJ6FbE8bqapkUuVN#~m5`=>Oj024l zeaS~niaoriNXKP4#fn*)os&9QZXM&cINU){vEXu(=8f#yYF*8vbIZ2;)Te6!w^mWu zf~Sr}uyfaas^)!Rj|du zV&?grZb16J2jYV<>N8J|b8Q{xzIP~t@y?Gvx4de`(amI=h zDh7D$g9Lr6z0Pi!y z(RV6jm-jEtcbWuA4081iINGa7*d@Jxf2mL|E-V(CL@K(c$jadO%xd|yQ2m^?-`BZ3m{uZ6(pMP&oCQrVb7rf4OC;P6theLzwT`|1Y#pw@;_5Z= zl6cNzhfclwWK6vD?f`d^@y$WIo3n1=UnYZ8-ruEo?j6&8k9zL-C>6F{%lmEFiqSSF z&72WQKP?+=Q^S3`A^U&&U~{%&V`GVUu$%v|t5wXeCo^I=I%^Q=jeE>h>aXu}oI5Af zsG@|y7_48VK1VSlZQkx9-kG@Yi0rQaI(_cE&vb3h`!xlpp@5Ek9lXxz)7QAS@X3-T z`rQk|r}wSh%UeH%#33Ju=(lkDn|>}$m9z24PQUX z_`-fX%-W$PD-mbS@OoseEO2r{pZCsix*{1mJiuBpWbZt;9iTU#Saqlhs z&V!poo6RG`$5k#8>_#_n8#I5>zs>ZvVd`sfyU(%3Rem1swR9N&tN-|EDgTP0Nw?N( zim+-;T2+XLgs7=>xcbjGEPAP(v~v}7oGVZYO)`tdHM_s;2!Bw4_w(hA^I|O%n_)Ft zeX_CTR#p%PJHutCWEZ(-JJWYwPAkodKRa;KMg5^?24StwQ0R0?;`S!O(~DD^#)LFj zDz;K7WLx%3Yh|x&rLK!zBS(#g52$P`xztxI?>{)8qS)DI>R|gV;+{v1ts-6aDQtv>as`4T%TAm3Gk+}`C z&HH`uH?9&ZB@4rKFGWo2S8mFBAm!HXo!{moZG}b17seg`W~pP#HBG#S4LSKL0&8m$ zSS*pV&?lLZv;n!VNlrK;#>2cx!1Lg1TC&g zGqIESoqt%^&92ye@_)fTLj0|@jc8WJMZ;UH3X!I>1%;~jzc}06yGVBVGaj~%2lFpC>!jSL>>-f(z z_^r`8wr1C+RpwqijdU=9Ba9X7!J+?xKPo8(6kwb*=Tsx*)-`?|Jo_nkYwfA0$A%@v z-yIhiXmNLblHYv<@Fi*Br_OU8zgSL$rlY;uDWxGZDRQ8-u5dj z1*h&QNx7AOpqk53HbjdEwNK|yy}9_vOQU&-Vg)_wNY)|3iJe)xV*^F4O2bZ@?( z9bcJ+E6Sf_o3e({|9QLl@Jr;-gvl) z4y!d>zFbXw^yOG>N~Uqrlt{+|q+n)HrkGf{TidX$E9Cav!mzbrwu%c`IQLvgH1!0# zQ&h5FfAK5I*@O*?foa{=ER)3f<2DZK9yJ;E@8WZp8)kO#%x)odP~z;774iE^E?ZdZ zqAzenP^+6$p#aO=nT`bP+fjvN$+IUWXNP41Nk=(9uoL4&ct_@?gTsj7Ib#PWS8wuH zU$lQRFQk2AR2T*btyYHkgt;;ekuDp2O+{~{) z_3~)(xnpnk*vZo27kms@$uB(V&-_v`RZ7qj;rKv`L``j(7V{I*DUx-Yd{)YsC1q-O zv>LaiXMLzH2PU=bm3Ybd($Izz8XqYyKZG|yMVjW&yewY>GEz}68@Js_-X)sieGUM&U-I6IPub~&_=CK`l z=Th%%_qmgbP;~2MlHtDo+!bl0(0N1OJdQsV`(Ef$py-ie<@Sq;qpn8xip4SqAD9eh z&I|a}>=|-3PHUqIbq^Aw8v0<~Iaw&m7&)o%Uqo$VToA z_hbCeTo=Ev{D`&{rNcq^2BpqhvjzLW*&^WaUxz^wfb?!gh;hLRjxuoP(#^tfQ2+XimF>CnfwXA-xwn}R()v_ch!F>y|f%l2Kvw-7B z?-hnpeoL+NLt||*1^4pf>a_mb9QZKhp0l5~WD#pN@SajBCYm-*Yq|IbO(krTcu?X8-z9!Ry!VQA35(`uz;6 zJ{)cTZ1RITY8s9K@yERbRBkf$8&0;8`kRqW-jiqgFI>Ulq(#DpYNPgkPz$WA z|KwMFZaZ!?$A^wg;p6WLnPUHDSAYQFI3oxUMtHxfi8!3ByR4b1IkGr#hclAI#8#Ga zGX0b_I~OKGSVm<&StLOI`{tuLgEwq~Q#uA0PmPFLn9ZB#%Q=b*X^C= zQ{Ox0<^{{R?k?D6)8QbU0G;#~@ws;Vt@Vu%E7PK-IvWBpWFm1gdUi2>9rm!}28FI2CNCS38+{S45z5(KJ+s{KOw2uD-kHz}Wg{ zT!N)x+rpg6z2w5j$=JTduhD#VlSk&9+vGy{ibv{iajwe0jI3gA=O3CNN_ni>S$jgi z>Ed)SB{0YP;?8$p1XkfV(f*Aw;=2Xwd!MdKKVm8IS9>1UvDd$ro}n=dy8Pl-Qzi`rEhlQqS*zt$C1*K~I1?TE%n)&nK0I2~M@ zONuV$r;oo=4x4q?_ScE)JE5Q`l45(G6!!A|c_G_ZcJdW3eZ(rR?|L>N{307=H~V3O z!B|8K9qG^s(=mT@Ceco6+s6#zsL8_B;^+{>=i;_cTpxavMa?`=58kN3;cU`WZntZn z6SX<9Mi#gBm@fas?XOsux`)<~JSH-UT$Gj`p*S(f6;7yqF&F;WmpEwlKI=lF^foV{y+gYq?APxY zR+YPqHGXoF(e}m7v?7(E$?ZaciqpRni=!7)WB=?$aM&7Cv}rk>fjf#1gs*OEXyI#p zLF{!6xea<8Eq53yIYO$$v%_NCLry_H>slc`t%}T8el5XlhUCuYI~Z4q5A$``s>}XhYwfGa} z$r2`amxXsk3W57I)BX^v+*cl{=0~o#dZtl7dJqG)v6mnP-8h3&FY=#Xr^x$sJm)rPjkG~L=a%yWke&n`2E*?0#ZEUBLr;R};Tg{mp zZfb0gEl5K}D%*t-inDZRr4z7YF$#aCRmJprJQKK0u#eni-55Mx;Ldl#;L_rZ-j`X? zUOsJeX+ma-6l#B}xQ)eA#lz_>oCl-cP+W=P(%Pt#<>GTah>u5N-}1~od6-_QiO=vL z9c9N!7j71OU_i|BlSbB_f831wy4HuvXca9~u^Z~ibsVUM{M)!Ta@@*9o)G2OVYFtk z)Iaf@!->tR%^x*+l2bU}5*Dq$PY0|mvq+Roruf#sbjU8?WLz(hl2s>WZ(SkBz21|c zZq(gqD;sj7#^J~2DzRD)wb|H~eOcxS7aF|$^14xPBrP7%VG*6UTH$ZBA?^lzOmlnrqH-$VA!i3!O=!LMjzX)NCOgnsl^uFCd5YUaI0yl(MPAFgb zeoXTYTS|t9!OIKNsk_tfkmtlmz8$r1G^35vJf|r=cgre%T;y0CxM*s*u0*_IN0;4w zN(EjYHQ1~WpW$^iVWi+tgw4gEsaKC4NQJ&r!QOJKyh%bAsodjCGQM`Z?EM3!v@MLW zwMm~e@(>?{`owb*w+){%KVvNWW@E;=(L;w5R;jc;jep$R*0~{0=c;Ue@7^>8E;Q1j zH*H^0a%d`Yji$TqEB z|16uYwghuTY(>FfeYay&*BoL%q3zRJ!!Y>|bO@yr&4E+@p9z&UH}G$TIEDid_UCc) zEU%T{QEP*4E>@?U)Yjp2oWZ<_irsP82CBK(-%=Cbr55?3tf(upTW`2sF{U%=#I+RJ z$U|B(uQ4skEn$;IABBXz6nAx0vfM@u9^l$G+ZRC=dDY54waBP zsGFr@w)D|@^Bb#qBCq4_1-#h$z)GizFOaCW*UsBF;k)&Yo=A$F&T+A%a|NQx=W{!{ zBoHqXvxWSn8J*r|l~VmT@7#C!Y!~75i5i@~+lP9+ip-{i_6n6hI4s<*9+d3%&*>{* zovd&-=;y{@^rZd|x_Z|x~i>zS& zAK#`YJ}Mpk!5|ZGIDn2==!A&!f1!Rj9MJ-JJoIYrOP8YPT-eBTh02JrC#4I>X|lVZ zeVn~>9o?MQxY|G%s1|$e{;E@1NJcu?&*o%X+wT)Uin@S}JZAdu6_m_w;ULTCQNpEB--9r5vUBRo@~w z>D(XT>4af_6A9pmRi@~WW*$wjvfx`r^WW(L$BN(1lo;IKxX?rcP9|`}K9`-7(AXwC zvJd+%GGK8$3;Z*I0A)Gh9?Ihz2t?4wFQGbjQgnO zsYabrf-rn@8#8*I9`?oXo_Q)ezj7+RgKtUgy5v z*Ace8Iqx!i+n4H!vN!F5i9*)AVi&X;v8^qmo6_%1l)LRdn(o<{7!;ActzWjyn%R8w z6NT~Pa~BTEURe`!Gc)}-LeMIf@2L96^SbdzW;a?|L%rhy`hIb-rpY0Jp+kBcq(d@+ zX2LVLtr+C!&}Qw&>Y?H(r%0`})R|}VJr(DFJc^TVP?UbR+t$YAzUt=j)Y~%Hcfr;( z)KC3w;q3UyoQ08x9Nc(ve9CQ>k|9!5PNtbvP>trvwRbUXBA+m8OgYfq?AZC{>`I|s?^ zs(X`MLhY5Se9DQ`#fRFWSHA_g}#guR%@MG|d(4&2)*t$;kmvgukb1lS4Jsxd+ zf#G+r86fwq8?!G{$yDzswrdebZZLf4B<9Y!JrgTe6`&#yjp$fsI3-c6HsQDv@R52V zk%gyo?=h)!$Cc{D6a9I<<)IR(Q9I-FF=GL;K6|>26uf%Itc#~#rwZBclat(lDi)ae zOk~_(=2<+grq}qL!u2`e%E@Oz1|#?Q9=tkqw`01=(y{gQ07Z@X@a40*m{;H8%0@=M zEHLhI+#N%QhjgM!jQn5NA)_RHPEBzBnagh4kRO3-98qp4to4{|DA8ouAG+`w@>5ps z*|$ZG>N*;iuXXgMneG~;CyBLHZhKU68e_*;Tgw@Cg?z7V3pHr^;_%>ghP1c~ zGI~1ny{I`+>B73JmSg^f$19(l-sZwDGD{$bFrwUC-@Et$f|$TQO6)X4lsr4Ciz$ z(|_j=V8y>yd?_)9mTiO5a0(zVw~Wlpw5+yik@q@T?YD5E1i(hoKY*&~;p7h{qYRyv z+gJhtfr95~kpo=(J^iS@{t#w4EyrTNGnJP11H%AL!q~|NB+qE9TzYA~#!|wJEC!9m zK(csnO2^29%Qg%axEGKt1A{PfqWXK%vTEeeXxI~h?>{Yj1PVsZ6eRnA92#2c4+5o4 z0Vy$XD$u_vNI$y}C@oJnH!?`%firh@LpX3x5#Zm%AM7+BA~^ZG02D5zM*W*RMPvHU>)wBb`iod-Jp3PI02u7;bV$+eIq`fG7MO z9*-kpmTH_lJpTVz5I^7Jz*xAzYy2z(@UtJ#6~F+XJwyet5J>@&2PX_7&{qNgE)N$1 z7Q&JU2v8s*fd~-@U=gr^67l-Hju` z^Y9P>)Cz!Ea7`;9Lk?yJ%mlcG;nRc$GZ5ea7>j^m62Kf9Q+^@`*EIcsA>rW%G|VCx zZJ0E;28AXU7~E1p5CDm^nJ|CnA&DJP-{K!yNUSO@47k^+zktQWws{91nM#LpUL z3XnU3R>SRI3Qg8a@8L236j(1{slxTYnNz=BhG+ms0W66*Y;FM)X)Rp{1E0V^pD{#B z^Z+eOkbSw-=LBKl$RG5%LO{r%1xz=DUG`c_)(Z%oHiBm4u{3wGZ1=It(A**HGBgjs z;iXkPA=(u^v~W1H z6~rBW-o8|CPiH6)C#N8XmVrE|RKEa46w2qHS8~4o?otR8h(BESyMUbBUuXHbx;w(UMZX@FmEf?1n&t@B{%2 z*766~dje1&H|U=}IP`%(5M{X!gTVpYu(A(}29jJc4tC%x`*5&wt{8^{KIXSRkURC? zKJY|bITww_!HNif{=pB>4DyOr^r5lnl{lj@SYWeOj3X)hMhBWi05R6eabWU_J`7p` z_{kOHFgSR7!=GR9BZA-SR`!wL0QA4(uvpl@tmwl5N3^n!@H=f-1%;LPp>Y^s^H$8o z5#TuQzc7G!e;bF#{mvIW{&!sP3c#1FSdW1Doel!_cUc0H{~Nu){r`pwfdnGz6)->+ z8Zcr1rGtq7eJ)Xf^xHUjG;HSnJ69eLo6{A21Q4*T>>~m{wX#p)H+@DcV1e&lF;0O% z`b~EM`&O<8!gj(hvZVSud3uxmY5xRa;TgPiyfF9mg$)nQI_p#1fO&=u4=w3Gfa>H= TrEPT#1~^lMxVW~74&wg-NkNGo literal 0 HcmV?d00001 diff --git a/thesis/images/plot-allnodes-throughput.pdf b/thesis/images/plot-allnodes-throughput.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3e833523c2ae85bbdff3e1e32289f904286795f6 GIT binary patch literal 12634 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 TzSYra0vh})g_Q12J;eV5tXGwL literal 0 HcmV?d00001 diff --git a/thesis/images/plot-andrepeak-cpu-throughput.pdf b/thesis/images/plot-andrepeak-cpu-throughput.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1799fdafff5aeb59cd511ac2b2bbc0fb03851ba9 GIT binary patch literal 12562 zcmb_@2|Sct)OeyWglwfO50VJ84`a(7*@tA$HkL3nhNR6}lr34JQba}8h-{H1gis<| zdm*GGT9p5NhTeMR`@j9Z-#7ES?tRX4?>);s_ndR@91on|yg8X3YZ0!$ofG%}R};o(OF(#+k_#e?Do5tiOkeVon6G{^>^ z)zSf^kOOHDQqLQZps`eIF4cOF-EZWe|6~BB8>XI02GlK*k0g=(eEg}-fFGECfZvep z;^C;_69_P(z!!}t%3+Bp0tOFZ&}can0V|IOc#xWaLokgWL|mj(okH;ePiT0|?^1zZ z{}iJEnc_xshtNx?bv(QP;}BBE3rItY?Cj%0hUxdCQOS?qq%Cn?fGoU zVc>fA=}yvsuAsE3*e8=uCh9EeT!@hAIi)9Ec_mf*bvsqOcx$7dp4$-D{G@wqV(tZX z)*sU=g6z2_WLLmDW^?e(rce3Gg=sTd=@l9R!`rE>1{$44#}B-Yk6Km3YUD7qX?UA| zzK*2EjRZZOY?)9SV+_Oj4%5`s5XDiuD9olvpF~;BD1t^@P;mMdp~BWfsJx4=U(ea^ zV|o+cB6f1arERCf18kr9|S#olv44eeUjSb&~_9QyXKk#rpxNzR_wTCL4C zBVW0kLt+j{#kUgI>OH}7pTdsl9lgxeaIWOJ?r@a3G?#CuHRjo&Uh8;`RRI&2f&0kr zV?}RTmBtO^)O=&N_@yq6Eglq+Qf;|t6|{X@eD0a zdDnIKM2xzb1eiwHiO7fx`9!xfDVbPLPbD#bNs``OhN7wayF5M(-`qyDy5!>F9i(Ym zzxmK*9($kh3LLA)My_mf%ht|Fs>Nv4^cr`Dr#+7>gYI7sN;K|i-ewzH7ijRs%~jWE z@005v%wtr~Z0&hCenrHvu;;*cQQpr9+NhL0-tVN6cnnN4IXx*}Mua9=6tqMYg8 zv$|!b#uZwg54Lp3)EJ**E;UU2I_|N-efJ<&#8MZA-bk-9?lLvMfC~N3v+_nhh)Ok+QU4 z-W&dw#&x|sMeAh_=of0wZE=tdd}4N_AYH9xZ`G&1%tPGq*sU+p5i_5dxWncj4Koo& z)0v#Yd1rYY>n4vTNX23WtXMi&p#ZY@BZVvS#yhEF;dwL9pOcS%9Di+vOb)uSG0sBb zJA>QwVE^5(dBj0WitHEPGuI<*oyw6NZ(r>AK-iDIT*K?NlY{X2`MH{SjvA4nsh}P4 zpBe2jWtlcYe!cT)l--|HJ2D1AH23w(J`w>IH zflc@yn^A>Saheg$-d2uCuG>pexm~f}VeX=Eor)3~t-pSi`W(fSxOs=SL|feaW3rpx ztK_*$-qV$tZ`bCWgZx_exAHk9Pv7F+!Y@nS+Uu4ZHobq{KEB)Ud9XYWMfDoFsiZiu zytu-!zE6Tfd*#RGHwlQ)yi9`h6Ruw}Z@5h@VcIDiIx7ddT6T#UZj_37c z866Y)R4Xo1pY=pnn^}~<_FRLoJQ-l_$77o>&Cw^R>TeXEG4* zR>}*$Y2{pR&ibCeL$t>_vVDVMe&m-|L)~|9yAN&>Yam60O{!eR+m3GH)^GTtcbDl+ z?fb8JE#Ai#R{6TSRjwfT-_8C{1NT<~jlZ*AQoLnfB5aOM@!zHe7`{G@r7QcO&NuS1vmkm1htmi_e!g|kt-c3k63N`KomaxA^-4CSJ(O~7 z@w(RREp358$md3%{AR9W%{fiDj|o2WG8|)V9FVs)bG}D1C4K|X{(3njC4MI!w#_F> zMUqsD=MRr}d_L!qpB=wnT@2Th{nV|xc_eUQRg$so)<5NkfxY9h-6#JS;={+>SyzW* zVO%h{!=eyjGMkgD`rv!5tk&TPEXzdD4c{ySp4s(>Lw=l}d7xlY+F~H!K2UP|@s^6P z6!ApKvM!J@lAuok#z}KdHA0T7?rVSg$EPJV3>RHx=i-4Tp&l^ z)^wZM^*gG&E(!PG71lA~-mAu8N5eeM10 z%a1)ZIzJa}mzdFgd>l)aeCK}mO;5{<_#aPVnDpZc+(kb=E2Q+wIaHe|YCE|YQS&@b z?KYY-;eA-qP{Ypk$xB;P%J1}}w|g7zvw0?a@dxhux<>f&@K${ei~hlDMpOC9{ate+ z)_pXQ6=V-btIK4M!J_|L4e-Xq1SV1Twu2F>sNEX})oQO^Eh9Ysa;!2T)hPbGXzN2B zq13=saq%M8=0R&0$n}|-K~wE)DJM_v+%sXZ#8YgJ$4~qA=Dnn($8J~%Nb0m?o+5lc zX=Ts#xZa?555Jq-;2LL-^Nqw-O0*qMag2ZdRWr+-s0{XST3JIPCC>P=Mj1-s$T!rE1%63}K={$5k3cjsS+ z@2v@-3E$kt?Wd8ZF2^IqB<3qZ12XO5|TE2&p}# z@qzMUJggqNu1SLK2XRKyCaw@p^C$|P$L?^HcaE*oMz1|TM!TZIyp{N^9ue-hnLJ^k zD;bq57W)<(E0r#N=wcwh%w!9}MlwO=74)1$ifYZin0Rl8_q{}fqH8yk40pvd7al`} zwkkbRv_K-}t?-oqu_JlPEteHXT@3H%iKq5IG#*U-Ea+RlcfiFcshK9+{`q|A{V*b5 z<=o3C0<&Sv!05yrkB2mpR3&76;ix}%((uNSjoc}2#{{0bEPP@9al%?`1qs3jo@Elm z67hc_L6SbDNsVQ2gxB`cgZJk;50Z8dSAX;I)FkCdS4W}mqK@2)uXwF*$GtzIwcNhI zM)}HNIUDQLgOOFIVkA_{hEm>%mf6wdiWP)*PP1VyNNZi|$nDPftdShS9B=eKgRTAu z@yAPK@SVP*b+?|YVAPAYyphtlOEDEl<5pkqIC7frT9(O0tNN#=@5bjaYxem>XR|pA z&ajrQ(eT!7T>VyUmDWU}d47DX+ZLW$zF{{fL5Gp<8w>>k=32>zCYmF2?q7?p)@oEW zHvGCR*+ACfF2zh>?|fo(&tcjc=^Wg2;&j*Uk}fvOsDs?I#ChG%BfVat#}z5P(^0QQ zuuT~5`wsduXRtezfJ2@ekUdb%%d7l_gW{wW0d^ zDvko3;>Jdd>V+7opiG&fO=;CS*gK9~>wD)KS{OHdr&e>}u6l}!>7*5N(#ub! zhN;(Js)^X!z*Fxvb)h%o1{NzV8ahyUeBZcQK*{ZozGWA8U`I2(S6EZ{)Vgd?ax$S)lAhKS?IgR5kX{PElfC*eAbeU6CExhqw@K*sGt1z%||o) ztE_?&TKgByj)<9=ekNU$bJDPj+}xS5{=G_uC%08`%?F~)pE+PzMRdbr$V z&$VOjtgnMum=?^{SrLc<{-%r3-mVGcWtaJ&m&!&Y`sM`TUXR(n26=3UN1CUI&t z&#AJlLu)vFC65hsnV(O7c);Vd-fpR(EbfB~9By0VuN~}mzA(q;{7qbW1u9pFda<~_ z@D|!&?`ol025ZfHLv){~#D6T!g&nocIfF+X&sZJ20^7{4xZEqMkPzR}muP%MOf&Dw zJdV0W?8;|7)-?f1am}9kc`*~Gukl_S`0%oLM(0XDpY^AA-Ps+PrXBZMh%H3o$p z4)t*KzYnt2t(;2i5EX1&FbR<%4^t5m>NZ^mCe}aY6eP}I6e z2^*o?-A`5}AF&(Njyd^#yPBz$+I-8SfICmnt-8MaZ`Q`v_$oK0`syp(U9EPq=EcUK z_Y#laAomnRroCtNuXI6H*QXD>8PPbyav*;dhrLTf{`Je(k|)QMLucKzsXEa;rxX-L z6RaN)Lti|&By9cCR=)U!w|H^Io~Q3bo}WkB&W>-;p9pVUVRcpr)6su(Cee;>-oFOK zQB%3AB~ZbLPkGHBImdq#9-n!r9<)(|-O0GV$ac?uM_NN%xh!_wv7G|%?taBMS3k0Z zBu5$9Pe)zv&iWeAB#=Av>XB2y}v)GklYRrFo5iF+M1Z7f$W8gl{55ia1we;}yc1~157pe%=tJ!_9E3iw1mQ{ctU#yLZe1QPn1avubIkca&w*^BT(?%ubBLUEwWy^ zCz6g-GyNDFp}fAM+b4EAdRXbVv6f$`a#dp;G9wOLSJ@$gP@G+X*A)VG z3|is8c~vo~h+zV^33d^iEbD?MbKLk(>0eox(fu+j*3GX?lE$YdNFn_bC9KSzC>~C3 zA+3!(QzS9hh4^qJ>J9JQ@T24sOXb&|I6&E_2*&f5=QSip_SXN$iD*%Z`t3zh#Q~bcOVBiZd~NBJaiVafa0z zn_O2QZKV(v`xhasp-HPZSiNsm2t2B8RIo~z`IPdF@5eOnu_mOr>%YjDPP9qBN1hWW z`m|QQ);wX9L@J!ahZK}z=DZ6SH48?u6El8lwzD7vcEwgCdKn+>`2a`aI4FK z?_WNCC>1iMg1O^bQbR;tSGms-Z*=Q!;oFBwNn04BD&s$DWFy9fdn7XBwhx{qT`-b; zy)otD=%K^0t5lkv#0+&ew{3{lxhZ?CdtZ_QCyK|cJ8A#*(;t6uO2V_U^GVg5WQNhzb_0qpal1leSJgk=7X9h#+T3}2`4!~0Lg0!f zp#EFywd0B0jA#}nznV}$yMh_rER(fy3Pr@Wx`?NX_h5+XH(6kOGwX4J(}uk`>h|fXvO%(%twu_ zHJ>+rYn%AqFsv{E{dJ>xwNhBL-e-I5A#3#H4=q%&z$~ke_SQAwQN=m^w>uqy+d>`MZ_$J|-(hXp}J21>bEMS@<&e)e1UTDw&!3U@NM&K5jgPpVqY8&QG1@ArJ$ zLkpc!{s4mRK3gxJ*zcCRx*{mHIw!^BFXo6TU&?B2-->to&FslxnJRYE@9H8Jq}L={xzo<^RA+^E z-Ze5dy1fTGE=uHM&2h5cbH{@>)robGd#{L)S{Ew_4OL=pJy>-% zjfZgsYE}vb!9~}9-YDZiD7XfMf}K*g)Uw|j-~X7Kd+Ihg#_`nf8K4|qN+GQt=-=*< z7|d>XWg{{tQLOPKZZfT%)HKIm!rLiZxU+M8xh#Uolt;xf70D;o(>XJ$c+Gd$#gIKL z<-D7#!}L~#?fc9uoQ;J{M%3CwL!(iKrh83#m+bVuTuME=ODiE|{7A9J%<;MeW!0VN*5C<3ly~Nuts}zO677w= zibc(*Q2tASe$lDmu|1nWdD(e$Wa&Rd?8JS z-PwKX)u7m@x~}w+Y{$FJ!q%TYa+;4FKC!|=tPu6#|6;RZ34}eURT_5s;%l6t!J!tC zXj6P!OAk|f`|D8FH@;RI!*;*+6;Sgyn<-epUVvNmEu3S8`y<>6Vc6e90$4(+2`adO zR};)E^oEi2Ctu)L@yD4Gjr|)J8mG^}1a8>p&S%EfHH(bw$BaezEldVqpzt`WM3{$E zgl4G7c`{z$6A=|C`%s>f9II`mY92(g;B0+%BJXaS=+GsZ_n~^y$3;y}o!xX=mP{!R z9we;0aU;nrJGSW5WmMd3sTZH{-b@=Y|AZZ3jnc@Wmz6>-*}YXyGEdz;mc@W(U4few zLMAK_-d}7NA_X|z@$ZNuP%ve1svpulJzu*nr=OQ`KaG^AWNjYMb|S+3<^=6aY0?0< z{Hp`xh(^}d>)ey1sd02u^8I&3t~N)LJ?i2D!_RN;m2I|ML)tv7FnMw=}?KX!%bz*k33@M#*t$Z z?lR{O5RYf3npy;wYo1xxfo>N4$dTS4z`EQ@W{wvn4fYiwe7iPyCd@J97>tIDEfjvZdAqMqL})Vj?h1>uLa>Ix|HZLZ)>Mzm zsLoQ=xqT+w_3BgSlDMw_0a1>DN}$UR&Wc7-ab>aBUU zjS@T?3?4a(yK(GD#mJTVsmMbkI+iJp@f3?qSngO{gsx~r?zyb{OzPax1v)VVD(|;! zWE}1I?wD)n2|royy`6>%o?R1`dDE{Fh3)psNp3*q3C?^XFm5pQ$eUKvt@}>l{N#7z z%+o;qk^B4)Umogcovt@`Xgb$NQ6oHh@w7Vf<+td%3Q;9m{x9s1 zVZ0uPCOH4hov+_;EgV}nqFkF>={{APugUBmGXDzlRaWlWzeSGbG8!Gb{hZ*-x)R9w zMYqC2>n+trwEA$StYu0-bALOxUp)rBx=g3FUpcdmv)Pt~+a*Qhb{!;U7x%^Dqt%(2 z&T^&UxXM!3y(*b?Q4=gpMGSj_zgISg=+}R-fA}gzTEdy<#B|78F%m&3gX^aG1U2_$ z$?&=DzI-$D-J0(v*W46We!2qND+GlY^k3X&;!TMh;Mg}Y$M-{ROEfajICERakJ^st zZVTZ%w#Q2oMN_9qXRe99Hd75sl{;TK)YrZbHlb{htQwi0P#5JI8Ft6x>@9{g zWd_Z@?rWx+8-%-hvdy*?4Kb;nET?b|JKqdRDH9!uf}FMq$f$SZX!G!UcS>gAYrz5N zNy_AKi&^&F+#2@)!`*Xt zecnFCYNhWeqgAVT_P4EexwtE_Sve>Rg-sfoHZ{|qxgN-89kEZGFNCktD298T@3?7d_!eg|^e$G@6Uz!gU zLN8_0nE5-==-E0j4&Wq=9KAu#i^lS)7sqQX=DEnCQ5ZBNivy>0v^=*x$}fxxd^eqN4#?hrDFO!a|~J`_MU?Eq-e+^J;Hb_HoV;IBsj zX!`+*kbdLhIRXsfFu$iv{WSkJ5CO>Q|DYiLw{u`Y z?1TgQh6CqH1*`%@z!DHdJPNET3c`R4ERd2#FL*#F{2uO)C7>5;tUTQR|5p${-(x{v zxWIG#EO_v3|%NciGypp{=k@U@B<1K5llAB8eD@yUl$nNVnN^mi}aDO ze1A0nfs0dM0LSnfm?}W|Pc`_tTt90-Ex3F6Z3Z0J^nh(T`LG`Ri&U5=x-tQUf=B%` z3rrLWg`mG%nt(_kLO%%qSZUDiM^V4e7_(Deb%;E_ri=az z=74qMXMs53^%*04~(x+CZ{-2Sc5*Lv|i+~=PH z>jk{3aQ!QD>i5eK4d5t%B_YA)76_5v+6kfI6BvLQLG(lq&@u-}lZ!A%2m?p{0OkUL zMFuTkx*^Px*IKk*VA1J4=tdqxcPC4BAG3tb4ZAqcxrE{uUB9jPFW_&NFTa2=(?2O(^n;5z z!bp7&7ueAQg@&a<&ztoJev3}zQtBS=H#A61koyXUGuuGi;p^o?^YU*5MIIXZg+EK4(hp7iNGd?;FQ{_!>~ zMGOjqLt#)jG#-ybm<)NgVLq>^0`C=i|?fWcb&0DF%I>f;Li1A{{!_ybXv zU}!WJR_0|eG_0P>VZdiBhhYdnp3C}Sz@_W=!b*zg_iZhVgIBBrvPt< zf6s?U{mBO&4eamoez-qnfS3Q1X1oH31(uB^pg}CN9ESUIEI|Rbz3}HBeMS+8Ahuox zlZPGcau^QyxaBZB$njealmA1XQ3`0{A9xk;uq%N-zi3gACoG>2>^Bf}{L_y{b@cEe zQ|bS^VCE6Dc)TF__`rsTZk_cguE0D4Y``c1E9OUYq|)eH9gW80FbD|=ZDSq8{{w?D BVrc*X literal 0 HcmV?d00001 diff --git a/thesis/images/plot-brute-cpu-throughput.pdf b/thesis/images/plot-brute-cpu-throughput.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b5708057bd1d1ba56a0c0118bfcc7082ae4c3ef4 GIT binary patch literal 12636 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 V@T1YUIvPzt6A%&-I>x$){|BjdlH>pY literal 0 HcmV?d00001 diff --git a/thesis/images/plot-mtsubmit.pdf b/thesis/images/plot-mtsubmit.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a18e9fc034c8a4fe8621a60b5ab47c6354201777 GIT binary patch literal 12572 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 literal 0 HcmV?d00001 diff --git a/thesis/images/plot-smart-throughput.pdf b/thesis/images/plot-smart-throughput.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b984c147e2896b7f48ee7122823974bb1b4c722a GIT binary patch literal 12636 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 Umqy>}Xfy#$KuAbv@76*5KSLpzO8@`> literal 0 HcmV?d00001 diff --git a/thesis/images/plot-submitmethod.pdf b/thesis/images/plot-submitmethod.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2b0a8b8cb9061b113fcd7fd5dabe4d7e681772cc GIT binary patch literal 14739 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 literal 0 HcmV?d00001