%In this chapter, the focus is on testing the different convolution implementations and documenting the results. The method of testing is timing the total execution time. The way in which time is recorded in the implementation is shown in Section \ref{testing}. The complete data collection can be found in Appendix \ref{resulttables} in table form. In this chapter only the essential results are shown and discussed. Results will be represented in both graphs and tables.  

%For some implementations, the time taken to perform convolution for larger sets of data takes several hours. Therefore a limit of one hour has been set such that if an implementation takes longer than 10 hour it times out. This is because each implementation is tested 10 times and the median execution time is noted to assure quality of the sampled data. In other words if an implementation takes 10 hour to execute, then it would take 100 hours to completely test. Because of the time constraints on this project one cannot test for several large sets if they are this time consuming, especialy if they are to run on a single core. Yet the results are tests of several sizes that belong to the time range. The execution times are compared between the different implementations for speedup analysis, which proves to be sufficient in showing trends. This can also indicate if the implementations scale and how they scale given the problem size.

Later in this chapter, the focus will be on explaining and discussing the results obtained form the various implementations, exploring the reasons for the speedup obtained on the different platforms. There will also be considerations for possible improvements to gain even more speedup. This will be done by attempting to describe the way in which the algorithms behave and by comparing crucial elements of this behavior. This will involve in depth analysis of memory interaction and the way in which the executions are pipelined and performed. An analysis of the convolution algorithms on the multiple platforms will be considered. 

The sructure of this chapter is as follows. Sections 4.1 and 4.2 are results and discussion of I/O. Section 4.3 shows the visual results of convolution. Section 4.4 shows the AMD and CUDA profilers results. Sections 4.5 and 4.6 are results and discussion of convolution implementations.