next up previous index
Next: Stream Initialization Up: Q ISA Previous: Evaluation Model   Index

Streams

Q supports multidimensional streams as the basic mechanism for data storage and communication. These streams may be viewed as a mapping of a multidimensional array of stream elements into a one dimensional sequence, such as a linear memory address or a transmission over a serial communication channel. Streams are used both for algorithm specification and at the interface between the upper and lower levels of algorithm specification.

In the upper (or DFG) level of algorithm specification, streams represent data being output from a single function, and input to one or more other functions. A mutable program variable (e.g. those used in a conventional programming model) may be modeled as a stream by adding a dimension which represents the various assignments over time.

Synchronization between a stream producer and consumers is effectively performed on each individual stream element. For efficiency's sake, however, synchronization in the Q architecture is almost always performed on larger sets of stream elements.

The number of stream elements synchronized as a unit should be determined by the control machine at runtime. The partitioning should generate only sufficient parallelism to occupy all the data machines available. Excessively fine partitioning generates undesirable synchronization overhead. In the worst case, it can overload the control machines resources. On the other hand, an excessively coarse partitioning won't take advantage of the available computational resources. This partitioning may be done in a semi-static manner to minimize overhead yet allow execution to adapt to changing resources.



Subsections
next up previous index
Next: Stream Initialization Up: Q ISA Previous: Evaluation Model   Index
magiceight-web@media.mit.edu