When it comes to testing convolution in contrast to I/O, the size of the filter has a major effect on performance. This is because the larger the filter, the more computation there is to do per pixel. Therefore it is not only interesting to increase the problem size, but also increase the size of the filter and compare on both levels. The filter sizes the majority of tests explore are 5, 9 and 13. One can clearly see the effects of using a bigger filter and the increase in computation time. 


Two important factors for analysis that must be calculated from the results are speedup and computation percentage. When calculating speedup the total execution time of a serial implementation is devied by other parallel implementations. To calculate how large percentage of the time used in the execution is calculated by subtracting the I/O time from the total time and then dividing by the total time. This way one gets the percentage of time used to perform computation. The computation time is important because it is an indication of how much one can gain from parallelizing code. See Tables \ref{bigtable1} and \ref{bigtable2} for results for different platforms and data sets.

\begin{equation}
Speedup = \frac{execution \: time\: of\: serial\: algorithm}{execution\: time\: of\: parallel\: algorithm}
\label{speedupformula}
\end{equation}

\begin{equation}
Computation\: percentage = \frac{(total\: exec\: time - I/O\: time)}{total\: exec\: time}
\label{comppercentage}
\end{equation}

Because of the limit of 10 hour maximum execution time there are no tests for larger sizes than a 32 GB seismic block on the CPU. While on the GPU and multi GPU one is able to compute much larger seismic blocks, but only blocks up to 32 GB were tested for comparison reasons with the CPU. All data is blocked into 5 blocks to have a constant effect of I/O time on all implementations. This way one can focus on the effects of memory and cache usage. As one can see from the results in Tables \ref{bigtable1} and \ref{bigtable2}, convolution is computationally heavy and I/O is actually a minimal part. With large data sets and large filters on the single-core CPU almost 99\% of all time used on computation. Therefore optimizing what occurs during computation is more important that the 1\% time of I/O. 

\begin{figure}[H]
	\centering
	\includegraphics[width=15cm]{report/results/executiontimeall.PNG}
	\caption{Graph illustrating execution time on different platforms for various data cubes}
	\label{executiontimeall}
\end{figure}

\begin{figure}[H]
	\centering
	\includegraphics[width=10cm]{report/results/speedup.PNG}
	\caption{Graph illustrating speedup different platforms for various data cubes, values from Table \ref{bigtable1}}
	\label{speedup}
\end{figure}

In figures \ref{speedup} and \ref{comptime}, The values of Tables \ref{bigtable1} and \ref{bigtable2} are presented such that it is easier to see behavioural patterns. The results that are of main interest here are that most results are somewhat constant in both computation time and speedup for all platforms except the Tesla 1070. This comes from a distinct relation between transfer of data contra calculations, which will be discussed later. For larger data sets even the Tesla 1070 starts to converge  and get a stable constant value like all other platforms. 

\begin{figure}[H]
	\centering
	\includegraphics[width=10cm]{report/results/comptime.PNG}
	\caption{Graph illustrating computation percentage on different platforms for various data cubes, values from Table \ref{bigtable2}}
	\label{comptime}
\end{figure}


\begin{table}[H]
\caption{Table of speedup for filter of size 13x13x13 given cube size}
\begin{tabular}{|c|p{2.3cm}|c|p{2.3cm}|p{2.3cm}|}
\hline
	& \textbf{Quad-Core AMD}& \textbf{Tesla C 1060} &\multicolumn{2}{|c|}{\textbf{Tesla S 1070}} \\				
\hline
Dimensions				& Speedup		&Speedup			&Speedup (CPU)	&Speedup (GPU)\\
\hline
400x400x400				&3.1				&15.8					&30.6					&1.9\\
\hline
500x500x500				&3.2				&15.4					&38.0					&2.5\\
\hline
600x600x600				&3.2				&15.2					&43.4					&2.9\\
\hline
700x700x700				&3.2				&15.6					&48.5					&3.1\\
\hline
800x800x800				&3.5				&15.9					&52.9					&3.3\\
\hline
900x900x900				&3.6				&16.4					&56.5					&3.5\\
\hline
1000x1000x1000		&3.6				&16.6					&60.8					&3.7\\
\hline
2000x2000x2000		&3.6				&16.9					&62.7					&3.7\\
\hline
\end{tabular}
\label{bigtable1}
\end{table}

\begin{table}[H]
\caption{Table of computation \% for filter of size 13x13x13 given cube size}
\begin{tabular}{|c|p{2.4cm}|p{2.3cm}|c|c|}
\hline
Dimensions		&	\textbf{Single-Core AMD} & \textbf{Quad-Core AMD}& \textbf{Tesla C 1060} &\textbf{Tesla S 1070} \\
\hline
400x400x400				&98			&93			&70			&41			\\
\hline
500x500x500				&98			&94			&71			&31			\\
\hline
600x600x600				&98			&94			&73			&23			\\
\hline
700x700x700				&98			&95			&74			&20			\\
\hline
800x800x800				&99			&95			&75			&18			\\
\hline
900x900x900				&99			&94			&74			&11			\\
\hline
1000x1000x1000		&99			&95			&75			&10			\\
\hline
2000x2000x2000		&99			&95			&75			&10			\\
\hline
\end{tabular}
\label{bigtable2}
\end{table}