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.
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).