Parallel convolution performs n convolutions to an image using MPI and OpenMP for parallelism
The image is partitioned into square blocks and each process is "mapped" to a specific block. At first, each process convolutes only the inner pixels with a given kernel, and then, each process exchanges with its neighbours its outer pixels to perform a convolution to the remaining pixels. This process is repeated n times.
Notes:
- You can find some plots inside the measurements folder
- Filter size = 3*3
- All processes are called workers. Process 0 sends initially the input image to other workers, and in the end, the same process prints some statistics.
- In plots, the pre and post-processing time are excluded.
- Max neighbours per process = 8
- The input image must be square
- Persistent Communication
- Virtual Topology - Cartesian
- Derived Data Types - Vector, Struct, Contiguous
- Non-Blocking Communication
- Dynamic Receiving - MPI_Status, MPI_Waitany, use of MPI_PROC_NULL
- Static Scheduling with OpenMP
- MPI-3
- OpenMP
$ cd parallel-convolution/convolution
$ make
$ mpiexec -n 4 ./convolution
- Introduce parallel I/O to read a real input image
- http://matlabtricks.com/post-5/3x3-convolution-kernels-with-online-demo
- http://setosa.io/ev/image-kernels/
- https://lodev.org/cgtutor/filtering.html
- https://www.openmp.org/
- https://www.mpich.org/static/downloads/3.2.1/mpich-3.2.1-userguide.pdf
- Petropoulakis Panagiotis petropoulakispanagiotis@gmail.com
- Andreas Charalambous and.charalampous@gmail.com