コンピューティングにおいて、データフローは幅広い概念であり、アプリケーションやコンテキストによって様々な意味を持ちます。ソフトウェアアーキテクチャの文脈では、データフローはストリーム処理やリアクティブプログラミングに関連しています。
データフローコンピューティングは、計算を有向グラフとして表現するという考え方に基づくソフトウェアパラダイムであり、ノードは計算を表し、エッジに沿ってデータが流れます。[ 1 ]データフローは、ストリーム処理またはリアクティブプログラミングとも呼ばれます。[ 2 ]
データフロー/ストリーム処理言語には、さまざまな形式が存在します(ストリーム処理を参照)。データフローハードウェア(データフローアーキテクチャを参照)は、古典的なフォン・ノイマン・アーキテクチャの代替手段です。データフロープログラミングの最も分かりやすい例は、スプレッドシートを用いたリアクティブプログラミングと呼ばれるサブセットです。ユーザーが新しい値を入力すると、それらは瞬時に次の論理的な「アクター」または計算式に渡されます。
分散データフローは、分散マルチプロトコルの動的な挙動を捉えるプログラミング抽象化として提案されている。データフロープログラミングの特徴であるデータ中心の視点は、高レベルの機能仕様を促進し、システムコンポーネントに関する形式的な推論を簡素化する。
データフローのハードウェアアーキテクチャは、1970年代から1980年代初頭にかけてのコンピュータアーキテクチャ研究における主要なトピックでした。マサチューセッツ工科大学(MIT)のジャック・デニスは、静的データフローアーキテクチャの分野を開拓しました。従来のメモリ アドレスをデータ依存性タグとして使用する設計は、静的データフロー マシンと呼ばれます。これらのマシンでは、単純なタグでは同じルーチンの複数のインスタンスを区別できないため、同じルーチンの複数のインスタンスを同時に実行することはできませんでした。コンテンツ アドレス指定可能なメモリを使用する設計は、 Arvindによって動的データフロー マシンと呼ばれています。これらは、並列処理を容易にするためにメモリ内のタグを使用します。データは、コンピュータのコンポーネントを介してコンピュータ内を流れます。入力デバイスから入力され、出力デバイス(プリンタなど)から出力されます。データフロー マシンのようなハードウェア構造の例は、アナログ コンピュータ、より正確には微分アナライザに見られます。
多数の処理要素が協調して計算カーネルを並列化するハードウェアアクセラレータでは、データフローとは、データ依存性を満たし計算を完了するために処理要素間でデータが転送されるパターンを指します。これらのアーキテクチャは、データフローアーキテクチャの多くの概念を継承し、AIアクセラレーションなどのより特殊なワークロードに適用します。ただし、データフローアーキテクチャとは異なり、計算はデータ依存性によって積極的に駆動されるのではなく、加速されたカーネルの単純なデータ依存性を使用して、実行前にアーキテクチャ全体をプログラムします。[ 3 ]
データフローネットワークとは、チャネルを介してデータを送信することで通信できる、並行して実行されるプロセスまたはオートマタのネットワークのことです(メッセージパッシングを参照)。
ジル・カーンにちなんで名付けられたカーンプロセスネットワークでは、プロセスは確定的です。これは、各確定プロセスが入力ストリームから出力ストリームへの連続関数を計算し、確定プロセスのネットワーク自体も確定的であるため、連続関数を計算することを意味します。つまり、このようなネットワークの挙動は、不動点定理を用いて解くことができる一連の再帰方程式で記述できます。データの移動と変換は、一連の図形と線で表されます。
データフローは以下を指す場合もあります。
Wiktionaryにおけるデータフローの辞書定義