While benchmarking it is worth noting that not only the algorithm has been modified to run more efficiently, but also the platforms it runs on have changed. The systems used for testing have in common are the use of a 64 bit system, which enables the addressing of more than 4 GB of memory. All implementations except the one where 4 GPUs are used have been on the same system. The reason for this is the fact that the Tesla s1070 is a rack solution that has been put together on a machine that can only be accessed remotely. 

\begin{table}[H]
	\centering
\caption{Table showing the system components used}
\begin{tabular}{|c|c|}
\hline
\textbf{CPU}  &Phenom X4 2.81GHz \\
\hline
\textbf{RAM}  &8 GB DDR2 memory \\
\hline
\textbf{Disk} &Samsung 500 GB 7200 rpm Disk \\
\hline
\textbf{GPU1} &NVIDIA Geforce 9800 GTX \\
\hline
\textbf{GPU2} &NVIDIA Tesla c1060 \\
\hline
\end{tabular}
\end{table}


The main system where the majority of the tests are run on the Windows 7 64-bit operating system. The CPU in this system is a AMD Phenom X4, with 4 cores, three levels of cache where the level 3 cache is 2 MB large and is shared by all the cores. The level 2 cache is 512 KB large and is private for each core. This is one of the high end processors from AMD on the market (until Phenom2 will be released) and it supports the newest SSE instructions SSE4a. The system also has 8 GB of DDR2 memory. The GPU used in this project is a Tesla c1060, which is created for scientific calculations and has no video output. That is why it is combined with a GeForce 9800 GTX. The GeForce card is used for video output only, while the calculations are done on the Tesla card. The Tesla c1060 has 4 GB of global memory and is of the 1.3 generation of NVIDIA cards. The Tesla s1070 system that is used to run on multiple GPUs is basically a combination of 4 Tesla c1060 on a rack solution. Below one can find all relevant tech information on the hardware used.

\begin{table}[H]
	\centering
\caption{Table showing AMD Phenom X4 details \cite{amd}}
\begin{tabular}{|c|c|}
\hline
\textbf{Addressing} & Supports 64 bit \\
\hline
\textbf{L3 cache size} & 2MB(shared between all cores) \\ 
\hline
\textbf{L2 cache size} & 512KB \\ 
\hline
\textbf{L1 cache size} & 128KB \\
\hline
\textbf{Memory bandwidth} & 33.8 GB/sec peak \\
\hline
\textbf{CPU frequency} & 2.8 GHz \\
\hline
\end{tabular}
\end{table}

The machine where the Tesla s1070 is running is operated by a Linux operating system. The machine is an Intel i7 extreme system with 12 GB of DDR3 memory. This is obviously a better system than the AMD, but since there is an interest in developing in C\# from Schlumberger it was not considered compatible in the begining because of the operating system. After the realization of using C\# would only be limiting, a change was made to use C instead, but optimization were already made for running on the AMD processor. The change of platform would require a re-implementation of the CPU code and therefore the AMD, even though being inferior, was used to benchmark the CPU code. The AMD machine is also more available since one does not have to use it remotely and can reboot and tweak with ease. A future development in this project should consider using the i7 extreme and compare it to the GPU results.

\begin{table}[H]
	\centering
\caption{Table showing NVIDIA GPUs details \cite{nvidia_cuda}}
\begin{tabular}{|c|c|c|}
\hline
\textbf{GPU	model}				&	NVIDIA Tesla c1060		&	NVIDIA Tesla s1070 \\
\hline
\textbf{Num. cores }			&	240										&	960 (4 x 240) \\
\hline
\textbf{Core speed} 			&	1.3 GHz								&	1.3 GHz \\
\hline
\textbf{Global memory} 		&	4 GB GDDR3						&	16 GB GDDR3 \\
\hline
\textbf{Memory bandwidth}	&	102 GB/sec peak				&	102 GB/sec peak \\
\hline
\textbf{System I/O }			&	PCIexpress						&	PCIexpress \\
\hline
\end{tabular}
\end{table}

Using the AMD processor also has some positive features such as a profiler that can be integrated into Visual Studio 2008 Proffesional Edition, making it easy to optimize for cache and test the developments of cache misses. The results of the AMD profiler \cite{amd} will be included in the sections regarding results of the convolution implementations.

The use of different operating systems gave some varying results in I/O time. Since it is common that operating systems buffer their disk access and after running a test several times this could result in that the operating system becomes better at retrieving the specific data resulting change in I/O time. If this feature were stable then one could continue to use it, but it is not. That is why it has been turned off such that a stable I/O time can be registered. In the final system it is recommended that it be turned on because it is averagely faster. 