Next:
Up:
Previous:
ABCL/f は, 大規模な並列計算機, 特に現状で多く普及している分散記憶型の
並列計算機で高効率に動作することを目標として設計された言語である. 目標
とする効率は, 特に逐次実行効率がC/C++と同等の速度でおこなわれ, さらに
それに, 非常に高速な並列プリミティブ(タスク生成および同期)が加わる, と
いうものである. より具体的には, 逐次のオーバーヘッドが, 自然に書かれた
C/C++に比べて数十% 程度であり, ローカルなタスク生成は関数呼び出し1回
程度のオーバーヘッドしか要さない, というもので, これはおおむね実現され
ている. 一方で, 分散記憶環境で避けて通れないデータ/タスク配置, および
通信粒度の問題に関しては, 言語設計のレベルで, 明確なdefault規則および
それを無効化する表記を与え, プログラマが手で性能向上させる機会を奪わな
いことを目標とした. この点に関しては他の, より高い理想をかがけた野心的
な研究と比べると, ABCL/f は消極的な態度をとっているが, これらを自動化
する技術は開発されていないため, 現状ではこのようにするのが実用的である
と判断したからである. たとえば, データの配置はオブジェクト単位, タスク
の配置は関数呼び出し単位で指定でき, またリストなどの(オブジェクトでな
い)データは, 遠隔呼出時には全てコピーされ, データを受けとる側ではひと
たび呼び出しが起こってしまえば全ての要素が届いていることが保証されてい
る. このことによって処理系は, リストの要素一つ一つに対してデータがロー
カルに存在するかの検査を入れたりすることはなく, プログラマもそのことを
意識した通信のaggregation (一括化)が行なえる様になる.
以上のような効率目標を達成するためにABCL/f の設計において具体的にとら
れた設計方針は以下のようなものである.
- 非同期呼び出しのサポート
- ABCL/f においては, 任意のユーザ関数/
メソッドはfuture呼びだし, 逐次的な呼びだしのいずれの形でも呼び出せる.
プログラマは必要に応じてある呼び出しを(定義をかえることなく)futureにし
たりしなかったりすることができるようになる.
- 並列オブジェクトのサポート:
- 並列オブジェクトには二つの機能があっ
て, 一つは「分散透明にアクセスできるデータ」, もう一つが, 「複数スレッ
ドによる更新を安全に行なうことができるデータ」, のふたつである. オブジェ
クトにメソッドを定義すれば, プログラマは, オブジェクトがどのプロセッサ
にあろうと, メソッド呼出によってオブジェクトにアクセスできる(分散透明
性). そして, プログラマは他のスレッドの存在を気にすることなく,
consistentな, それもメソッド内では変化しない, オブジェクトの状態を見る
ことができる. これは実装上は必要な箇所に排他制御用のコードをはさむこと
によって実装されるが, そのために煩わしいデッドロックが生ずることがある.
ABCL/f はこの点に関して通常の並列オブジェクト指向言語よりも柔軟なモデ
ルを提供しており, この点について
2.2節で述べている.
- immutable dataの区別:
- 言語に現れるオブジェクト全てを並列オブジェ
クトとしてしまえば, 設計上は単純で美しい言語が得られるが, 実装上の
penaltyは大きい. 上述の参照透明性や, オブジェクトが更新可能であること
などによって, メソッド呼び出しにはオブジェクトの位置検査や, 更新時のロッ
クなどが必要になることがある. これは通常逐次言語で行なわれているデータ
の参照に比べるとはるかに高価な方法で, 我々は妥協をして, 常にローカルで
あることが保証されているデータ型, およびそれを定義する方法
(
deftype
)を導入することにした. いくつかの組み込み型(整数や論理
値など)とdeftype
を用いて定義されたユーザデータ型は, 更新不可能
であり, さらにオブジェクトのidentityをもたないものとされる(もちろんこ
のようなデータが要素として並列オブジェクトへの参照を持つことは可能であ
る). それによって処理系はこのようなデータを他のプロセッサへ渡す時は,
そこからたどれる全てを, もともとあったsharing関係などを気にせずにコピー
してよくなる. 結果としてそのようなデータへのアクセスは通常の逐次言語に
おけるレコードの参照と全く同様のコストで実現できる.
- 明示的なtask/オブジェクト配置のサポート:
- 各関数呼びだしは, 明
示的にそれを起動するプロセッサを指定することができる. 引数や返り値の通
信は全て処理系が行なう. また, 各オブジェクト生成式に, それを起動するプ
ロセッサを指定することで, オブジェクトの配置を一つずつコントロールでき
る.
- C/C++関数との容易な相互作用:
- 既存のC/C++ライブラリを呼び出した
り, 特定箇所をtuningするために, ABCL/f はC/C++関数呼びだしのための簡単
なinterfaceを用意している. C/C++関数は簡単な制限を守れば任意のC/C++関
数で良く, 自由にオブジェクトを生成したり, ABCL/f オブジェクトへのポイ
ンタを格納したりして良い. そのようにしても全体がABCL/f のメモリ管理機
構によってきちんと管理される.
もっとも短くいえば, ABCL/f は静的に型付けされた通常の逐次手続き型言語
に, 手続きを非同期に呼ぶ方法, と並列オブジェクトを付け加えたものである.
以下では, ABCL/f が提供する並列オブジェクトモデルとその実装について詳
しく説明する.
Mitsubishi Research Institute,Inc.
Mon Feb 24 19:24:01 JST 1997