Section 2b - Object FIFOの主要パターン
Object FIFOプリミティブは、いくつかのデータ移動パターンをサポートしています。このセクションでは、現在サポートされている4つのパターンをそれぞれ説明し、各パターンを実演する詳細な実践的コード例へのリンクを提供します。
概要
Object FIFOは、柔軟なデータ移動パターンをサポートしており、単純な1対1の接続から複雑なマルチキャスト、データ分散、集約まで対応します。このセクションでは、4つの主要なパターンを紹介します。
1. 再利用パターン(Reuse Pattern)
概念:
Object FIFO内の解放されていないオブジェクトを再利用します。
用途:
- スライディングウィンドウ処理
- 畳み込み演算でのデータ再利用
- 時系列データの重複アクセス
特徴:
- 以前に取得したがまだ解放していないオブジェクトに再度アクセス可能
- メモリ効率的なデータアクセスパターン
- 明示的なコピー操作なしでデータ共有
詳細な実装例: 01_Reuse/
2. ブロードキャストパターン(Broadcast Pattern)
概念:
単一のプロデューサソースから複数のコンシューマ宛先へデータをブロードキャストします。
用途:
- 同じデータを複数のコアで並列処理
- ニューラルネットワークの重みの配信
- 複数のパイプラインへの同時データ供給
特徴:
- 1つのプロデューサ、複数のコンシューマ
- すべてのコンシューマが同一のデータを受信
- 効率的な帯域幅使用
実装例のイメージ:
プロデューサ → Object FIFO → コンシューマ1
├→ コンシューマ2
└→ コンシューマ3
詳細な実装例: 02_Broadcast/
3. 暗黙的コピーパターン(Implicit Copy): 分散(Distribute)と結合(Join)
このパターンでは、Object FIFO間でのデータの暗黙的コピーをサポートし、以下の機能を提供します:
- Object FIFO間の暗黙的コピー: あるObject FIFOから別のObject FIFOへデータを自動的に転送
- 分散(Distribute): 入力データの異なる部分を複数のコンシューマに配布
- 結合(Join): 異なるプロデューサからの出力をより大きなデータテンソルに結合
分散(Distribute)
概念:
入力データセグメントを複数のコンシューマ間で分割します。
用途:
- データ並列処理
- 大きなデータセットの分割処理
- マルチコアスケーリング
実装例のイメージ:
プロデューサ → Object FIFO → [0:N/3] → コンシューマ1
├→ [N/3:2N/3] → コンシューマ2
└→ [2N/3:N] → コンシューマ3
結合(Join)
概念:
複数のプロデューサからの出力を統合されたデータ構造に集約します。
用途:
- 並列処理結果の集約
- マルチコアからの出力統合
- パイプライン結果の結合
実装例のイメージ:
プロデューサ1 → Object FIFO → [0:N/3] →
プロデューサ2 → Object FIFO → [N/3:2N/3] → 結合 → 出力
プロデューサ3 → Object FIFO → [2N/3:N] →
詳細な実装例: 03_Implicit_Copy/
4. リピートパターン(Repeat Pattern)
概念:
Object FIFO Link機能を活用して、プロデューサからのデータを繰り返します。
用途:
- 同じデータの繰り返し処理
- 反復アルゴリズム
- データの再利用が必要な処理
特徴:
- データの効率的な再利用
- 追加のメモリコピー不要
- パイプライン処理での活用
詳細な実装例: 04_Repeat/
パターンの組み合わせ
これらのパターンは単独でも、組み合わせても使用できます。例えば:
- ブロードキャスト + 結合: 複数のコアで並列処理して結果を集約
- 分散 + 再利用: データを分割して各コアでスライディングウィンドウ処理
- リピート + ブロードキャスト: データを複数回、複数のコアで処理
実践的な例
各パターンには、リンクされた実践的なコード例が用意されています。これらの例を参照することで、パターンの具体的な実装方法を理解できます。
詳細な実装例については、公式のSection 2bドキュメントを参照してください。
注意: 各パターンの完全なコード例と詳細な説明については、公式ドキュメントを参照してください。