next up previous contents
Next: Chaos and PARTI Up: Communication Languages Previous: The PCS Tool Chain

The CrOS Project

  The CrOS project from CalTech [24] uses a crystalline programming framework. The authors present an MIMD model with nodes calling library functions to communicate with each other. The CrOS target hardware did not have a separate router, and accordingly the processors themselves performed the communication over dedicated point-to-point links. Their loosely synchronous model requires that a node cannot write to another node unless the destination node is prepared to receive the message; similar in spirit, at the processor level, to scheduled routing. Since CrOS was purely run-time, they did not support any notion of phases, or any distinction between compile-time and run-time values.


  
Figure 3.4: CrOS code for a parallel prefix
\begin{figure}
{\small
\begin{verbatim}
int int_add(int *ptr1, int *ptr2, int si...
 ... = vm_combine(&sum, int_add, sizeof(int), 1);
 ...
 }\end{verbatim}}\end{figure}

However, CrOS does include a notion of operators similar to that used in COP. In addition to simple stream-style connections, they include primitives for doing transpose and various other array-style communications. A fragment of a simple sum-of-squares program is presented in Figure 3.4; the vm_combine() function is a CrOS operator that does a parallel prefix, or scan, across the nodes in the machine.

CrOS supports a version of online routing called the crystal_router, which handles online routing in a manner similar to that used by COP. Without the ability to extract information at compile-time, however, they do an `inspector'-style step where routing information is collected in the first phase, then subsequent phases use the collected information to avoid having to examine all possible streams for input.


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