NESTED ALGORITHMIC SKELETONS FROM HIGHER ORDER FUNCTIONS

Algorithmic skeletons provide a promising basis for the automatic utilisation of parallelism at sites of higher order function use through static program analysis. However, decisions about whether or not to realise particular higher order function instances as skeletons must be based on information about processing resources available at runtime In principle, nested higher order functions may be realised as nested skeletons. However, where higher order function arguments result from partially applied functions, free-variable bindings must be identified and communicated through the corresponding skeleton hierarchy to where those arguments are actually applied Here, a skeleton based parallelising compiler for Standard ML is presented. Hybrid skeletons, which can change from parallel to serial evaluation at runtime, are considered and mechanisms for their nesting are discussed. The main compilation stages are illustrated for simple examples. A nested higher order function based algorithm for multiplying matrices of arbitrary length integers is presented along with performance figures for compiled code running on a Fujitsu AP3000.

[1]  David B. Skillicorn,et al.  Foundations of parallel programming , 1995 .

[2]  Robin Milner,et al.  Definition of standard ML , 1990 .

[3]  Roopa Rangaswami,et al.  A cost analysis for a higher-order parallel programming model , 1996 .

[4]  John W. Backus,et al.  Can programming be liberated from the von Neumann style?: a functional style and its algebra of programs , 1978, CACM.

[5]  Susanna Pelagatti Structured development of parallel programs , 1997 .

[6]  Tore Andreas Bratvold Skeleton-based parallelisation of functional programs , 1994 .

[7]  John C. Reynolds,et al.  Definitional Interpreters for Higher-Order Programming Languages , 1972, ACM '72.

[8]  Alan Bundy,et al.  The Use of Explicit Plans to Guide Inductive Proofs , 1988, CADE.

[9]  Aleksy Schubert,et al.  The EML Kit Version 1 , 1996 .

[10]  John C. Reynolds Definitional Interpreters for Higher-Order Programming Languages , 1998, High. Order Symb. Comput..

[11]  Hans-Wolfgang Loidl,et al.  Granularity in large-scale parallel functional programming , 1998 .

[12]  Murray Cole,et al.  A Monadic Calculus for Parallel Costing of a Functional Language of Arrays , 1997, Euro-Par.

[13]  Richard S. Bird,et al.  Algebra of programming , 1997, Prentice Hall International series in computer science.

[14]  Hing Wing To,et al.  Optimising the parallel behaviour of combinations of program components , 1995 .

[15]  Murray Cole,et al.  Algorithmic Skeletons: Structured Management of Parallel Computation , 1989 .

[16]  Pierre-Louis Curien,et al.  The Categorical Abstract Machine , 1987, Sci. Comput. Program..

[17]  Yike Guo,et al.  Functional Skeletons for Parallel Coordination , 1995, Euro-Par.

[18]  Mohammad M. Hamdan,et al.  A combinational framework for parallel programming using algorithmic skeletons , 2000 .

[19]  James Hook,et al.  Type-driven defunctionalization , 1997, ICFP '97.

[20]  Moustafa Ghanem,et al.  Structured parallel programming , 1993, Proceedings of Workshop on Programming Models for Massively Parallel Computers.

[21]  Marcin Paprzycki Structured development of parallel programs , 1999, IEEE Concurr..

[22]  Jocelyn Sérot,et al.  Embodying Parallel Functional Skeletons: An Experimental Implementation on Top of MPI , 1997, Euro-Par.

[23]  David B. Skillicorn,et al.  Models and languages for parallel computation , 1998, CSUR.

[24]  Guy E. Blelloch,et al.  A provable time and space efficient implementation of NESL , 1996, ICFP '96.

[25]  Andrew Ireland,et al.  Towards a skeleton based parallelising compiler for SML , 1997 .

[26]  Marco Vanneschi,et al.  A methodology for the development and the support of massively parallel programs , 1992, Future Gener. Comput. Syst..