-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
adding history and description of the data flow model of computation
- Loading branch information
1 parent
629c445
commit 40308a0
Showing
3 changed files
with
105 additions
and
25 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,36 +1,100 @@ | ||
+++ | ||
|
||
weight = 3 | ||
title = "Data Flow Machine" | ||
title = "Data Flow Model" | ||
toc = true | ||
|
||
date = "2024-01-06T16:44:37-05:00" | ||
|
||
+++ | ||
|
||
In the late 60's and 70's when computer scientists were exploring parallel | ||
computation by building the first parallel machines and developing the | ||
parallel algorithm complexity theory, folk realized that this | ||
over-constrained specification was a real problem for concurrency. | ||
One proposal to rectify this was a natively parallel execution | ||
model called the Data Flow Machine (DFM). A Data Flow Machine uses a | ||
different resource contention management mechanism: | ||
|
||
1. write an operand into an appropriate operand slot in an instruction token stored in a Content Addressable Memory (CAM) by an instruction tag | ||
2. check if all operands are present to start the execution cycle of the instruction | ||
3. if an instruction is ready then extract it from the CAM and inject it into a fabric of computational elements | ||
4. deliver the instruction to an available execution unit | ||
5. execute the instruction, and finally | ||
6. write the result back into an operand slot in target instruction token stored in the CAM | ||
|
||
The Data Flow model emerged in the early 1970s through pioneering work by Jack Dennis at MIT<sup>[1](#dennis)</sup>, | ||
paralleled by research by Robert Barton and Al Davis at the University of Utah<sup>[2](#barton)</sup>. | ||
This model arose as an alternative to the von Neumann architecture to create a framework for expressing parallelism. | ||
Unlike traditional von Neumann architectures, which execute instructions sequentially, the data flow model | ||
represents computation as a directed graph of data dependencies. Nodes in this graph correspond to operations, | ||
and edges represent data _flowing_ between them. Execution is driven by the availability of data, | ||
allowing operations to proceed independently and in parallel. The data flow model was promising better | ||
parallel execution by eliminating the program counter and global updating of state that are essential | ||
in the operation of the Stored Program Machine. | ||
|
||
Barton and his colleagues produced the first operational data flow machine, called the DDM-1<sup>[3](#davis)</sup>. | ||
Other examples of data flow machines were the Manchester Dataflow Machine and MIT’s Tagged Token Dataflow Architecture. | ||
These systems employed mechanisms like token matching and dynamic scheduling to achieve fine-grained parallelism, | ||
enabling independent operations to execute simultaneously. However, challenges such as high hardware complexity | ||
and difficulties in scaling limited their widespread adoption. | ||
|
||
**The Synchronous Data Flow Model** | ||
|
||
Building on the general data flow model, the Synchronous Data Flow (SDF) model was introduced in the 1980s | ||
by Edward A. Lee and David G. Messerschmitt<sup>[4](#lee)</sup>. Designed for specific applications such as | ||
signal processing and embedded systems, SDF introduced a deterministic structure to the data flow paradigm. | ||
Each node in an SDF graph has fixed rates of token production and consumption, enabling static scheduling | ||
and precise resource analysis. | ||
|
||
In the general data flow model: | ||
|
||
* Nodes (Actors): Represent computational tasks or operations. | ||
* Edges: Represent communication channels through which data flows. | ||
* Tokens: Units of data that move between nodes along the edges, triggering execution. | ||
|
||
In SDF, these principles are refined by enforcing fixed token rates, enabling: | ||
|
||
* Static Scheduling: Tasks can be scheduled deterministically before execution. | ||
* Simplified Analysis: Buffer sizes and resource requirements can be calculated in advance. | ||
* Deadlock Detection: Ensures reliable execution for real-time systems. | ||
|
||
**The Data Flow Machine and SDF Modifications** | ||
|
||
Data Flow Machines initially implemented the general data flow model with dynamic scheduling and | ||
token matching to exploit parallelism. While effective for parallelism, their complexity and lack | ||
of determinism made them difficult to use for practical applications. | ||
|
||
SDF-based systems modified this approach by introducing predictable behavior. By enforcing static | ||
token rates, SDF adaptations of Data Flow Machines achieved greater reliability and efficiency, | ||
making them particularly suited for specialized domains like digital signal processing. | ||
These modifications facilitated: | ||
* Predictable Execution: Ideal for real-time applications. | ||
* Resource Optimization: Reduced overhead and improved scalability in constrained environments. | ||
|
||
The strength of the resource contention management of the Data Flow Machine | ||
is that the machine can execute along the free schedule, that is, the | ||
inherent parallelism of the algorithm. Any physical implementation, however, | ||
is constrained by the energy-efficiency of the CAM and the network | ||
that connects the CAM to the fabric of computational elements. As | ||
concurrency demands grow the efficiency of both the CAM and the fabric | ||
decreases making large data flow machines unattractive. However, small data | ||
allows it to execute along the free schedule, that is, the inherent parallelism of the algorithm. | ||
Any physical implementation, however, is constrained by the energy-efficiency of the CAM | ||
and the network that connects the CAM to the fabric of computational elements. | ||
As concurrency demands grow, the efficiency of both the CAM and the fabric | ||
decreases making large data flow machines uncompetitive. However, small data | ||
flow machines don't have this problem and are able to deliver energy-efficient, | ||
low-latency resource management. Today, all high-performance microprocessors | ||
have a data flow machine at their core. | ||
|
||
**Success and Impact** | ||
|
||
The data flow model laid the foundation for parallel computing, influencing the design of | ||
modern parallel architectures and programming paradigms. | ||
Although Data Flow Machines faced practical challenges, their principles endure in modern systems, | ||
such as functional programming languages and streaming frameworks. | ||
|
||
The SDF model further extended this legacy, offering deterministic and analyzable execution | ||
that has profoundly impacted signal processing, multimedia applications, and control systems. | ||
Modern tools and frameworks, like TensorFlow, Cloud Dataflow, and Apache Beam, draw on these | ||
foundational ideas to support parallel and streaming computations. | ||
|
||
The data flow model and its extensions, including the Synchronous Data Flow model, | ||
represent a critical evolution in computational theory. By enabling parallelism and predictability, | ||
these models have significantly influenced both theoretical research and practical applications. | ||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
**Footnotes** | ||
|
||
<a href=https://ieeexplore.ieee.org/document/1653418>[1]</a> Jack B. Dennis, _Data Flow Supercomputing_, IEEE Computer, Volume 13, Issue 11, November 1980 | ||
|
||
<a href=https://www.sci.utah.edu/~nathang/utah-history/utah-history-computing.pdf>[2]</a> Utah Computing History Project | ||
|
||
<a href=https://dl.acm.org/doi/10.1145/800094.803050>[3]</a> A. L. Davis, _Architecture and System Method of DDM1: A recursively structured data driven machine_, ISCA 1978: Proceedings of the 5th annual symposium on Computer architecture, Pages 210-215 | ||
|
||
<a href=https://ieeexplore.ieee.org/document/1458143>[4]</a> Edward A. Lee, David G. Messerschmitt, _Synchronous data flow_, Proceedings of the IEEE ( Volume: 75, Issue: 9, September 1987) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
|
||
|
||
In the late 60's and 70's when computer scientists were exploring parallel | ||
computation by building the first parallel machines and developing the | ||
parallel algorithm complexity theory, folk realized that this | ||
over-constrained specification was a real problem for concurrency. | ||
One proposal to rectify this was a natively parallel execution | ||
model called the Data Flow Machine (DFM). A Data Flow Machine uses a | ||
different resource contention management mechanism: | ||
|
||
1. write an operand into an appropriate operand slot in an instruction token stored in a Content Addressable Memory (CAM) by an instruction tag | ||
2. check if all operands are present to start the execution cycle of the instruction | ||
3. if an instruction is ready then extract it from the CAM and inject it into a fabric of computational elements | ||
4. deliver the instruction to an available execution unit | ||
5. execute the instruction, and finally | ||
6. write the result back into an operand slot in target instruction token stored in the CAM |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters