PHAML Software: parallel models

chart showing parallel performance
Computation time for phases of PHAML with 1 to 16 processors and 150,000 vertices per processor. At 16 processors, PHAML get about 50% parallel efficiency.

As a parallel program, PHAML is a message passing program. It does not support shared memory paradigms such as OpenMP. This usually implies a distributed memory parallel computer, such as a cluster of Linux PCs, but it can also be used on shared memory machines if the message passing library supports it.

PHAML uses one of three models of parallelism:

  • Master/Slave -- the user executes one program, the master. The master program spawns the slave processes which perform the actual computations. If graphics are used, addition graphics processes are spawned.
  • SPMD (single program multiple data) -- the user executes all of the programs, usually through some command like mpirun that starts them all. All of the processes run an identical program, but each program takes on the task of being either the master, one of the slaves, or a graphics engine.
  • Sequential -- this is not parallel at all. This is a mode in which PHAML is run on a regular uniprocessor computer (or on one processor of a multiprocessor or multicore computer).

    The parallelism in PHAML is hidden from the user. One conceptualization is that the computational processes are part of a phaml_solution_type object, and hidden like all the other data in the object. In fact, one of the components of this data structure is a structure that contains information about the parallel processes. The user works only with the master process. In the master/slave model, when the master process calls phaml_create to initialize the data structure, the slave processes are spawned. When the master process calls any of the other public subroutines in module phaml, it sends a message to the slaves with a request to perform the desired operation. When phaml_destroy is called from the master process, the slave processes are terminated.

    PHAML was written to be portable not only across different architectures and compilers, but also across different message passing means. All communication between processes is isolated in one module. This module contains the data structures to maintain the information needed about the parallel configuration, and all operations that PHAML uses for communication, such as comm_init, phaml_send, phaml_recv, phaml_alltoall, phaml_global_max, etc. Thus to introduce a new means of message passing, one need only write a new version of this module that adheres to the defined API. PHAML contains versions for PVM, MPI 1 (without spawning), MPI 2 (with spawning), and a dummy version for sequential programs.

    Publications

    Mitchell, W.F., PHAML User's Guide , NISTIR 7374 , 2006. (original, pdf, 3.2M ) (latest revision, pdf)

    Mitchell, W.F., The Design of a Parallel Adaptive Multi-Level Code in Fortran 90, Proceedings of the 2002 International Conference on Computational Science, 2002. ( gzipped postscript, 50k)

    Back to PHAML home page


    Last change to this page: April 3, 2007
    Date this page created: April 2, 2007
    Contact: William Mitchell
    Home Page