chapter11- 4( 前半 )

22
Chapter11-4( 前前 ) 6311627 前前前

Upload: lee-rocha

Post on 01-Jan-2016

50 views

Category:

Documents


2 download

DESCRIPTION

Chapter11- 4( 前半 ). 6311627 加藤健. 4章. システムレベル で の パイプラインの作り方. システムレベルでのパイプラインの作り方. エッジ検出アルゴリズムでの先読み → → → →. バイトバッファ配列へのアクセスが必要. パフォーマンスが低下. パイプラインレベルで の 並列 処理 を行う. 劇的にフィルタの実効 スループットが向上. システムレベル で のパイプライン の作り方. イメージフィルタアルゴリズムをサブプロセスへ分割. フィルタの複雑さが軽減 アルゴリズムのパフォーマンスが改善. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Chapter11- 4( 前半 )

Chapter11-4( 前半 )

6311627加藤健

Page 2: Chapter11- 4( 前半 )

4章

システムレベルでのパイプラインの作り方

Page 3: Chapter11- 4( 前半 )

システムレベルでのパイプラインの作り方

 エッジ検出アルゴリズムでの先読み →  →

→ →

バイトバッファ配列へのアクセスが必要

パフォーマンスが低下

パイプラインレベルでの並列処理を行う劇的にフィルタの実効スループットが

向上

Page 4: Chapter11- 4( 前半 )

システムレベルでのパイプラインの作り方

• イメージフィルタアルゴリズムをサブプロセスへ分割

•フィルタの複雑さが軽減•アルゴリズムのパフォーマンスが改善

Page 5: Chapter11- 4( 前半 )

システムレベルでのパイプラインの作り方

• パイプラインの動作は 7 章で説明したものと

  ほぼ同様(今回は高レベル)

• パイプラインはプログラマにより設計される

 (コンパイラにより自動的に生成されない)

Page 6: Chapter11- 4( 前半 )

システムレベルでのパイプラインの作り方• エッジ検出の実装には各ピクセルを処理

するために3 × 3のウインドウが必要

• 本書のアルゴリズムでは、上流のプロセスが3つのストリームとしてウインドウを生成バイトバッファとそれに対応する

循環バッファのオーバーヘッドが不要に

Page 7: Chapter11- 4( 前半 )

システムレベルでのパイプラインの作り方

1. 画像データを co_memory_readblock を使用してイメージバッファからロード。その後 co_stream_write を使用して 24 ビットのピクセルのストリームに変換

2. ジェネレータによりウインドウの各列を表すストリームを生成する。

Page 8: Chapter11- 4( 前半 )

システムレベルでのパイプラインの作り方

3. 3 つのピクセルデータは中央のピクセルの値を計算するために使われる。

  この値は co_stream_write からストリーミングされる

4.   co_stream_read を使用して結果のピクセルデータを呼び出し、co_memory_writeblock を使用して新しいイメージバッファに格納

Page 9: Chapter11- 4( 前半 )

システムレベルでのパイプラインの作り方

4 つのプロセスはパイプラインにより並列で動作

リアルタイム動画処理に十分な速さを実現

2 クロックサイクルの速度で処理されたピクセルを生成可能

Page 10: Chapter11- 4( 前半 )

DMA の入力プロセス• これまでのアルゴリズムでは入出力画像が  保存されているかを無視していた• 実際は、外部 RAM やハードウェアインター

フェイスを介して入出力される

• Impulse C は大量のデータを移動するための ストリームと、共有メモリのメカニズムを

提供している

Page 11: Chapter11- 4( 前半 )

DMA の入力プロセス• これまでの例ではストリームを使用

• 選択決定の要因はプラットフォーム固有• 留意する点は 4 つ

特定のアプリケーションでは共有メモリを使用するとパフォーマンスが向上

Page 12: Chapter11- 4( 前半 )

DMA の入力プロセス1. 各ストリームの処理に何サイクル必要か

• プロセッサが転送に関わっているかとCPU とバスの組み合わせに依存

• バスがストリーム上でデータを受信する際、ポーリングすると、大幅なオーバーヘッドが発生

Page 13: Chapter11- 4( 前半 )

DMA の入力プロセス2. メモリ転送のために何サイクル必要か

• 1 と同様に使用されているメモリとバスのアーキテクチャに依存している

Page 14: Chapter11- 4( 前半 )

DMA の入力プロセス3-1.   CPU がキャッシュを持っているか

3-2.  そのデータはキャッシュに存在するか

Page 15: Chapter11- 4( 前半 )

DMA の入力プロセス4.   Impulse C のハードウェアのプロセスと  同じバス上のメモリか

• そうであるなら、 CPU へのアクセス競合をおこし、パフォーマンスが低下する

Page 16: Chapter11- 4( 前半 )

DMA の入力プロセス• 4 章においてベンチマークの例を用いてこ

れらの問題について議論した

• 今回はストリーミングデータを用いるアプローチと共有メモリを用いるアプローチの比較実験のために NiosⅡ が埋め込まれた Altera の Stratix FPGA を使用

Page 17: Chapter11- 4( 前半 )

DMA の入力プロセス• NiosⅡ が埋め込まれた Altera の Stratix FPGA

はストリームよりも DMA 転送を使用したほうが効率的な FPGA

• 他のプラットフォームにおいて Xilinx のMicroBlaze プロセッサと FSL バスを使用すると DMA 転送より高速なパフォーマンスになることもある

Page 18: Chapter11- 4( 前半 )

DMA の入力プロセス• DMA を用いた共有メモリとのアクセスは

ハードウェアが転送中、別の処理を行うと転送がブロックされる欠点がある

• 画像データを読み込み、データストリームから送信することがパイプラインの第一プロセス

データ転送が計算とオーバーラップできるように共有メモリ操作を処理するためのプロセスを含む必要があ

Page 19: Chapter11- 4( 前半 )

DMA の入力プロセス• 図 11 9‐ からわかること

1. to_stream プロセスは• co_signal go• co_memory imgmem• co_stream output_stream の 3 要素を持つ

Page 20: Chapter11- 4( 前半 )

DMA の入力プロセス2.  プロセス実行機能では、それぞれ• co_memory_readblock 関数は共有メモリから

のピクセルデータの読み取り• co_stream_write 関数は出力ストリームへの

書き込みを行う• co_signal は CPU と同期し、画像メモリの処

理準備ができているかを確認 を行っている。 

Page 21: Chapter11- 4( 前半 )

DMA の入力プロセス3.  • 24bit のデータを受け入れるように設計さ

れているため 16bit のピクセルデータを受理する

• 画像データは 16bit符合なし整数として格納するが 32bit のメモリが使用されている

• DMA は配列に 1 つずつ要素を転送することで、倍のバストランザクションを必要とする

Page 22: Chapter11- 4( 前半 )

DMA の入力プロセス

• これらのプロセスは多くの種類の入力ソースと共に使用できるように変更する、あるいは手製のハードウェアブロックに置き換えることが可能