In this assignment, you will implement a parallel algorithm that calculates matrix-vector product using MPI processes, MKL BLAS routines and compare the results of two different approach.
1. Construct a Hilbert Matrix of 20.000x20.000
Hilbert Matrix is a positive definite symmetric matrix which has the formula:
2. Construct a vector of length 20.000 with the rule Vector[i]=i, where 1≤i≤20.000
3. Implement two parallel programs calculating the matrix-vector product splitting the matrix in one dimension. One of the programs should divide the matrix vertically, and the other one horizontally. You should print the Euclidean norm(2norm)of the result and the time consumed.
For norm calculation you can use cblas_dnrm2() , and for time calculation MPI_Wtime () The output should have the following format:
4. Calculate the time consumed for 1,2,4,8,16,32 processes. Plot a Time vs. Number of Processors graph. Plot a Speed Improvement vs. Number of Processors graph. Comment on how the time and efficiency changes. What is the cause of this increase or decrease?
5. Compare the results of two implementations. What is the cause of the difference? What are the advantages and disadvantages of two approaches?