next up previous contents
Next: Communicating in Subsets of Up: Grouping Operators Together Previous: Continuing Operators

Multiple Threads of Control

  One important feature that the language should be able to express is multiple threads of control. In other words, the language should be able to represent a more MIMD[*] model with different regions of the mesh executing different parts of the application. (Multiple threads on a single node are orthogonal to this issue, and their communication needs must be expressed using the multiple-operator methods of Section 2.4.1.)

Given a set of operators A0, A1, ... that are active on the left side of a mesh, and a similar set B0, B1, ... active on the right side, the concept of multiple threads of control can be represented as follows:


\begin{singlespace}
\begin{verbatim}
(parallel
 (loop A0 A1 ...)
 (loop B0 B1 ...))\end{verbatim} \end{singlespace}

The result will be two threads of control, one looping through the A operators on the left, one through the B operators on the right. The application thus has multiple phases that are divided not just in time but in space as well. The spatial extent of a phase is the region of the mesh in which communication and computation are occurring for the operators in that phase. In the above example, the A operators' spatial extent is the left side of the mesh.

For dynamic routers, the spatial extent is largely irrelevant for communications, though the compiler will assume the communications are mostly non-overlapping when it attempts to find efficient implementations of the operators on either side. For scheduled routers, multiple simultaneous phases implies that, rather than computing fully global schedules, ``global'' schedules are computed for subsets of the mesh independently. The issue of extents is discussed in detail in Section 6.1.


next up previous contents
Next: Communicating in Subsets of Up: Grouping Operators Together Previous: Continuing Operators
Back to Chris Metcalf's home page