# HPC - Dot product

Last updated: 2022-11-01

The file mpi-dot.c contains a MPI program that computes the dot product between two arrays a[] and b[] of length $$n$$. The dot product $$s$$ of two arrays a[] and b[] is defined as:

$s = \sum_{i = 0}^{n-1} a[i] \times b[i]$

In the provided program, the master performs the whole computation and is therefore not parallel. The goal of this exercise is to write a parallel version. Assume that, at the beginning of the program, a[] and b[] are known only to the master. Therefore, they must be distributed across the processes. Each process computes the scalar product of the assigned portions of the arrays; the master then uses MPI_Reduce() to sum the partial results and compute $$s$$.

You may initially assume that $$n$$ is an exact multiple of the number of MPI processes $$P$$; then, relax this assumption and modify the program so that it works with any array length $$n$$. The simpler solution is to distribute the arrays using MPI_Scatter() and let the master take care of any excess data. Another possibility is to use MPI_Scatterv() to distribute the input unevenly across the processes.

To compile:

    mpicc -std=c99 -Wall -Wpedantic mpi-dot.c -o mpi-dot -lm

To execute:

    mpirun -n P ./mpi-dot [n]

Example:

    mpirun -n 4 ./mpi-dot 1000