データフローアーキテクチャは、従来のフォンノイマンアーキテクチャや制御フローアーキテクチャとは対照的な、データフローベースのコンピュータアーキテクチャです。データフローアーキテクチャには概念上プログラムカウンタがありません。命令の実行可能性と実行は、命令への入力引数の可用性に基づいてのみ決定されるため、[1]命令の実行順序を予測することが困難な場合があります。
商業的に成功した汎用コンピュータハードウェアではデータフローアーキテクチャは使用されていないが、デジタル信号処理、ネットワークルーティング、グラフィックス処理、テレメトリなどの特殊なハードウェアでは、また最近ではデータウェアハウスや人工知能(多態的データフロー[2]畳み込みエンジン、[3]構造駆動、[4]データフロースケジューリング[5]など)でもデータフローアーキテクチャが実装されている。また、データベースエンジン設計や並列コンピューティングフレームワークなど、今日の多くのソフトウェアアーキテクチャでも非常に重要になっている。[要出典]
同期データフローアーキテクチャは、ワイヤスピードパケット転送などのリアルタイムデータパスアプリケーションのワークロードに合わせて調整されます。本質的に決定論的なデータフローアーキテクチャにより、プログラマはプロセッサの負荷分散、同期、共通リソースへのアクセスなどの複雑なタスクを管理できます。[6]
一方、 「データフロー」という用語は並列プログラミングのサブ領域(データフロー プログラミング)に使用されるため、用語の衝突が生じます。
歴史
データフローのハードウェアアーキテクチャは、1970年代から1980年代初頭にかけてのコンピュータアーキテクチャ研究の主要なトピックでした。MITのジャック・デニスは静的データフローアーキテクチャの分野を開拓し、マンチェスターデータフローマシン[7]とMITタグ付きトークンアーキテクチャは動的データフローの主要なプロジェクトでした。
しかし、この研究では、次のような問題は解決されませんでした。
- 超並列システムでデータ トークンを効率的にブロードキャストします。
- 超並列システムで命令トークンを効率的にディスパッチします。
- 実際のプログラムのすべての依存関係を保持するのに十分な大きさのコンテンツ アドレス可能メモリ(CAM)を構築します。
命令とそのデータの依存関係は、大規模ネットワークで効果的に分散するには細分化されすぎていることが判明しました。つまり、命令とタグ付けされた結果が大規模な接続ネットワークを通過する時間は、多くの計算を実行する時間よりも長くなりました。
それにもかかわらず、アウトオブオーダー実行(OOE) は 1990 年代から主流のコンピューティング パラダイムになりました。これは制限されたデータフローの一形態です。このパラダイムは、実行ウィンドウの概念を導入しました。実行ウィンドウはフォン ノイマン アーキテクチャの順序に従いますが、ウィンドウ内では、命令はデータ依存順序で完了できます。これは、実行ウィンドウ内のコードのデータ依存を動的にタグ付けする CPU で実現されます。データ依存を動的に追跡する論理的な複雑さにより、OOE CPU は少数の実行ユニット (2 ~ 6) に制限され、実行ウィンドウのサイズは 32 ~ 200 命令の範囲に制限されます。これは、完全なデータフロー マシンで想定されるサイズよりもはるかに小さいです。[引用が必要]
データフローアーキテクチャのトピック
静的および動的データフローマシン
従来のメモリ アドレスをデータ依存タグとして使用する設計は、静的データフロー マシンと呼ばれます。これらのマシンでは、単純なタグではそれらを区別できないため、同じルーチンの複数のインスタンスを同時に実行することはできませんでした。
コンテンツ アドレス可能メモリ(CAM)を使用する設計は、動的データフロー マシンと呼ばれます。並列処理を容易にするために、メモリ内のタグを使用します。
コンパイラ
通常、制御フロー アーキテクチャでは、コンパイラはプログラムソース コードを分析し、命令間のデータ依存関係を調べて、バイナリ出力ファイル内の命令シーケンスをより適切に整理します。命令は順番に整理されますが、依存関係情報自体はバイナリに記録されません。データフロー マシン用にコンパイルされたバイナリには、この依存関係情報が含まれています。
データフロー コンパイラは、変数名を使用する代わりに、各依存関係に一意のタグを作成して、これらの依存関係を記録します。各依存関係に一意のタグを付与することで、バイナリ内の非依存コード セグメントを順序どおりに並列実行できるようになります。コンパイラは、データ フローのループ、ブレーク ステートメント、およびさまざまなプログラミング制御構文を検出します。
プログラム
プログラムは、動的データフロー コンピュータの CAM にロードされます。命令のタグ付けされたオペランドがすべて使用可能になると (つまり、前の命令からの出力やユーザー入力)、その命令は実行ユニットによって実行準備完了としてマークされます。
これは、命令のアクティブ化または発動として知られています。実行ユニットによって命令が完了すると、その出力データは (タグとともに) CAM に送信されます。この特定のデータ (タグ値によって識別される) に依存する命令は、実行準備完了としてマークされます。このようにして、後続の命令は適切な順序で実行され、競合状態を回避します。この順序は、人間のプログラマーが想定する順序、つまりプログラムされた順序とは異なる場合があります。
説明書
命令は、必要なデータ オペランドとともに、命令トークンとも呼ばれるパケットとして実行ユニットに送信されます。同様に、出力データはデータ トークンとして CAM に送り返されます。命令と結果をパケット化することで、準備完了の命令を大規模に並列実行できます。
データフロー ネットワークは、命令トークンを実行ユニットに渡し、データ トークンを CAM に返します。従来のフォン ノイマン アーキテクチャとは異なり、データ トークンはメモリに永続的に保存されるのではなく、命令ストレージへの転送中にのみ存在する一時的なメッセージです。
参照
- 並列コンピューティング
- サイザル
- バイナリ モジュラー データフロー マシン(BMDFM)
- シストリックアレイ
- トランスポートトリガーアーキテクチャ
- ネットワーク オン チップ(NoC)
- システムオンチップ(SoC)
- インメモリコンピューティング
参考文献
- ^ Veen, Arthur H. (1986年12月). 「データフローマシンアーキテクチャ」. ACM Computing Surveys . 18 (4): 365–396. doi :10.1145/27633.28055. S2CID 5467025. 2019年3月5日閲覧。
- ^ Maxfield, Max (2020 年 12 月 24 日)。「Deep Vision のポリモーフィック データフロー アーキテクチャにようこそ」。Electronic Engineering Journal。Techfocusメディア。
- ^ “Kinara (formerly Deep Vision)”. Kinara . 2022年. 2022年12月11日閲覧。
- ^ 「ハイロ」。ハイロ。2022-12-11に取得。
- ^ Lie, Sean (2022年8月29日). Cerebrasアーキテクチャの詳細分析: ディープラーニング向けHW/SW共同設計の内部を初見。Cerebras (レポート).
- ^ 「HX300 ファミリーの NPU とプログラマブル イーサネット スイッチがファイバー アクセス市場へ」。EN -Genius (プレス リリース)。2008 年 6 月 18 日。2011 年 7 月 22 日時点のオリジナルよりアーカイブ。
- ^ マンチェスター データフロー研究プロジェクト、研究レポート: 要約、1997 年 9 月
