並列分散ソフトウェア 電子・情報工学系 新城 靖 <yas@is.tsukuba.ac.jp>
このページは、次の URL にあります。
http://www.hlla.is.tsukuba.ac.jp/~yas/sie/pdsoft-2003/2003-12-11
あるいは、次のページから手繰っていくこともできます。
http://www.hlla.is.tsukuba.ac.jp/~yas/sie/
http://www.is.tsukuba.ac.jp/~yas/index-j.html
http://www.hlla.is.tsukuba.ac.jp/~yas/index-j.html
("primes", 2, 1 ) // primes[2] = 1 ; ("primes", 3, 1 ) // primes[3] = 1 ; ("primes", 4, 0 ) // primes[4] = 0 ; ("primes", 5, 1 ) // primes[5] = 1 ; ("primes", 6, 0 ) // primes[6] = 0 ; ("primes", 7, 1 ) // primes[6] = 1 ; ..
プログラム
利点
問題点
while( 1 ) { in("next task", start ); out("next task", start + GRAIN); start から start + GRAIN の間の素数を探す; }
("primes", 0, 2, 4 ) // primes[0] = 2 ; p2[0] = 4 ; ("primes", 1, 3, 9 ) // primes[1] = 3 ; p2[1] = 9 ; ("primes", 2, 5, 25 ) // primes[2] = 5 ; p2[2] = 25 ; ("primes", 3, 7, 49 ) // primes[3] = 7 ; p2[3] = 49 ;
("result", start, 1番目の固まり) ("result", start+GRAIN, 2番目の固まり) ("result", start+GRAIN*3, 3番目の固まり) ("result", start+GRAIN*4, 4番目の固まり)各「固まり」は、配列で、最後に終り -1 が入っている。 マスタは、この ("result",,) のストリームを読込み、("primes",,,) のスト リームを作る。
プログラム
source | pipe_seg-3 | pipe_seg-5 | pipe_seg-7 | .... | sink
("seg", 宛先, ストリームのインデックス, 整数)たとえば、source の出力(主に pipe_seg-3の入力)は、次のようになる。
("seg", 3, 0, 5 ) // sink が in ("seg", 3, 1, 7 ) // 以下 pipe_seg-3 が in する ("seg", 3, 2, 9 ) ("seg", 3, 3, 11 ) ("seg", 3, 3, 13 ) ...pipe_seg-3 の出力は、次のようになる。
("seg", 5, 0, 7 ) // sink が in する ("seg", 5, 1, 11 ) // 以下 pipe_seg-5 が in する ("seg", 5, 2, 13 ) ...最終的には、次のようなデータがタプルスペースに残される。
("source", 1, 2) ("pipe seg", 2, 3) ("pipe seg", 3, 5) ("pipe seg", 4, 7) ... ("sink", MaxIndex, MaxPrime)プログラム
この方法は、結果並列や手順並列法よりも、並列性が低い。