Chapter11

Chapter11-4(前半)
6311627
加藤健
4章
システムレベルでの
パイプラインの作り方
システムレベルでのパイプラインの作り方
エッジ検出アルゴリズムでの先読み
→ バイトバッファ配列へのアクセスが必要
→ パフォーマンスが低下
→ パイプラインレベルでの並列処理を行う
→ 劇的にフィルタの実効スループットが向上
システムレベルでのパイプラインの作り方
• イメージフィルタアルゴリズムをサブプロセス
へ分割
•フィルタの複雑さが軽減
•アルゴリズムのパフォーマンスが改善
システムレベルでのパイプラインの作り方
• パイプラインの動作は7章で説明したものと
ほぼ同様(今回は高レベル)
• パイプラインはプログラマにより設計される
(コンパイラにより自動的に生成されない)
システムレベルでのパイプラインの作り方
• エッジ検出の実装には各ピクセルを処理する
ために3×3のウインドウが必要
• 本書のアルゴリズムでは、上流のプロセスが
3つのストリームとしてウインドウを生成
バイトバッファとそれに対応する
循環バッファのオーバーヘッドが不要に
システムレベルでのパイプラインの作り方
1. 画像データをco_memory_readblockを使用
してイメージバッファからロード。その後
co_stream_writeを使用して24ビットのピクセ
ルのストリームに変換
2. ジェネレータによりウインドウの各列を表す
ストリームを生成する。
システムレベルでのパイプラインの作り方
3. 3つのピクセルデータは中央のピクセルの値
を計算するために使われる。
この値はco_stream_writeからストリーミング
される
4. co_stream_readを使用して結果のピクセル
データを呼び出し、co_memory_writeblock
を使用して新しいイメージバッファに格納
システムレベルでのパイプラインの作り方
4つのプロセスはパイプラインにより並列で動作
2クロックサイクルの速度で
処理されたピクセルを生成可能
リアルタイム動画処理に十分な速さを実現
DMAの入力プロセス
• これまでのアルゴリズムでは入出力画像が
保存されているかを無視していた
• 実際は、外部RAMやハードウェアインターフェ
イスを介して入出力される
• Impulse C は大量のデータを移動するための
ストリームと、共有メモリのメカニズムを提供
している
DMAの入力プロセス
• これまでの例ではストリームを使用
特定のアプリケーションでは
共有メモリを使用するとパフォーマンスが向上
• 選択決定の要因はプラットフォーム固有
• 留意する点は4つ
DMAの入力プロセス
1. 各ストリームの処理に何サイクル必要か
• プロセッサが転送に関わっているかとCPUと
バスの組み合わせに依存
• バスがストリーム上でデータを受信する際、
ポーリングすると、大幅なオーバーヘッドが
発生
DMAの入力プロセス
2. メモリ転送のために何サイクル必要か
• 1と同様に使用されているメモリとバスの
アーキテクチャに依存している
DMAの入力プロセス
3-1. CPUがキャッシュを持っているか
3-2. そのデータはキャッシュに存在するか
DMAの入力プロセス
4. Impulse Cのハードウェアのプロセスと
同じバス上のメモリか
• そうであるなら、CPUへのアクセス競合をおこ
し、パフォーマンスが低下する
DMAの入力プロセス
• 4章においてベンチマークの例を用いてこれら
の問題について議論した
• 今回はストリーミングデータを用いるアプロー
チと共有メモリを用いるアプローチの比較実
験のためにNiosⅡが埋め込まれたAlteraの
Stratix FPGAを使用
DMAの入力プロセス
• NiosⅡが埋め込まれたAlteraのStratix FPGA
はストリームよりもDMA転送を使用したほうが
効率的なFPGA
• 他のプラットフォームにおいてXilinxの
MicroBlazeプロセッサとFSLバスを使用すると
DMA転送より高速なパフォーマンスになるこ
ともある
DMAの入力プロセス
• DMAを用いた共有メモリとのアクセスはハー
ドウェアが転送中、別の処理を行うと転送が
ブロックされる欠点がある
データ転送が計算とオーバーラップできるように
共有メモリ操作を処理するためのプロセスを含む必要がある
• 画像データを読み込み、データストリームから
送信することがパイプラインの第一プロセス
DMAの入力プロセス
• 図11‐9からわかること
1.
•
•
•
to_streamプロセスは
co_signal go
co_memory imgmem
co_stream output_stream
の3要素を持つ
DMAの入力プロセス
2. プロセス実行機能では、それぞれ
• co_memory_readblock関数は共有メモリからの
ピクセルデータの読み取り
• co_stream_write関数は出力ストリームへの書き
込みを行う
• co_signalはCPUと同期し、画像メモリの処理準
備ができているかを確認
を行っている。
DMAの入力プロセス
3.
• 24bitのデータを受け入れるように設計されて
いるため16bitのピクセルデータを受理する
• 画像データは16bit符合なし整数として格納す
るが32bitのメモリが使用されている
• DMAは配列に1つずつ要素を転送することで、
倍のバストランザクションを必要とする
DMAの入力プロセス
• これらのプロセスは多くの種類の入力ソース
と共に使用できるように変更する、あるいは
手製のハードウェアブロックに置き換えること
が可能