Assignment 4
CS525: Parallel Computing
Due Dec 12, 2014.
-
You are required to write a parallel PageRank
program in MPI. Web graphs of various sizes are available from the
Stanford Network Repository.
Your program must take one of these files as input. For the purposes of
this assignment, one processor reads the file and communicates equal
number of nodes to all other processes. The processes initialize their
pagerank values to the identity vector (normalized) and compute page
rank through iterative multiplication with the matrix (power iterations).
The process continues until the pageranks do not change significantly
(the two-norm of the pagerank vector changes by less than 10^{-5}, say.
The key challenge in this assignment is to write a highly optimized
matrix-vector product. As indicated in the class, you do not want to
broadcast the entire intermediate pagerank vector to all processors. This
is unlikely to give you good performance on larger number of processors.
For this reason, you only want to communicate the necessary elements of
the vector to processors that need them.
To get started on the mc cluster,
here are some instructions.
Grading: Your solutions will be graded by running the program on
the test inputs. You will be graded on two counts -- first, your serial
runtime should not be very high (i.e., you must have a meaningfully
efficient serial sparse matrix-vector product). Second, you should get
reasonable parallel speedup. The grading scale is as follows:
30% points for programs that execute correctly. 70% of the points for
performance. All programs will be run on the mc (mc01-18) cluster in the
department (this is the cluster you should use to benchmark your programs
as well) on up to 16 cores. If you get a speedup of more than 12, you will
get all 70%. If you get a speedup of between 8 and 12, you get 50%,
4 and 8, you get 30%, 1 - 4, you get 15%. No points for speedup of under
1 (!). These speedups are for the largest problem instance in the Stanford
web respository that your program can execute on.
-
Repeat the previous problem using pthreads.
Grading: Your solutions will be graded by running the program on
the test inputs. You will be graded on two counts -- first, your serial
runtime should not be very high (i.e., you must have a meaningfully
efficient serial implementation). Second, you should get
reasonable parallel speedup. The grading scale is as follows:
30% points for programs that execute correctly. 70% of the points for
performance. All programs will be run on the mc machines in the
Department (this is the cluster you should use to benchmark your programs
as well) on up to 16 cores. If you get a speedup of more than 12, you will
get all 70%. If you get a speedup of between 8 and 12, you get 50%,
4 and 8, you get 30%, 1 - 4, you get 15%. No points for speedup of under
1 (!). These speedups are for the largest problem instance in the Stanford
web respository that your program can execute on.