This program concerns the parallel implementation of a linear system solver using threads.
Write a threads program to parallelize the serial program (gaussian.c) found in ~cs735/public/gaussian.
The distributed source code contains a serial solver based upon Gaussian elimination and back substitution. This serial program includes code for initializing a matrix to be solved and for checking the results. The performance of these two steps is not important. You are only responsible for improving the performance of the system solver itself.
To receive 75% of the credit: Provide a parallel implementation of the Gaussian elimination phase.
To receive 85% of the credit: Provide a parallel implementation of both the Gaussian elimination phase and the back substitution phase.
To receive 100% of the credit: Include a load balancing strategy in your parallel linear system solver. In particular, if you use a static allocation of matrix rows to threads, then as rows go inactive according to the pivot selection, threads may not have an equal amount of work to do during the elimination step, due to an uneven distribution of active rows to threads. See if you can find an efficient strategy to distribute the load dynamically and evaluate its impact on the performance of the program.
Place your parallel implementation in the file pgauss.c.
Experiment with your pgauss.c using 1, 2, 3, 4 and 8 threads on agate.cs.unh.edu. Use systems of both 256 and 512 equations for the final experiment. Report on your running times, compute speedup numbers, and analyze any trends that you recognize in the data you collect. Place your findings in the "flat" Ascii file named FINAL-REPORT. Also document in this report the basic design of your parallel program and clearly indicate what level (75%, 85% or 100%) of the assignment you have obtained.
Submitting your assignment: To receive full credit for the assignment, you must turn in your files prior to 8am on Monday September 22. Late submissions will be accepted at the penalty of 5% per day up to one week late. To turn in this assignment, type (on agate.cs.unh.edu)
~cs735/bin/submit prog1 FINAL-REPORT pgauss.c
NOTE: You must submit your assignment for grading from agate.cs.unh.edu. Submissions can be checked using ~cs735/bin/scheck. For example, to check your assignment:
~cs735/bin/scheck prog1The scheck program can only be executed on agate.cs.unh.edu.
Remember: as always you are expected to do your own work on this assignment.
Also: you should adequately document and structure your programs.
Comments and questions should be directed to pjh@cs.unh.edu