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