CMSC 714 – High Performance Computing
Fall 2008 - Programming Assignment #2
Due Friday, October 17, 2008 @ 5:00 PM
The purpose of this programming assignment is to gain experience in writing openMP programs. You will start with a working serial program (quake.fc) and add openMP directives to create a parallel program.
HINTS
The goal is be systematic in figuring out how to parallelize this program. You should start by using the gprof command to figure out what parts of the program take the most time. From there you should exam the loops in the most important subroutines and figure out how to add openMP directives.
The programs will be run on a Sparc SMP (called tau.umiacs.umd.edu). Your account names will be the same as on the Linux cluster.
WHAT TO TURN IN
You should submit
your program and the times to run it on the input file quake.in (for 1, 2, 4, 8
and 16 threads). Since quake runs for a while on this input dataset for
small numbers of threads, for your testing another input file that runs for
much less time is in quake.in.short . So that you don't have to make
copies of the somewhat large input data files, they are available on tau in ~hollings/public/cs714/data
. A copy of the serial quake.c is also available
in ~hollings/public/cs714/src
.
You also must submit a short report about the results (1-2 pages) that explains:
Using openMP
To
compile openMP you use the Sun C compiler
( at /opt/SUNWhpc/bin/mpcc
on tau) and supply the additional command line
argument -xopenmp=parallel . The
easiest way to get at the compiler is to set your path to (see ~hollings/public/714/path)
:
/usr/dt/bin:/opt/SUNWspro/bin:/opt/SUNWut/bin:/usr/bin:/usr/local/bin:/usr/openwin/bin:/usr/ccs/bin:/opt/SUNWhpc/bin
mpcc is a wrapper for cc, so you will also want to look at the cc man page. Since quake uses the math library, you will also have to link with -lm (be sure to put the -lm at the end of the compile command). The man pages for the Sun compilers are in /opt/SUNWhpc/man and /opt/SUNWspro/man , so you can add those to your MANPATH to easily see more details about compiler switches.
The environment variable OMP_NUM_THREADS sets the number of threads (and presumably processors) that will run the program. Set the value of this environment variable in the shell window you are about to run the program from.
RUNNING THE PROGRAM
Quake reads its input file from standard input, and produce its output on standard output. Quake generates an output message periodically (every 30 of its simulation time steps), so you should be able to tell if it is making progress.
GRADING
The project will be graded as follows:
Item |
Pct |
Correctly runs on 1 processor |
15 % |
Correctly runs on 8 processors |
40% |
Performance on 1 processor |
15% |
Speedup of parallel version |
20% |
Writeup |
10% |