Skip to content

Commit

Permalink
adding history and description of the data flow model of computation
Browse files Browse the repository at this point in the history
  • Loading branch information
Ravenwater committed Jan 7, 2025
1 parent 629c445 commit 40308a0
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 25 deletions.
108 changes: 86 additions & 22 deletions content/ch2-moc/dfm.md
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)
16 changes: 16 additions & 0 deletions content/ch2-moc/old-dfm.txt
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
6 changes: 3 additions & 3 deletions content/ch2-moc/spm.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
+++

weight = 2
title = "Stored Program Machine"
title = "Random Access Machine"
toc = true

date = "2025-01-06T16:43:57-05:00"
Expand All @@ -21,7 +21,7 @@ The infinite sequence of cells is equivalent to the infinite Turing Machine tape
A key inspiration for the RAM model of computation came from the von Neumann architecture, which was conceptualized by John von Neumann in the late 1940s. The von Neumann architecture's hallmark feature is the stored-program concept, where instructions and data are stored in the same memory. The von-Neumann machine, later
renamed to the Stored Program Machine had a profound impact on the design and development of modern computers, enabling programmability and flexibility.

## Basic Operating Principle
**Basic Operating Principle**

After loading a program into the main memory of the Stored Program Machine,
the Operating System writes the address of the entry point of the program
Expand All @@ -40,7 +40,7 @@ to unabiguously execute a program:

This cycle is repeated till a halt instruction is executed, or an interrupt is issued.

## Success and Impact
**Success and Impact**

The RAM model, particularly through its stored-program realization, has had a profound influence on both theoretical computer science and practical engineering. It serves as the foundation for algorithm analysis, underpinning complexity classes like **P** and **NP**. By providing a clear and manageable abstraction, it has guided the development of efficient algorithms and hardware architectures.

Expand Down

0 comments on commit 40308a0

Please sign in to comment.