Parallalelization of Convolution Algorithm

Parallelization using CUDA, MPI, PThreads

Project GitHub repository

This project was completed as the final project for the Parallel Computing (COMP5055) course at the University of Puerto Rico @ Mayagüez. It consisted of the parallelization of a edge detection convolution algorithm which used the Prewitt operators given below:

\[P_x = \begin{pmatrix} 1 & 0 & -1\\ 1 & 0 & -1\\ 1 & 0 & -1 \end{pmatrix}; \;\;\; P_y = \begin{pmatrix} 1 & 1 & 1\\ 0 & 0 & 0\\ -1 & -1 & -1 \end{pmatrix}\]

The serial algorithm was implemented in C++, and the three paralellized versions were developed using Pthreads, MPI and CUDA. Each of these implementations and their performance were tested on a dataset of satellite images sourced from the Dstl Satellite Imagery Feature Detection Competition hosted on Kaggle.

Left: Example of original satellite image. Right: Output of edge detection convolution algorithm using Prewitt operators.

The report detailing each implementation as well as the performance study can be found here: link.