Benchmarking implementations of functional languages with ‘Pseudoknot’, a float-intensive benchmark

Over 25 implementations of different functional languages are benchmarked using the same program, a floatingpoint intensive application taken from molecular biology. The principal aspects studied are compile time and execution time for the various implementations that were benchmarked. An important consideration is how the program can be modified and tuned to obtain maximal performance on each language implementation. With few exceptions, the compilers take a significant amount of time to compile this program, though most compilers were faster than the then current GNU C compiler (GCC version 2.5.8). Compilers that generate C or Lisp are often slower than those that generate native code directly: the cost of compiling the intermediate form is normally a large fraction of the total compilation time. There is no clear distinction between the runtime performance of eager and lazy implementations when appropriate annotations are used: lazy implementations have clearly come of age when it comes to implementing largely strict applications, such as the Pseudoknot program. The speed of C can be approached by some implemtations, but to achieve this performance, special measures such as strictness annotations are required by non-strict implementations. The benchmark results have to be interpreted with care. Firstly, a benchmark based on a single program cannot cover a wide spectrum of 'typical' applications.j Secondly, the compilers vary in the kind and level of optimisations offered, so the effort required to obtain an optimal version of the program is similarly varied.

[1]  James Mcgraw,et al.  Graph transformation algorithms for array memory optimization in applicative languages , 1987 .

[2]  Reinhard Wilhelm,et al.  Transformation Development: TrafoLa-H Subsystem , 1993, PROSPECTRA Book.

[3]  Xavier Leroy,et al.  Unboxed objects and polymorphic typing , 1992, POPL '92.

[4]  Andrew W. Appel,et al.  Compiling with Continuations , 1991 .

[5]  Philip Wadler,et al.  Deforestation: Transforming Programs to Eliminate Trees , 1990, Theor. Comput. Sci..

[6]  Simon L. Peyton Jones,et al.  Cheap Deforestation in Practice: An Optimizer for Haskell , 1994, IFIP Congress.

[7]  Thomas Johnsson,et al.  The Chalmers Lazy-ML Compiler , 1989, Computer/law journal.

[8]  Dennis M. Ritchie,et al.  The C programming language - ANSI C - Second edition , 1988 .

[9]  Robert A. MacLachlan CMU Common Lisp User''s Manual , 1992 .

[10]  Marc Feeley,et al.  Using Multilisp for solving constraint satisfaction problems: An application to nucleic acid 3D structure determination , 1994, LISP Symb. Comput..

[11]  Joe Armstrong,et al.  Concurrent programming in ERLANG , 1993 .

[12]  Mark P. Jones,et al.  The implementation of the Gofer functional programming system , 1994 .

[13]  Wolfram Schulte,et al.  Generating Efficient Portable Code for a Strict Applicative Language , 1991, Declarative Programming.

[14]  Simon L. Peyton Jones,et al.  Report on the programming language Haskell: a non-strict, purely functional language version 1.2 , 1992, SIGP.

[15]  Simon J. Thompson Laws in Miranda , 1986, LFP '86.

[16]  Marc Feeley,et al.  A parallel virtual machine for efficient scheme compilation , 1990, LISP and Functional Programming.

[17]  Stephen P. Thomas,et al.  The pragmatics of closure reduction , 1993 .

[18]  D. A. Turner,et al.  Miranda: A Non-Strict Functional language with Polymorphic Types , 1985, FPCA.

[19]  Joyce L. Vedral,et al.  Functional Programming Languages and Computer Architecture , 1989, Lecture Notes in Computer Science.

[20]  Wolfgang Grieskamp,et al.  OPAL: Design and Implementation of an Algebraic Programming Language , 1994, Programming Languages and System Architectures.

[21]  Rafael Dueire Lins Categorical multi-combinators , 1987, FPCA.

[22]  Simon L. Peyton Jones,et al.  Unboxed Values as First Class Citizens in a Non-Strict Functional Language , 1991, FPCA.

[23]  Pieter H. Hartel,et al.  Compilation of functional languages using flow graph analysis , 1994, Softw. Pract. Exp..

[24]  K. Gopinath,et al.  Copy elimination in functional languages , 1989, POPL '89.

[25]  Manuel Serrano Bigloo User's Manual , 1994 .

[26]  Robert H. Halstead,et al.  MULTILISP: a language for concurrent symbolic computation , 1985, TOPL.

[27]  Niklas Röjemo,et al.  Highlights from nhc—a space-efficient Haskell compiler , 1995, FPCA '95.

[28]  Marinus J. Plasmeijer,et al.  Generating Efficient Code for Lazy Functional Languages , 1991, FPCA.

[29]  Bogumil Hausman Turbo Erlang: Approaching the Speed of C , 1993, ICLP-Workshops on Implementation of Logic Programming Systems.

[30]  David C. Cann,et al.  Retire Fortran? A debate rekindled , 1991, Proceedings of the 1991 ACM/IEEE Conference on Supercomputing (Supercomputing '91).

[31]  Amer Diwan,et al.  Memory subsystem performance of programs using copying garbage collection , 1994, POPL '94.

[32]  Zhong Shao,et al.  Compiling standard ML for efficient execution on modern machines , 1994 .

[33]  Pieter H. Hartel,et al.  Benchmarking implementations of lazy functional languages , 1993, FPCA '93.

[34]  Philip Wadler,et al.  The Glasgow Haskell Compiler: a technical overview , 1993 .

[35]  Pierre Weis,et al.  1+1=1 : an optimizing Caml compiler , 1993 .

[36]  Xavier Leroy,et al.  Le langage Caml , 1993 .

[37]  John Glauert,et al.  SISAL: streams and iteration in a single-assignment language. Language reference manual, Version 1. 1 , 1983 .