スライド 1

太原研究室 M1
割田臣一

既に述べたように、イメージフィルタは一般に、動作し
ているイメージデータの画面に作用する。
◦ この例では、3×3ウィンドウ上でフィルタを作用させる。
◦ 処理においては3つの新しい値と、先程のピクセルの計算で
用いた6つの同じ値を使う。
カラム(column):縦方向の列、数学で列
⇔row(横方向の列、数学で行)




カラム生成プログラムは左から右に処理を進め、どん
なサイクルにおいても3ピクセルの行のストリームを発
生させる。
このストリームは、3つの新しい値に対応する1つの3
ピクセル列に相当する。
3つの新しい値は、フィルタによって次の処理対象とな
るピクセルのフィルタ画面において必要とされる。



Prep_runプロセスは、オリジナルのアルゴリズム同
様3ピクセルの列データを生み出すのに十分なデータ
量をバッファリングするが、より簡単な方法でバッファ
リングを行う。
オリジナルのアルゴリズムの性能にてネックとなるの
が、1つのバッファからピクセルの値を取得する方法
であった。
バッファは全てのピクセルを含んでおり、「前を見る」
「後ろを見る」ためにある画像の行全体を必要とした。
イメージフィルタの性能を向上させるためには、同じメ
モリへのアクセス回数を減少させたい。
 そのために、要求された計算を実行する際の繰り返し
回数を減らしたい。
⇒7、10章で述べた配列を分割する技法を用いることで
一度のループで同じ配列にアクセスする必要性を失く
す。
 その結果、2クロックに1回ピクセルの列を生み出すこ
とで非常に高いスループットを実現できる。
→図11-10参照


この過程は
◦ 1つのピクセルのストリームを受け入れる
◦ 配列B,Cに2つのスキャンラインをキャッシュする
◦ オリジナルの例と似た循環バッファ技術を用いることで3つの
出力ストリームを生成する。
※スキャンライン:ディスプレイの走査線、画像の横1列
⇒同じ配列への不要なアクセスを避けることで、それぞ
れの列の出力の待ち時間を2クロックにできる。



このパイプラインで最も大切な過程はフィルタ自身。
これは図11-11におけるfiltter_runで表される。
この過程はprep_runプロセスによって生成された
3つのピクセルのストリームを受け入れ、オリジナルの
アルゴリズムと同様の畳み込みを行う。
この畳み込みにおいて、多数のステートメントレベル
の最適化は入力処理の繰り返し回数を減らすことに
繋がる。

オリジナルの手法で行われたように、隣接するピクセルは
配列から呼び出されること無く、ローカル変数
p01,p02,p03等に格納される。
◦ これにより、1つの配列に同時にアクセスをする必要がなくなる。
◦ 1つの配列に同時にアクセスをしてしまうと、オプティマイザが単一
のステージにて複数の計算を同時に行うことが妨げられる。

水平、垂直、斜め方向における座標の違いの計算は、よ
り単純で並列化が可能な計算に置き換えられる。
◦ これにより、abs(絶対値)機能やマクロの必要性をなくせる。
◦ この場合、中心のピクセルは繰り返し周辺のピクセルと比較さ
れ、平均差が得られる。


これらの変化によって、僅か2クロックのスループット
率のエッジ検出アルゴリズムが実現される。
もちろん、この計算は他のタイプの畳み込みを行う様
に必要に応じて修正できる。




from_streamは、先の図11-9述べられたto_stream処
理と反対の機能を提供する。
この処理では、入力ピクセルの単一ストリームを読み込み、
それに続いて列を読み込み、
co_memory_writeblockによって出力メモリに書き込まれ
る。
またこの処理では、ストリームから読み込まれ、メモリに置
かれたバイトの並びを入れ替えることで、使用される画像形
式を反映する。(この場合はTIFF形式)
このストリームからメモリまでの処理,from_streamを図
11-12で示す。

11.4で述べたこれら4つのプロセス、対応するスト
リーム、メモリ、および信号宣言は、Impulse Cによっ
て記述され、図11-13に示される構成機能によって
相互接続される。

この構成機能は、以下に示すような機能を持っている。

startsigとdonesigのための信号宣言。
◦ Startsigがイメージバッファが処理の準備ができていることを
示すのに対し、Donesigはイメージのフィルタリングが完了し
たことを示す。
◦ これらの信号は、ソフトウェアテストベンチとイメージフィルタ
ハードウェアの間の共有メモリ(イメージバッファ)の使用を調
整するのに使われる。
ピクセルストリームの入出力とprep_runから
filter_runに接続する3つのストリームのためのスト
リーム宣言
 Shrmemのためのメモリ宣言。

◦ このメモリはイメージバッファを表す。

4つの必須ハードウェアプロセスと1つの追加ソフトウェアのテ
ストベンチ処理、cpu_procのためのプロセス宣言。
◦ このソフトウェアのテストベンチ処理はAppendix Eに
記載されている。

2つの信号startsigとdonesigのためのco_signal_createの
呼び出し。

メモリshrmemのためのco_memory_createの呼び出し。
◦ メモリは、この例で扱うAlteraプラットホームに対応した位置heapOに
作成される。
◦ heap0は専用ハードウェアとしてFPGA上で作用しているプロセッサと
イメージフィルタにアクセスできるオンチップメモリを表す。
 プロセッサには、ソフトウェアのテストベンチが置かれる

入力ストリーム、出力ストリーム、3つの中間的ストリームから成る5
つのストリームのためのco_stream_createの呼び出し。
◦ 3つの中間ストリームが深さ4のストリームを与えられているの対して、入力お
よび出力ストリームの深さは、画像のスキャンラインの半分の数である。
◦ この処理は、メモリ読み書き時間が予想以上に長くなることによるストールを
軽減するために行われる。
◦ しかし、この様に深いストリームバッファはハードウェア資源において相当な負
担となることに気をつける。

4つのハードウェアプロセスと1つのソフトウェアテストベンチプロセス
のためのCo_process_createの呼び出し。

4つのハードウェアプロセスのためのco_process_configの呼び出
し。
◦ これらの4つのプロセスが、ハードウェアブロックとしてFPGAにコンパイルされ
る。