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

デ ータとタスク 並列に対する公認拡張

近代的な 並列マシンは 、多数のプ ロセッサが 、それぞれ 自分のデ ータのみをア クセ スし て 処 理を 行った場合に 、最高の性能に 達する 。それ ゆえ 、最高性能のプ ログ ラムは 、計算の分割 とデ ータのマッピングが 協調的に機能することによって得られ る。3つの公認拡張は 、この調 和を 引き出す手段を与える。

1.ON指示文は 、並列マシン のプ ロセッサ間で 計算を 分割する(DISTRIBUTE指示文がプ ロ セッサ間でデ ータを 分割するのと同じ ように)。

2.RESIDENT指示文は 、あるデ ータのアクセスを行な うのに 、実装においてプ ロセッサ間の

デ ータの 移動が 必要ないと いうことを表明する。

3.TASKREGION構造は 、それぞれがデ ータ並列(または 入れ 子になったタスク並列)に 実行 できる 、独立し た粗粒度タスクを生成する手段を提供する。

3つの構文は 、この後の9.1節で紹介する活動プ ロセッサの概念に 関連し ている。プ ロセッサ に計算を割り当てることにより、ON指示文(9.2節)は活動プ ロセッサを 定義する。RESIDENT

指示文( 9.3節)は 、そのローカリテ ィの表明に おいて 、この活動プ ロセッサの 集合と 、マッ ピング の指示文によって与えられた情報を使用する。最後に 、TASKREGION構造(9.4節)は 、 活動プ ロセッサ集合からそのタスクを生成する。

9.1 活動プ ロセッサ集合

活動プ ロセッサは 、HPF2.0で使用され る、プ ロセッサとプ ロセッサ構成の考え方の拡張であ る。HPF2.0は 、プ ロセッサの(静的な)集合が 存在すると 仮定し 、プ ログ ラムは 、デ ータの 配置(たとえば 、DISTRIBUTE指示文を 通し て)と計算の実行(たとえば 、FORALL文の実行に よって) のためにこれら のプ ロセッサを 使用する 。プ ロセッサ集合をさらに 分割することに ついてはほとんど 述べられていないが 、それらが 役立つ場合もあ る(例えば 、8.7節の公認拡 張に おけ るプ ロセッサ部分集合へのマッピング や 、部分配列に 対する計算の性能の説明)。タ スク並列のような機能では 、プ ロセッサのより動的な集合を考えることを必要とする。特に 、

「ど のプ ロセッサが 現在実行中か 」という質問に答えるには 、これらの機能を定義することが 重要である。

簡単に言うと 、活動プ ロセッサとは 、HPFの文(または文の集合)を実行するプ ロセッサ である。活動プ ロセッサは 、その 文を実行するのに 必要な 全ての操作を 行な う。ただし 、(お そら くは)デ ータへの最初のアクセスと結果の出力は除く。 この後で説明するように 、ある種 の操作は 、特定のプ ロセッサが 活動状態であることを 要求するが 、ほとんど の部分では 、任 意の文の実行において 、任意のプ ロセッサが 活動状態になることができる。HPFプ ログ ラム の実行開始時には 、全てのプ ロセッサが 活動状態であ る。9.2節で 述べ るよ うに 、ON指示文 は 、その スコープ 中の文の実行に おけ る活動プ ロセッサ集合を 限定する。次の単純な例を 考

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

えてみる(これは 直感的な 意味を 持つと 言える)。

!HPF$ ON HOME( Z(INDX) )

X(INDX-1) = X(INDX-1) + Y(INDX) * Z(INDX+1)

X、Y、およびZは 同じ 分散で 、それは 複製ではないとし ておく。ON指示文に 従うと 、こ の文は 次のように 実行され るだ ろう。

1.Z(INDX)を所有するプ ロセッサは 活動プ ロセッサとなる。このONブ ロックの異なる実行 においては 、これは 異なるプ ロセッサかもしれない 。

2.X(INDX-1)、Y(INDX)、Z(INDX+1)の 値が 、活動プ ロセッサに と って 利用可能となされ る。分散が 同一のため 、Y(INDX)は すでにそこに 置かれている 。その 他の値を 得るため には 、デ ータの 分散や 、プ ログ ラムを 実行し ているハード ウェア次第で 、活動プ ロセッ サが メモ リからレ ジ スタに ロード することにな るかも知れないし 、あるいは1個か2個 の他のプ ロセッサが 活動プ ロセッサに メッセージを 送ることにな るかも知れない。

3.活動プ ロセッサは 前の ステップ で送られた値を 使用し て 加算と乗算を 実行する。

4.結果はX(INDX-1)に 保存され るが 、これは 他のプ ロセッサ上かもしれない。これにはや はり、同期操作や 、他のプ ロセッサ間操作を必要とするかもし れない。

文の 一つが 関数または サブ ル ーチン 呼出し を 含むとき 、この機構は 微妙な 問題を 含む 。

9.2.4項でこれらのケースを扱う。ON指示文の実装に 関する助言は 、この後の9.2.2項で与え られ る。

活動プ ロセッサの概念と 関連し て 、用語を 少し 追加し ておくと便利である。もし 集合の すべてのプ ロセッサが 活動状態なら 、その集合は 活動プ ロセッサ集合と 呼ばれ る。すべての 活動プ ロセッサの 集合は 時々その(the)活動プ ロセッサ集合と呼ばれ る。この集合は 動的で 、 もし 文が 繰り返し 実行され るならその活動プ ロセッサ集合は 毎回異なっているかもしれない。

一般に 、HPF構文は 活動プ ロセッサ集合を縮小できるだけであって 、拡張はできない。し か し ながら 、元の活動プ ロセッサ集合が いくつかの独立な 集合に 分割され るなら 、すべての分 割された集合が 同時に 実行するかもし れない。これは まさに 、TASKREGION構文(9.4節で 記 述)の機能である。

全体プ ロセッサ集合はHPFプ ログ ラムで 利用可能なすべてのプ ロセッサの 集合である。

これは 、主プ ログ ラムの実行が 始まるときに 活動状態であるプ ロセッサの 集合と 正確に 同じ である。

活動プ ロセッサ集合中にないプ ロセッサは休止状態にあると 呼ばれ る。(プ ロセッサは 一 つの 文に 関し て 休止状態であっても 、ほかの文に 関し て 活動状態かも知れないとい うことに 注意され たい 。これは 、TASK REGION構文の中では 一般的である。)

活動プ ロセッサ集合の特性について問い合わせることが 必要な場合もある。これは 、12.1

節で 記述し ている公認拡張の 組込み 関数ACTIVENUM PROCSとACTIVE PROCS SHAPEに よっ て達成され る。

プ ロセッサにマップ されたデ ータはその上にレジデント (resident)であるといわれ る。複 製され た実体はそのコピ ーを 持つすべてのプ ロセッサの 上でレジデントである。

【 仕様の根拠 】 活動プ ロセッサ集合の縮小のみを 許すことは 、最初は 奇妙に 思うかも し れない。し かし ながら 、HPFの設計に おいてはすべてのプ ロセッサは 実行の最初で

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

利用可能であると仮定する。たとえば 、DISTRIBUTEの実装にはプ ロセッサの数(ブ ロッ クサ イズを 決定するためなど)とその識別子(メモリを 割り当てて 、デ ータの移動を 行 うため)に ついての情報を必要とする。それゆえに 、実行モデルは 動的に 分割と再結合 のできるプ ロセッサの静的な集合を 使用する。【 以上 】

9.1.1 SUBSET指示文

この項では 、活動状態または 休止状態のプ ロセッサ集合と 、明示的に マップ され たデ ータと の関係に ついて 説明する 。大雑把に い うと 、メモリの割付けは 、ローカルに 行わなければ な らないと い うことである。すなわ ち 、もしプ ロセッサが 配列の一部を 保持するなら 、そのプ ロセッサは 配列が 生成され たときに 活動状態でなければ ならない 。この規則は 、以下のこと を包含し ている:

局所的な実体は 、副プ ログラムが 呼び 出され たとき又はそれらが 割り付けられたときの ど ちらかに 、活動プ ロセッサ集合の上に 保持され なければ ならない。

仮引数は 常に 活動プ ロセッサの集合に マップ され る。9.2.4節でこれを 保証する メカニ ズ ムを 説明する。

大域的な実体(すなわち、COMMONまたはMODULE中の実体 、親子結合によって参照可能 になった実体)は 休止状態のプ ロセッサに 明示的に マップし てもか まわない 。し かし 、 大域的な実体が 割り付けられ るとき 、すなわち 、(全てのプ ロセッサが 活動状態である)

プ ログ ラムの開始時 、または 他の副プ ログ ラムへの入口 、またはALLOCATE文の実行の 時点に おいて 、それらのプ ロセッサは 活動状態でなければ ならない。

局所的な実体と大域的な実体の扱いから 、宣言が 、2つの クラスのプ ロセッサ構成を参照 することが あり得るとい うことが 明らかにな る。一つ目は 、全体プ ロセッサ集合から 構成さ れ 、主に 大域的なデ ータの宣言に用いられ る。これは 、全体プ ロセッサ構成とし て知られてい る。これらは 常に 同じプ ロセッサを 表すので 、参照の固定的な 枠とし て 振舞い 、矛盾の無い 宣言が 行なえる。proessors-diretive(規則H329)はデフォルトで全体プ ロセッサ構成を定義

する。活動プ ロセッサに 適用するために 、3.6節の規則に 二つのわずかな変更が 必要とな る: * HPFコンパ イラには 、スカラであるか 、または 大きさ(すなわ ち 、配列の次元の積)が

全体プ ロセッサ集合の大きさと 同じ であるようなど んな全体プ ロセッサ構成でも受け入 れ ることが 要求され る。

もし 二つの全体プ ロセッサ構成が 同じ 形状を持つなら 、二つの構成の対応する要素は同 じ 抽象プ ロセッサを 指すものと 理解され る。

ど ちらの場合も 、変更は「 全体 」とい う言葉の追加だけである。

限定されたプ ロセッサ構成は 、構成が 宣言され るときにおいて活動状態にあるプ ロセッサ だけを表す。それらは 、局所的な実体と仮引数をマップ するために使われ る。部分(subset)プ ロセッサ構成を 宣言するには 、146ページで定義され たombined-attribute-extended (H801)

のSUBSETオプ ション を 使用できる 。あ るいはSUBSET属性の形 式の 文を 使用することもで きる 。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

以下は 二つの 形式の例である。

!HPF$ PROCESSORS, SUBSET :: P(NP/4,4)

!HPF$ PROCESSORS Q(ACTIVE_NUM_PROCS())

!HPF$ SUBSET Q

全体プ ロセッサ構成の場合と 同様に 、部分プ ロセッサ構成を 使用するためのいくつかの 修正され た規則が ある:

HPFコン パ イラには 、スカラであるか 、または 大きさが 活動プ ロセッサの 数 、すなわ ちACTIVE NUM PROCS()の呼出しによって返され るであろう数字と同じ であるど んな部 分プ ロセッサ構成も受け 入れ ることが 要求され る。

もし 二つの部分プ ロセッサ構成が 同じ 形状で宣言され 、その活動プ ロセッサ集合がそれ らの宣言の間で変更されないならば 、二つの構成の対応する要素は 同じ 抽象プ ロセッサ を 指すものと理解され る。

スカラの部分プ ロセッサ構成は 、その構成が 作られ たときに 活動状態にあるプ ロセッサ の一つを 表すとみなされ るとい うことは 重要である。

部分プ ロセッサ構成が 、NUMBEROF PROCESSORS()より少ない要素を 持つことが 許され るということに 注意され たい 。これは 活動プ ロセッサ集合が 縮小できるということを反映し ている 。二つの 部分プ ロセッサ構成が 同じ であるとみなされ るために 条件が 追加されたこと にも注意され たい 。これは 活動プ ロセッサ集合の動的な 特性を 反映する 。最後に 、局所的な 部分プ ロセッサ構成は 、活動プ ロセッサ集合がON指示文に よってさらに 縮小され るまでは 、 活動プ ロセッサの 集合を構成し たものであるということに 注意されたい。

9.1.2 局所的な実体と仮引数のマッピ ング

SAVE属性のない局所的な 実体の明示的なマッピングでは 、実体の全ての要素が 活動プ ロセッ サ上に マップ され るように 宣言されなければ ならない。この要求は いくつか の場合に 分けれ られ る。

局所的な実体がDISTRIBUTE指示文を通し てマップ され る場合 、それは活動プ ロセッサ の集合の上に 分散されなければ ならない。一つの(しかし 唯一ではない )方法は 、局所 的な部分プ ロセッサ構成をdist-targetとし て使うことである。もし 、明示的なONTO節 がないなら 、その実装は 、dist-targetとし て活動プ ロセッサのど んな構成を選ぶことも できる。

局所的な 、大きさ1の全体プ ロセッサ構成は 、常に 活動プ ロセッサであると 判定され 、 局所的な実体のためのdist-targetとし て 現れてもか まわない。

局所的な 実体がALIGN指示文に よって マップ され る場合 、最終整列先の対応する要素 は 、活動プ ロセッサの上だけに分散されていなければ ならない。これはもし 最終整列先 の全体が 活動プ ロセッサの上に分散されているならば 確実に起こる。それはもし 局所実

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48