| OCR Text |
Show 5 dataflow machines attempt to eliminate the overhead which would accompany the construction of explicit processes for this purpose. Programs in dataflow machines are often expressed as directed graphs, with the nodes representing operators and arcs representing message queues. For ease in implementation, such message queues are often bounded in length, e.g., with a capacity of one message. If one wishes greater asynchrony, which would be necessary to achieve maximal concurrency in the case where processes are generating messages at widely varying rates, additional identity operators may be introduced to balance the processing rates. These identity operators provide more buffer stations, through which messages must pass to get from one node of the original graph to another. Unfortunately, there is no algorithm for balancing a cyclic program in which the number of iterations is data-dependent. An alternative to the above mode of buffering is to use an unbounded growing buffer, such as could be constructed as a linked list with cells drawn from a global storage pool. The reduction model of computation, to be described next, provides an elegant way of achieving such an effect. 1.1.4 Reduction In order to achieve maximum asynchrony, it is helpful to decouple the production of values from their consumption as much as possible." A graph reduction model provides one means of doing this [8, 19, 31 , 24, 13, 36]. In graph reduction, work is spawned at a much coarser granularity than in dataflow machines. ·Specifically, tasks are generated which correspond in granularity to function calls in conventional languages. Such a task might typically perform a few arithmetic, logical, or structuring operations, including causing the allocation of some storage for portions of data structures. However, rather than having a long-term sequential behavior, it would continue by generating other such tasks. Thus, a rapidly dividing computation can be represented by a task which |