Assignment 2.4: Due date: Apr. 17, 2007: Use the above
implementation to output build-sequences in a standard notation (agreed
upon by entire class). Write a program that processes each build sequence
and determines if it is valid with respect to the InterComm graph,
package versions, and constraints; filter out the incorrect sequences;
count the remaining valid sequences; ensure that your count matches the
other counts computed by your classmates. Remember that the dependency
DAG can change -- it is better not to hard-code it in your program. Also
remember to write JUnit tests and JavaDoc for all methods/classes. E-mail
your solution to the TA. SUBJECT of the e-mail should be "CMSC 433 --
Assignment 2.4". (60% of Assignment 2 grade.)
Description
As stated in its
User's Manual, "InterComm is a framework for coupling distributed
memory parallel components that enables efficient communication in
the presence of complex data distributions. In many modern scientific
applications, such as physical simuations that model phenomena at multiple
scales and resolutions, multiple parallel and/or sequential components
need to cooperate to solve a complex problem. These components often
use different languages and different libraries to parallelize their
data. InterComm provides abstractions that work across these differences
to provide an easy, efficient, and flexible means to move data directly
from one component's data structure to another.
The two main abstractions InterComm provides are the distribution, which
describes how data is partioned and distributed across multiple tasks
(or processors), and the linearization which provides a mapping from
one set of elements in a distribution to another."
InterComm supports programs written in C, Fortran77, Fortran90, and
C++/P++. InterComm may be compiled on different types of systems, each
with different underlying operating systems, native libraries, compilers,
etc. The final choice of the underlying system configuration
depends on the application domain, availability of resources, and
expertise of the programmers. The hope is that InterComm compiles
correctly on many varieties of systems.
The InterComm build package dependencies may be viewed as a DAG. Each oval
represents a package; directed edges represent dependencies. A rectangle
with "+" represents an OR dependency, e.g., the package AP may be compiled
using either MCH OR LAM. A rectangle with "*" represents an AND
dependency, e.g., the package GF is compiled using GCR AND MPFR AND GMP.
We will limit our scope to the following versions of each package: