Very low communication overhead is achieved in part by the initialization phase. A single integer can be sent to the solvers and used to look up a particular row and column for a matrix element. Also during the initialization phase, the gamma is read in by the main and sent to each solver. The look up table is generated for an upper diagonal matrix with the main diagonal appearing at the top of the table, the next diagonal following the main diagonal, and so on until the table is full. This scheme effects load balancing by minimizing the wait time for computing a particular element.
Fault tolerance is always a concern when dealing with parallel code.
Though PVM has mechanisms to sense when a solver is no longer available, and to dynamically reconfigure the virtual machine, much work must be done on the programmer's part to insure that completed work is preserved up until the point of a failure. During one of the runs, one of the machines was rebooted causing the results for two matrix elements to be lost. The main program deals with these errors by logging all results to a checkpoint file and by continuing to administer work to the available solvers. Once all of the work is given out, the main waits up to 15 minutes for the solvers to complete. When a solver returns a result, the main resets the timer and waits again for 15 minutes.