Chapter 11
11.1~11.3
6311623
折原 ダビデ竜
概要
この章は, system-level parallelism の利用が様々な応用にお
いて,どのように処理量を改善するかについてである.
その例として,我々は今回, image-processing filter を例として
用いる.
DESIGN OVERVIEW
エッジ-ディテクションアルゴリズムは,入力画像の隣接したピクセル
間の境界を特定したり,enhance するのに用いられる.
そして,ある特定の要求(requirements)やハードウェア,ソフトウェ
アのインプリメンテーション(implementation)のために利用される.
エッジ-ディテクションアルゴリズムには様々なものが存在する.
一度に1ピクセルずつ,もし我々が Figure11-1 のようにピクセル
データのストリームを実行するイメージフィルタを作成しようとするな
ら,プロセスは少なくとも “look ahead”と“look behind“ を評価す
るのに十分なピクセルを蓄えなければならないことは明らかである.
こうすることによって,我々は simple array indexing
techniques に用いられる circular streaming image buffer を
C言語で 記述することができる.
DESIGN OVERVIEW
24-bit のローカルストレージエリアに入れられた入力データの読
み込みと, color values の unpacking の 結果は3つの異なる
バッファであり,required 3-by-3 window over a single scan
line へのアクセスを提供するために与えられた時間において十
分なピクセルデータを含んでいる.
一度ピクセルデータのウィンドウにアクセスしたら,我々は対象に
しているピクセルの評価値の決定のために必要な計算を実行す
ることができる.
DESIGN OVERVIEW
この例で記述したエッジ-ディテクションアルゴリズムはエッジをエ
ンハンスするイメージウィンドウ上で relatively primitive set の
計算を実行する.
4つ一組のピクセルのそれぞれのピクセルnについて,各ペアは
1つの axis 上のnを囲み,比較され,
各ピクセルのカラー(red,green,and blue)の決定的な違いを計
算される.
nの新しい値のそれぞれのカラーは,ペアに含まれているピクセ
ルの difference の観測で greatest なものを代表として
assingned される.
以上のロジックは,Figure 11-2 で表されるようにインナーコード
ループとして表現される.
このループの詳細を examine しよう!
Figure 11-2
それぞれの色(red,green, and blue)を持っているピクセルを対
象とし,それに隣接した8つのピクセルは scan line buffer から
コピーされる.
B_OFFSETADD と B_OFFSETSUB macros が定義されると
いうことと、 desired pixels にアクセスするために必要な
circular buffer offsets を与えるということを気にとめておい
て!(命令口調で)
隣接したピクセルの評価(値)が決定されたあと,4つセットの計算
は全ての繋がれた2つのピクセル間(例えば PixelN,PixelSのよ
うな)の intensity の違いの最大を決定するために実行される.
Figure 11-2
全ての four possible edge directions が解析されたら,
intensity の違いの最大はエッジのしきい値と比較される.
もし,しきい値よりも優れているならば,それが新しいピクセルの
値となる.
もし,しきい値の値に満たない場合,「black」を意味する値 zero
が与えられる.
3カラーの新しい値が決定されたら,それらは single 24-bit の
値に repackaged され, co_stream_write を利用し output
buffer に書き出される.
Performing Desktop Simulation
Figure 11-3 と 11-4 で表されるように,デスクトップシミュレー
ションでこの応用をコンパイルすると,800×800 pixel の edge
detect operation の結果を観測できる.
この応用に用いられた software test bench は bitmapformat のイメージファイルを読み書きするためのCライブラリー
の標準機能を利用している,ということを気に留めておいてほし
い(命令口調で)
サンプル画像の各ピクセルは software test bench によって,
edge-detection process に転送される.
この結果は, Figure 11-4 で表されるように second file に出力
される.
Refinement 1:Creating Parallel
8-Bit Filters
Edge-detection process のインナーコードループは,1色につ
き6ステージ,つまり全18ステージを必要とするが,大抵は要求
に見合うほど速くはない.
我々は Chapter 9 で述べたテクニックを用いてこのプロセスの
速度の向上を試みるが,これらの利用は bytebuffer array 上で
実行されるメモリアクセスのループを劇的に加速させるようには
思えない.
特に,次に示すようなインナーコードループの始めと終わりにつ
いて考えてみよう!
このようにred,green, and blue のピクセル値からの3つの異
なる問い合わせを作るストリームから得られる 24-bit の値を
unpack する.
Unpacking の後, edge detection は3色それぞれがインナー
コードループ内で実行される.
その要約を以下にもう一度見せる.
このアルゴリズムを加速させる1つのアプローチは,同じイメージ
フィルターの例を3つ作成することによって,これら3つの edgedetection operation を並列に行うことかもしれない.
理論的には,この方法は3つの要因による1つのピクセルの処
理に必要な時間を削減することに違いなく,さらに 24-bit ピクセ
ル値のpack and unpack に必要などんなオーバヘッドも必要と
なる.
この応用では, RGB-encoded source file から入力された情
報を読み出し,ピクセルは異なるカラー値として利用できる.
したがって,テストベンチは全ピクセル値のストリームよりピクセ
ルのカラー値の3つのストリームの方が簡単に修正・変更を行う
ことができる.
Figure 11-5 のように,1回につき3カラー, edge-detection
filter のスピードアップという初めの試みのように,我々は3つの
異なる edge-detection filter のアルゴリズムのパーティショニ
ングによる parallelism の作成を行う.
8-bit の結果から生じる one-color filter はFigure 11-6 で表さ
れる.
このリストでは以下のことを気にとめてほしい.
・Input stream は今は eight-bit の値を転送するために用いら
れ, co_stream_option function に記述される.
・オリジナルバージョンでは, bytebuffer array はピクセルのカ
ラー値を蓄えるために使用される. Single-color version では,
bytebuffer はただの one-dimensional array である.
・色の順番に実行した innermost code loop を必要としてるの
で,我々は今は PIPELINE pragma を使用することができる.こ
れの利用は two clock cycles によるループの処理量のレート
を改善するだろうが,bytebuffer がアクセスされる方法を実行
するための利点は限られている.前のように、引き続きメモリアク
セスはこのアルゴリズムの速度上昇における制限要因になる.
これら2バージョンを比較すると,我々は single-color filter の
3つの例を interconnection する必要があるだろう.この構造
を記述する configuration function は Figure 11-7 で表す.こ
の configuration function では,我々は6つのストリームの宣
言を見ることができる(入力側の3色と出力側の3色).同様に,
5つのプロセス(3つのedge-detection プロセスと生産者・消費
者テストプロセス)のco_process_create の応答呼び出しも見
ることができる.
このバージョンでの edge-detection algorithm では,オリジナ
ルバージョンよりもたしかに速く実行できるだろうが,もちろん,シ
ンセサイザーを使った時にはもっとハードウェアを必要とするだ
ろう.
ダウンロード

折原 ダビデ竜(11.1-3)