Welcome to the web pages for TOMPI, a Threads-Only MPI Implementation written by Erik Demaine. TOMPI is designed to run MPI programs on a single computer, either a single processor or an SMP. It is designed to be efficient in this environment, allowing effective testing, debugging, and tuning of parallel programs on a workstation. Typically, you can get 100,000+ processes using user-level threads (depending on the stack size you choose), and 512 processes using system-level threads. Experimentally, the slowdown is sub-logarithmic (for example, running 1,024 processes on the same problem is under ten times slower than the serial version).

TOMPI uses threads to minimize communication and context-switching overhead. It is specifically tuned for a workstation environment. Current implementations like MPICH do not work well in such an environment. Even the implementations that use shared memory (like MPICH's ch_shmem device) also use polling, which makes scalability impossible. See the paper below for a detailed comparison.

Papers and Documentation

For those interested in further motivation, implementation details, and experimental results, see the HPCS'97 paper/talk.

The documentation page contains installation instructions and a user guide.

Some frequently asked questions and their answers are available.


TOMPI currently supports Solaris threads, the latest POSIX threads, Cthreads, Real-Time Threads [old site], and should be easy to port to other threading systems. It has been tested on AIX 4.1-4.2 and Solaris 2.4-2.6. Currently, it does not support all of MPI. Most point-to-point communication and some collective communication is available. If TOMPI does not support your needs, send a feature request.


TOMPI is freeware. If you use it in a research or commercial project, you must acknowledge the software and its author. I would also appreciate it if you contact me -- I would like to know how TOMPI is used. If you base code on TOMPI, you must acknowledge that fact. Again, please let me know if you think your changes would be at all useful to the rest of the world. (Even if you are not willing to share it, the ideas may be useful.)

You can download the latest version (0.1.1), released March 20, 1998. Please note that it has not been throughly tested and does not support all of MPI (see the list of supported MPI concepts). See also details on this and other releases.

Please send any comments, suggestions, criticism, or (perish the thought) bug reports to Also, send me e-mail if you want to be informed of future updates.

(translated into Estonian)

Last updated September 14, 2016 by Erik Demaine.