Project: Many to Many Object Invocation for Parallel Development
Student Researchers: Jennifer Ellis, Andrea Solecky
Advisor: Hans Peter Bischof
Institution: Rochester Institute of Technology





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