next up previous contents
Next: The PCS Tool Chain Up: Communication Languages Previous: The Gabriel Project

OREGAMI/LaRCS

One language close in spirit to COP is LaRCS [42], the language component of the University of Oregon's OREGAMI system [43,44]. The OREGAMI system is a set of software tools for automatic mapping of parallel computations to parallel architectures. LaRCS (the Language for Regular Communication Structures) is a description language in the spirit of COP. LaRCS is used by the OREGAMI mapping algorithms, as well as to route communications in the network topology.

Like Gabriel, LaRCS allows the specification of communications using simple, compile-time connections. However, unlike Gabriel, it also supports a notion of communication phases. LaRCS has no support for high-level communication operators, nor for run-time values or operator annotations. This is a fundamental lack in the language, perhaps caused by LaRCS' origin in graph description languages, which typically describe static communication structures. Accordingly, LaRCS cannot represent communications for applications with data-dependent communications. Nonetheless, LaRCS has been used successfully for an interesting set of applications.

The language supports multiple communication phases, but the phases must be specified by the user, rather than derived from relationships among the operators based on message traffic. Continuing operators and multiple threads of control can be specified syntactically, but it is unclear from the published work whether they are supported.

LaRCS programs consist of three components: node declarations, which describe the processes; comtype and comphase declarations, which are essentially functions that can be used to specify communications; and a phase expression, which specifies the the entire program's behavior in a phase-by-phase manner.

A sample LaRCS program is given in Figure 3.2. It describes an algorithm for simulating an n -body problem. The nodes are (virtually) arranged in a ring, and the n2 interactions are computed by passing location information half way around the ring (thus doing n2/2 computation), then exchanging data across the ring to provide the remaining information to the opposite node.


  
Figure 3.2: LaRCS code for the n-body problem
\begin{figure}
\begin{center}
{\small
\begin{verbatim}
nbody(n,s);
 attributes n...
 ...2 \vert\gt chordal \vert\gt compute)**s;\end{verbatim} }\end{center}\end{figure}

The phase_expr provides the high-level picture of the n -body problem in the example. The inner loop consists of a ring communications phase, then computation; the |> construct specifies that these happen sequentially. The inner loop is repeated (n-1)/2 times, as indicated by the ** construct; it is then followed by a chordal communications phase and further computation. The entire process is then repeated s times, where s is a parameter supplied to the LaRCS program. The || construct, not used in the example, indicates parallel execution of communication phases.

COP does not explicitly provide parameterized primitives in this way, but it includes the same functionality by virtue of being a Lisp-based language: the application can define suitable ring_edge and chordal_edge functions in Lisp, then create the desired phase information by using Lisp's basic control primitives, or one of COP's iterating constructs (such as all).


next up previous contents
Next: The PCS Tool Chain Up: Communication Languages Previous: The Gabriel Project
Back to Chris Metcalf's home page