• 検索結果がありません。

でが前処理関数であり, 21行目以下の Calculate2Dが画像処理関数である Calculate2D  では,

6 4 0  x  480

画 素 の カ ラ ー 画 像 仁 後 段 の

PC

からのフィード、パックを入力として,画 像平面上のマーカの 2次元位置を計算し,その座標を出力している.具体的には, 23, 24  行目で、受信ノくッファ中のデータ位置へのポインタ,

2 6

, 

27

行自で、送信ノくッファ 中の書き込 み位置へのポインタ, 28行目で、受信ノくッファ中のフィード、バックデータ位置へのポインタ をそれぞれ取得し,

2 9

, 

3 0

行目でユーザ引数を読み込んでいる

.そして

,背景差分を行っ た後,差分後の画像とフィード、バックデータを入力として,マーカの

2

次元座標位置を計 けしている

.

1  #include  <fstren.h>

2  #include  <rpv.h> 

3 4  struct ReadBackgroundArg {  5  char* filenarne; 

6  RPV̲RGB24<IMAGE̲WIDTH,IMAGE̲HEIGHT> background; 

7  ReadBackgroundArg(cons char s); 

8  }; 

10  void* ReadBackground(void*  a9  )  11  { 

12  13 14  15  16 17  18  19  }  20 

ReadBackgroundArg*  arg (ReadBackgroundArg*)a; 

ifsrearn fs(arg‑>filenarne); 

arg‑>background.Read(fs); 

fs. close () ;  reurn NULL; 

21  void* Calculae2D(cons RPV̲Inpu七*id, RPV̲Oupu七*od, const  RPV̲Ainpu七*

aid, void*  a)  22  { 

23  24  25  26  27  28  29  30 31  32  33  34 35  36  37  38  39 40  41  }  42 

const  RPV̲RGB24<IMAGE̲WIDTH,IMAGE̲HEIGHT>*  i̲daa

(const  RPV̲RGB24<IMAGE̲WIDTH,IMAGE̲HEIGHT>*)id>daa̲ptr[OJ [OJ ;  Positions2D<MARKER NUM>* daa

(Posiions2D<MARKER̲NUM>*)od‑>data̲pr[OJ ;  cons Positions3D<MARKER NUM>*  a daa

(cons Posiions3D<MARKER̲NUM>*)ad‑>daa̲pr[OJ [OJ ;  cons RPV̲RGB24<IMAGE̲WIDTH,IMAGE̲HEIGHT>* background  (RPV̲RGB24<IMAGE̲WIDTH,IMAGE̲HEIGHT>*)a; 

RPV̲RGB24<IMAGE̲WIDTH

IMAGE̲HEIGHT>*  sub̲daa

RPV̲Subracion(i̲daa,background); 

//  Searching for markers fromhe subracted image  // using previous 3D posiions of markers 

// for robustness  agains occlusion.

SearchMarker(sub̲data, a̲data, o̲data); 

reurn NULL; 

5 . 1 0 :

プログラム例

(C a l c u l a t e 2D )

さまざまな並列処理を実現できる記述力

PC

を単位とした並列化については,

1 . 4

節で述べた並列手法すべてを記述すること ができる

.

これらから,

RPV

は実時間並列画像処理プログラミングツールとしては高い能力を持って いることが分かる

.

今後の課題としては

,まず

4.7節で述べたような複数の

C P U

を塔載した

P C

への対応が 送げられる

.現在の RPV

では

, PC

とデータ処理タスクが

1

1

で対応するしなければな らな

いので ,複数の CPU

を塔載した

PC

でも

1

個の

C PU

しかデータ処理を行うことがで

cない

.また ,二つ目の課題として ,負荷分散の問題が挙げられる .現在の RPV

では,各

PC

へのデータ処理タスクの害IJり振りをアプリケーションプログラマが行うことで静的負 荷分散を行っている.しかし

,各 P C

でのデータ処理の負荷や

PC

問のデータ転送の負侍 を正確に見積ることは難しく,アプリケーションプログラマの試行錯誤によって負何分散 が適切になるようにデータ処理タスクの害IJり振りを行うことになる

.

さらに

,複数の C PU

を塔載した

PC

に対応すると負荷分散がより複雑になり

アプリケーションプログラマの 負担がさらに増してしまう

.

これらの課題を解決する方法としては アプリケーションプ ログラマは

PC

ではなく

,仮想的な分散並列要素 ( D i s t r i b u t e dCompon e n t : D C )

上でデータ 処理タスクを実行するシステムを作成し

, DC

PC

に害IJり当てることによってデータ処 理タスクを各

PC

に配置する

.複数の DC

1

台の

PC

に割り当てることによって,複数 の

CPU

を塔載した

PC

を有効に利用したり

,負荷が 小

さいタスクをまとめたりすることが できる

.また ,一つの DC

を複数の

PC

に害IJり当てることによって

,データ並列処Jfp'を行

うことができる.このとき,負荷分散が最適になるように

PC

DC

の割り当てをど

l r

~)J 的 に行うツーノレを提供で、きれば,アプリケーションプログラマの負担が軽減される.このよ うな方法が可能であるのは,データ処理タスクはデータ処理アルゴリズムのみを記述した ものであり

,データ通信とは独立に記述されているので ,データ処理タスクを PC

に配汽 するときにデータ通信のことを考慮、しなくてもよし

¥

からである.

一つ目の課題として

,データ並列処理方式の拡張が挙げられる

.木研究で実現したデー タ並列処理方式は一つのフレーム内で分割したデータを単位として並列化する空間ノブ向の データ並列処理方式である.この他に

フレームを単位として並列化する時間万向のデー タ並列処理方式が考えられる.例えば図

5 . 1 1

のように

, 1

フレーム目は

PC1

が,

2

フレー ム目は

PC2

が,

3

フレーム目は

PC3

が,

4

フレーム目はまた

P C 1

が処理するという並列

123,4,56,… 

5 . 1

1:時 間 方 向 の デ ー タ 並 列 処 理

FSS 

PC1 

  l 1

L t  

‑ t  

PC2 

PC3  3 

~

5 . 1 2 :

時間方向のデータ並列処理時のデータ処理のタイムテープ、ノレ

化である 現在の

RPV

ではこのデータ並列処理方式を実現することはできない.なぜ戸、

ら,すべてのデータ処理とデータ転送が

FSS

のタイミングによって

1

フレーム時間を基準 として行われているので,このデータ並列処理方式のように複数フレーム時間(この例で は

3

フレーム時間)にまたがるようなデータ処理に対応できなし1からである.この課題は 以下の機能拡張によって解決できる.

一つのストリームのデータをフレームごとに複数の

PC

に振り分ける機能を

DSM

に 追加すること

複数の

PC

からのデータを一つのス トリームにまとめる機能を

DRM

に追加すること

• FSS

を複数の

PC

にフレームごとに振り分ける機能を

FSM

に追加すること

複数の

PC

からの

FSS

を一連の

FSS

にまとめる機能を

FSM

に追加すること

このデータ並列処理方式を指定できるようにコネクションファイルの仕様を拡張する こと

これにより,上の例では,

PC

 ,l

PC2

, 

PC3

には

3

フレームに

1

回だけ

FSS

が到着し,そ れに合わせて同期をとることで,図

5 . 1 2

に示すタイムテーブノレのように

DPM

上のデータ 処理が実行される

.

第 6 章

関連したドキュメント