Welcome to Jack's JavaQuest 97 Submission

Gestalt is a way of using Java to distribute parallelizable computations over a large number of processors. By 'parallelizable' computations, I mean those that can be split up into smaller, independently calculatable subtasks. A good example of this would be a program that draws a Mandelbrot fractal. Any area over which you would like to evaluate the divergence of a function can be divided up into a set of subareas, and each subarea can be calculated on a separate processor. The same goes for ray tracing.

An example of a calculation that is not parallelizable under my definition of the word is a gravity simulation. Say a simulation is made up of a number of planets, and each planet has a three dimensional position and mass associated with it. The motion of the planets can be simulated by calculating the accelerations of each planet due to the gravitational forces affecting it. From the initial positions of the planets we can calculate the instantaneous acceleration of each, and over a small time differential approximate where the position each will move to. However, each time we step the time differential, the instantaneous acceleration of each of the planets depends upon the positions of ALL the planets. Thus, this computation is not one that can be split into independent subtasks.

Donations of CPU time can be made to the network by running a short Java program, called the "slave". This program can be embedded in a web page, such that when someone cruising the web with a JDK 1.1 enabled web browser happens upon it, they automatically begin donating computation cycles to the network. Unfortunately, I have been unsuccessful at finding a version of Netscape that correctly supports JDK 1.1. Two that I tried came very close, but ObjectStreams were missing from one, and the other had a bug that caused an Applet Security exception to be thrown when the slave tried to open a socket back to the host it was downloaded from (this should not cause an exception to be thrown). I'm sure they will have a working version soon, but in the meantime you'll have to use either appletviewer (from JDK 1.1) or the HotJava (JDK 1.1) web browser to view the page below. In any case, before the slave applet will be able to do anything, you'll need to set up a Gestalt server on the same machine as your web server is running on. If you keep reading, I'll explain just how to do that!

The donation page (viewable by appletviewer or hotjava)

Here's an index of my documentation:

The story of why I wrote this program

My goal in writing this software

How to use Gestalt

How to write a client that uses the server

Suggestions for designing a network

Things I will add in the near future

Documentation generated by javadoc

Last Modified: 7/24/97 by jack@cs.hmc.edu