Parallel Functional Programming

Functional programming languages offer many opportunities for parallel execution. Despite this, improving the performance of functional programs through parallelism remains a challenge. I am currently working to overcome this challenge by developing new language implementations and new tools for programmers. At the heart of both of these lies a cost semantics. A cost semantics provides both a specification for language implementers and a basis for programmers to reason about performance. Our cost semantics is defined in Space Profiling for Parallel Functional Programs (ICFP '08) and in the companion technical report. This cost semantics describes the space use of parallel functional programs and accounts for the behavior of different parallel scheduling policies. The slides from my talk at ICFP give some more colorful examples of costs and how we can use them.

Multicore MLton

As part of my work on parallel functional programming languages, I have been working on a parallel extension of MLton. MLton is a high-performance, optimizing compiler for Standard ML. My extension allows programmers to take advantage of multiple processors or processor cores to perform computation in parallel. The status of this work is summarized in a post to the MLton developers' mailing list. The README gives some notes for programmers.


The latest version is available in a branch of the MLton Subversion repository. You can check out the source code using the following command.

svn co svn:// mlton

I have tested this version on Intel 32- and 64-bit architectures running Linux. However, it should run on any architecture/OS with GCC and POSIX threads (though processor affinity will only be set properly on Linux). If you have problems running on other platforms, please let me know.


The following binaries are available:

Please feel free to contact me with any questions about these or other platforms. Of course, I would also love to hear about programs that use my parallel extensions!

Release Updates

21 Oct 2008 xhtml1.0 css2.0