Slides: Parallel Processing with Fortran

These are slides from my University of Maryland "cluster mini-talk" of April 15, 2014 (click here).


Parallel solver for Matlab: parsolve.m

Parsolve.m is a simple Matlab function for solving nonlinear equation systems using Newton's Method. While the solver is not advanced by any standard, its use of parallel processing provides a considerable speed advantage over fsolve for some applications. This may be the case when (a) the function to be solved takes a long time to evaluate, (b) the function to be solved does not have analytical derivatives, and/or (c) the function to be solved is vector-valued with enough elements to take advantage of parallel processing. Without being provided with derivatives, solvers must evaluate a function multiple times in each iteration to acquire numerical derivatives. Parsolve performs these evaluations in parallel. Hence, the speed advantage is increasing in the number of variables in the function. Too few variables may result in parsolve leaving processors unused: if the equation system has n unknown variables, parsolve provides the most benefit if your machine has at least n+1 workers. As is the case with all parallel processing applications, using parsolve to solve simple equation systems may result in a reduction in speed performance over non-parallel alternatives. Other common drawbacks of parallel processing apply as well.

Note that parsolve will still work on machines without parallel computing capabilities (either for license or hardware reasons). In this case, function evaluations are performed serially. In some applications, parsolve is still faster than fsolve even without parallel processing. For researchers not needing fsolve's many useful options, parsolve may be a sufficient alternative.

Syntax for calling parsolve is x=parsolve(@function,x0,tol,maxcount), where "function" is the function system to be solved, x0 is the initial guess, tol is an optional parameter for solving tolerance, and maxcount is an optional parameter for timing out the solver.