Goals
This is a two-phase project that implements different algorithms using Message Passing Interface (MPI) and the Many to Many Protocol
(M2MP), which is being developed as part of the Anhinga Project at the Rochester Institute of Technology. The main goal of the project is to
discover the strengths and weaknesses of Many to Many Object Invocation (M2MI) with regard to program elegance, size and efficiency when
pitted against a package that has been widely accepted. The secondary goal of the project is to gain a better understanding of parallel and
distributed development while becoming familiar with two specific software packages.
Process
The first step in this project involved extensive background research. Neither of the students involved in this project have taken any
parallel development courses, so it was necessary to gain understanding of basic parallel concepts. The packages to be used were also explored.
This meant researching M2MP and mpiJava, which was the package chosen to represent MPI. Each researcher was responsible for a different
package.
Next, the two algorithms to be implemented were decided upon. The first phase of the project involved an application in which the
processors were independent of one another. That is, information possessed by one processor was not needed by another. The algorithm
chosen for this task was the Mandelbrot Set. The Mandelbrot Set produces an infinitely complex image calculated by matrix multiplication.
The canvas containing the image is easily broken into separate blocks because no two coordinates depend upon one another for calculation.
Each processor is in charge of the calculations for a specific block. At the end of the program the blocks are returned to one processor for
display to the screen. The second phase of the project involved an application where the processors need to communicate. The algorithm used
for this phase was Conway?s Game of Life. The Game of Life simulates cells living and dying based on the surrounding population. When an
area gets overcrowded or too sparse cells die. Under the proper population conditions a cell may be born. As with the Mandelbrot Set, the
coordinate plane is divided among the processors. However, for this application the processors may need to gather information from each
other. Once again, the separate blocks are returned for display at the end of the program.
Both applications were developed using M2MP and mpiJava. The programs were then executed using different numbers of processors and
compared for performance.
Images will be inserted here
Besides program speed, we can also compare program size. The mpiJava implementation of the Mandelbrot algorithm has 118 lines of
code where the M2MI implementation has 116 lines of code. You can see that there is little difference in the program sizes. But, with the
Game of Life algorithm, there is a large difference in program size; the mpiJava implementation has 283 lines of code and the M2MI version
has 137 lines of code.
Conclusion
As you can see from the above results, with a small image, 10x10 and 100x100, the M2MI version of Mandelbrot is much quicker than the
mpiJava version. But, with a large image, 1000x1000, the mpiJava version is much faster than the M2MI version. For the Game of Life,
mpiJava is quicker for a smaller number of iterations but slower for the larger numbers of iterations than M2MI.
We can also see that with mpiJava, the number of processors actually increased the processing time when each processor was
independent of the others. With the exception of one set of tests, an increased number of processors decreased processing time when the
processors had to share information. The M2MI test results are not as dramatic. Overall, it looks like the number of processors had little effect
on processing time. This is most likely because M2MI divides its work among all the available processors. So, for our testing purposes, we have
created separate objects for each processor to evaluate.
Besides a difference in processing speed between mpiJava and M2MI, there was a huge difference in the learn-ability of each. Even with
the help of examples and a reference book, mpiJava was very difficult to learn and use. We also had some trouble getting mpiJava installed and
running on our test machine. M2MI, on the other hand, was very easy to install and learn. Once we learned the concepts behind how M2MI
worked, the rest was relatively simple.
Publications
Detailed information can be found at our research website:
www.cs.rit.edu/~jle1028/Anhinga