CS735/CS835
Programming Assignment 1
(due Sun Sept 30)


This program concerns the parallel implementation of a linear system solver using threads.

Write a threads program to parallelize the serial program (gaussian.java) 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 70% 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.java.

Experiment with your pgauss.java using 1, 2, 3, 4 and 8 threads on lava.cs.unh.edu. Use systems of both 512 and 768 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. Be sure to time your program at each grading level completed and compare the performance of the different levels.

Place your findings in the "flat" Ascii file named FINAL-REPORT. (Please no files in Postscript, PDF, Microsoft WORD, etc.) Also document in this report the basic design of your parallel program and clearly indicate what level (70%, 85% or 100%) of the assignment you have obtained.

Do ten runs for each data point to try to avoid anomalies. Try to do your timings at "off hours" when lava is not heavily in use. (This may require that you not do your work at the last minute!) In your report provide all the raw data as well as a summary. Be sure to explain how you summarized the data.

Submitting your assignment: To receive full credit for the assignment, you must turn in your files prior to 8am on Monday October 1. Late submissions will be accepted at the penalty of 5 points per day up to one week late. To turn in this assignment, type (on lava.cs.unh.edu)

   ~cs735/bin/submit prog1 FINAL-REPORT pgauss.java

NOTE: You must submit your assignment for grading from lava.cs.unh.edu.

Submissions can be checked using ~cs735/bin/scheck. For example, to check your assignment:

    ~cs735/bin/scheck prog1
The scheck program can only be executed on lava.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.

And: take care with the writing of your report. Use complete sentences, proper punctuation, etc. Use a spell checker. Most importantly, allocate some time for writing your report. Review and revise as necessary. Finally, don't forget to include the required analysis in your report.


Last modified on August 31, 2001.

Comments and questions should be directed to pjh@cs.unh.edu