Parallel Root Finding

To illustrate the need for dynamic load balancing, we discussed another application in class today. Consider a polynomial in one variable of degree n, given by its n+1 complex coefficients. Imagine n to be huge, so huge that we are already happy if we can compute some, and perhaps all of its roots. The algorithm we consider applies Newton's method repeatedly, using complex random numbers as starting values. Our simple implementation uses complex numbers defined by dcmplx.h and dcmplx.c.

The obvious way to create a parallel version of this method uses centralized load balancing, implemented via a synchronous iteration. For p processors, the manager generates the random numbers and distributes them among the p-1 workers, as done in this message passing program. Notice the awkwardness of having only one loop distributing the work, which prevents the actual parallel execution. But anyway, the idea is clear. For large degrees, the computation cost (linear in n) will dominate the constant communication cost (linear in p).

We motivated the need for dynamic load balancing, e.g.: for multiple roots Newton's method converges only linearly. The lecture ended with a sketch of the application of MPI_Iprobe to distribute the Newton iterations. Another extension of the parallel algorithm involves the termination problem: the algorithm should also terminate when all roots have been found.

Bibliography