This month's column concludes last month's foray into parallel programming languages. Most of us work in environments with lots of processors, so the opportunities for parallel usage are plentiful. I hope you will take the time to experiment with some of these tools, if only for the intellectual stimulation they supply.

From a strictly pragmatic point of view, it has never been clear that parallel programming languages are an effective general-purpose way of obtaining increased processing power. Parallel programming adds complexity, and some problems don't parallelize at all well.

Nonetheless, any number of specialized applications testify to the effectiveness of ganging up large numbers of processors. From ad hoc collections of prime-crackers to the formal structure of MIMD multiprocessors, it is obvious that the field has its CHARMs...

CHARM

CHARM is a machine-independent parallel programming system. Programs written using this system will run unchanged on MIMD machines with or without a shared memory. It provides high-level mechanisms and strategies to facilitate the task of developing even highly complex parallel applications.

The design of the system emphasizes efficient portability, latency tolerance, dynamic load balancing, specific information sharing modes, software reuse, and modularity. CHARM is available in ftp://a.cs.uiuc.edu/pub/CHARM/.

Linda, POSYBYL, etc.

Linda is a well-known parallel programming toolkit. For an informal summary of available information on Linda, get Linda.info from ftp://hubcap.clemson.edu/pub/parallel/. A ray-tracing program with support for Linda can be found as raylinda.tar.Z in ftp://dept-gw.cs.yale.edu/pub/. A public-domain implementation of Linda named POSYBL can be found in ftp://crete.csd.uch.gr/pub/posybl/.

Maisie

Maisie is a process-oriented parallel programming language that can also be used to build parallel discrete-event simulation programs. Maisie supports light-weight processes and asynchronous typed-message communications. Maisie is written in C, and is available in ftp://ftp.cs.ucla.edu/pub/.

Modula-2*

The IPD (Institut fuer Programmstrukturen und Datenorganisation) Modula-2* system extends Niklaus Wirth's Modula-2 language to run in parallel. Unfortunately, the IPD does not appear to distribute the source code for the system, so (a) you can only get versions for a half-dozen systems and (b) you have no ability to inspect and/or modify the code. The system is available in ftp://iraun1.ira.uka.de/pub/programming/modula2star/.

Parallaxis

Parallaxis is a a system for doing massibely parallel programming. It is also (sigh), another binary-only distribution. (What is it with these guys?) It does, however, include parallel applications (written in Parallaxis source code), as well as a User Manual. In any event, Parallaxis is available in ftp://ftp.informatik.uni-stuttgart.de/pub/parallaxis/.

Parallel Random Access Machine (PRAM)

PRAM emulator is a software emulator of a theoretical model of parallel computing called Parallel Random Access Machine or PRAM for short. The emulator is distributed in ANSI C source code form. The emulator system consists of a PEL (PRAM Emulator Language) assembler and an emulator program running assembled PEL programs.

pm2 is a programming language for PRAM. It is based on Modula-2 with additional elements for the control of parallelism. PRAM and pm2 are available in ftp://cs.joensuu.fi/pub/Software/pram/.

pmake

In amongst all these exotic systems, it's nice to be able to mention a small, comfortable, UNIXish utility. Pmake is a parallel "make" utility, well-suited for batching up sets of compiles, etc. It is available as pmake-2.0.tar.Z in ftp://gatekeeper.dec.com/pub/misc/makes/.

Program Composition Notation (PCN)

PCN is a system for developing and executing parallel programs. It comprises a high-level programming language, tools for developing and debugging programs in this language, and interfaces to Fortran and C that allow the reuse of existing code in multilingual parallel programs. Programs developed using PCN are portable across many different workstations, networks, and parallel computers. PCN is written in C and PCN, and is available in ftp://info.mcs.anl.gov/pub/pcn/.

PlaNet

The PlaNet System is a tool for constructing, running and examining a PDP (parallel distributed processing) or connectionist network. The most significant aspect of PlaNet is that it allows you to deal with a network at a fairly high level of conceptualization, and yet provides the flexibility to construct networks of almost arbitrary structure and size and to run the network in many different ways. PlaNet is available as PlaNet5.7.tar.Z in ftp://toklab.ics.osaka-u.ac.jp/unix/.

SPLASH

SPLASH is a huge (4.7 MB, compressed) collection of parallel applications for shared-memory multiprocessor systems. SPLASH is available as splash.tar.Z in ftp://mojave.stanford.edu/pub/splash/.

Synchronizing Resources (SR)

SR is a language for writing distributed programs. Its main language constructs are resources and operations. SR provides a variety of mechanisms, but they are based on only a few underlying concepts. Moreover, these concepts are generalizations of those that have been found useful in sequential programming, and they are integrated with the sequential components of SR so that similar things are expressed in similar ways. SR is written in C, and is available in ftp://cs.arizona.edu/sr/.