21-765. Introduction
to
Parallel Computing and Scientific Computation
Projects
The course is supposed to offer a hands-on approach to solve
problems
using a computer. The students are expected to produce a polished
piece
of software (referred below as "the project") that solves a certain
problem. The software will be
developed during the semester in the following steps (timeline is
for illustration purpose):
- Clearly establish the problem and discuss it with the
instructor -- (by week 3)
- Isolate a class of algorithms that can be used, identify new
research on them, pick the algorithm of choice -- (by week 5)
- Design a modular implementation of the software -- (by week 7)
- Write the modules in C with documentation and clear interface
specifications -- (permanent after week 7)
- Create and maintain various documents and a web page as the
project evolves -- (permanent)
- Pick
several non-trivial examples to demonstrate the software
(general
principles and particularities) -- (permanent after week
7)
- Do debugging, fine tuning, and polishing of the software and
documentation -- (permanent after week 7)
- Create a parallelized version of the software -- (after week
11) - optional.
Students can work in teams of maximum three at the same project.
Every other week, by Friday at noon, each team is supposed to
issue a new version of the work with a brief journal documenting
the
progress, and a "ToDo" list kept by EVERY member of the team
separately.
Numbering of the versions should be determined by the stage of the
work.
Teams can split and fork the project development during the
semester.
When finished, the project should contain:
- the readable and
properly commented code and makefiles as needed;
- self-consistent
documentation for skilled users (man pages or other type of
docs), the
sysamin (how to compile and install, platforms), and the
developer
(description of the algorithm, how to continue and extend the
work);
- various files containing licensing
terms, history of the development, credits, discussion of
possible
security issues, etc;
- working non-trivial test examples;
- a webpage advertising the software project - optional.
The project can contain one of the following:
- part of the student's research work;
- a (simple) problem proposed by the student.