Project Guidelines

The primary goals of our final project are to get some experience with parallel computation in the context of an intellectually interesting and challenging experiment. The specification is deliberately vague and you are encouraged to design code that you find useful and experiments whose outcome is interesting and uncertain. The uncertainty is easy: every outcome in parallel computation is less certain than we'd like!

Nonetheless, there are several common elements that I would like all projects to include.

  1. A comparison of two modes of parallel expression, preferably one for distributed memory models (MPI, RPC, etc.) and one for shared memory models (OpenMP, cilk, pthreads, HPF, etc.). The point is to be able to report on your experience of the relative difficulty/ease of writing the algorithm in each mode and the relative performance it achieves.

    An elegant way to do this is to write a code that uses P processes each having T threads. It could be in MPI + cilk-or-OpenMP-or-pthreads to use what is most readily available. Experiments can then include timing of the cases (P = 1, T > 1) and (P > 1, T = 1), with intermediate values also being of interest (P = 8. T = 2) on porsche's nodes, for instance, or (P <= 20, T = 4) on nsfri cluster...

  2. A comparison where the number, p, of processes (and/or threads: p = P*T) varies and a comparision where the size, n, of the problem varies. Plot speedup and efficiency as a function of p with n fixed. Also plot speedup and efficiency as a function of n with p fixed. More elegantly, display a three dimensional plot of speedup as a function of both p and n. (I will give an example how this may be done in Maple. The needed data is time for each of n_1 ... n_k and p_1 .. p_l, for some reasonable set of n's and p's)

  3. (Possibly) a comparison of two different approaches to parallel solutions to a problem, one finer grained, one coarser grained. In any case, if you have started with one idea for your solution and later migrated to another (as is often the case!), include in the writeup an explanation of why you abandoned the former in favor of the latter, i.e. why it seems the better way to go.

  4. Some projects are working on tools in support of parallel computation. These can still produce the comparisons mentioned in the first points above. But it can be done with simpler and/or pre-existing parallel implementations, since the main effort of the project is on the support tool itself.

  5. Due date is Thursday, May 22 (day after last day of classes).