25
dklic: KL1 ににににに KL1 ににに ににににに ににににに にににに , にににに

dklic: KL1 による分散 KL1 言語処理系の実装

  • Upload
    becka

  • View
    48

  • Download
    5

Embed Size (px)

DESCRIPTION

dklic: KL1 による分散 KL1 言語処理系の実装. 早稲田大学 高木祐介 , 上田和紀. 並行論理プログラミング言語 (並行制約プログラミング言語). Object-based な微粒度並行言語 GHC (1985) → KL1 on KLIC (1990’s) and many others (Strand, Oz, …) 特徴: 論理変数の表現力 ストリームを用いた非同期メッセージ送信 未完成(返信箱つき)メッセージ 局所チャネルの動的生成と移送 (cf. π 計算 (1989)) 送受信される情報の形態 = (等号)制約 - PowerPoint PPT Presentation

Citation preview

dklic: KL1 による分散 KL1 言語処理系の実装

早稲田大学高木祐介 , 上田和紀

並行論理プログラミング言語(並行制約プログラミング言語)

• Object-based な微粒度並行言語– GHC (1985) → KL1 on KLIC (1990’s)

– and many others (Strand, Oz, …)

• 特徴: 論理変数の表現力– ストリームを用いた非同期メッセージ送信– 未完成(返信箱つき)メッセージ– 局所チャネルの動的生成と移送 (cf. π 計算 (198

9))

• 送受信される情報の形態 = (等号)制約– 例:  X=2001, L0=[pop(Y)|L]  

プログラミング・イディオム• 並行オブジェクト

– 動的生成– 繰返し– オブジェクトの状態– Object identity     

         • 通信路

– メッセージ– 返信箱– 同期・受信– 送信– Channel mobility

= ゴール(のマルチ集合)= ゴールの起動= 末尾再帰= ゴールの引数ベクトル= ゴールのインタフェースであ

る非局所論理変数= ストリーム(=リスト)

= ストリームの要素= メッセージの引数= Ask (制約の観測)= Tell (制約の放出)= ストリームの動的生成と送受

KL1 の計算モデル

• 動的プロセス生成+動的ネットワーク構成• プログラムは節(書換え規則)の集合

節:  Head :- Guard |   Body .  (テンプレート) (付帯条件)  (生成ゴール群)

GoalGoalGoal

ゴール群 Goal

Goal

末尾再帰

通信路

なぜ KL1 ベースの分散処理か?

• 単純な言語である– 安全性や正当性の検証を伴う分散プログラミング

を最終目標としている

• 論理変数– ポインタ概念の隠蔽

• 安全性• 局所的な実体と分散された実体の意味が完全に同一

– 実装の自由度• データの複製 (replication) が自由

– Update in place による最適化が可能• 参照数解析 (linearity analysis)

dklic = KLIC+API

• KLIC (http://www.klic.org/)– KL1-to-C translator + runtime system– 記号処理言語としては良好な性能 – PVM に基づく分散メモリ並列処理系

• 同一アーキテクチャの PE をまたがる論理変数の分散実装

– 分散機能は Unix ソケットのみ• dklic ではソケットを隠蔽

dklic の目標

• ネットワーク透過な分散計算環境の実現• 分散実行系によって遠隔ノードに計算依頼

– 遠隔述語呼出し( cf. Java RMI )– 述語移送( cf. Java クラスローダ)– サービス検索( cf. ORB, Jini )

serverclient

Distributed Runtime System

Streamrequest

dklic が前提とする分散環境

• ノード– 固有の計算空間を持ったプロセス– アーキテクチャは不特定

• ノード間接続– 各ノードは通信データの損失や追越しのな

い通信路で接続されている( cf. TCP/IP, SSL )

• ノードの把握– ノード数は不定で、動的に増減する– 順序付けはできず、識別のみができる

dklic 処理系の構成• 100% KL1 による単純な実装

– ノード実行系は KLIC 任せ– 実行系は約 400 行(第 1 版は 1600 行)

• 遠隔述語呼出しを実現• 述語移送( 140 行)とサービス検索は試作あり

KLIC runtime, dklic runtime, user program /bin

dklic runtime /KL1 user program /KL1

KLIC compiler

dklic による遠隔述語呼出しの例

• ping + pingd 逐次部分 29 行、分散化 5 行main(R) :- R=normal(O) |

unix:argv([Host | _]),% pingd:pingd(Ts) @node(Host),remote:call(pingd:pingd(Ts), Host),O = [fwrite(Host), fwrite(": pinging.\n") | O1],putt(0, 0, Ts, O1).

遠隔述語呼出しの仕組み

Ts=[T|Ts1]

KLICruntime

KLICruntime

ping

pingd(Ts)stub

pingd

skeleton

ノード毎に1個

分散論理変数とは

X1

X0

X2 X0

X1

X2

異なるノードの論理変数を対応付けて同じ実体とする。

分散論理変数の実装方針• 分散論理変数の用途

○ メッセージ通信• 送信したデータは原則として読まれる• 1対1、プッシュ型が基本

△ (大きな)データの共有• 1対多、プル型が基本• プル要求は( KL1 では)感知できない• プル型では分散GCが重要• データサーバを要求駆動型に記述すれば,プッシュ型で

プル型などさまざまな配送ポリシーが実現可能

• dklic では1対1、プッシュ型を基本に– cf. 並列 KLIC  (プル型)、 Distributed Oz  (1

対多)

変数表を用いた分散論理変数の実現

• 変数表– ID を用いて別ノードの内部変数どうしを対応付

け– (スタブ、スケルトンの子)の対ごとに1対

• 分散論理変数に対する操作– 生成:  変数表エントリの対の作成– 具体化: 単一化ゴールの送信 (分散単一化)– ノード内は KLIC 実行系任せ

• 参照の輸出入– ID の重複を避けてノード別の輸出 ID 空間

論理変数の輸出入

X0

X

輸出側が ID を発行

_0X0

_0

pingd(_0)ソケット

分散論理変数の単一化

[0,X1|X2]=X0X0

_0=[0,_2|_4] =[0,X1|X2]

=00=

[2,X3|X4]=

_2=0

_0_2

X1

_0_2 X1_4

X2

_4X2

分散論理変数の削除

• 削除しないと– 変数表は単調増加する– 内部変数が参照され続け、GCされない

• プッシュ型なので具体化と同時に削除可能

• ID の再利用– 使用済み ID を発行ノードに返却する– 発行側が具体化するなら即時再利用可能

分散変数管理の最適化

[0,X1|X2]=X0Y0

_0=[0,_2|_0]

_2=0

_0 _0

X1_2

0= Y1_2

=0

=[0,Y1|Y2]

X2 Y2

第三者による中継

Node0

agent(X,0),client(X)

Node1

agent(X,1)

Node2

agent(X,2)

間接参照を輸出

X

輸出X

X直接参照

agent(X,N) :- (condition) | agent(X,N+1)@node(N+1).

第三者による中継の排除

• KL1 による実装では,第三者による中継を排除できない– 未定義変数どうしの同一性を検査できない

• p(X,X) :- true | …– 変数への参照数を感知できない

• 解決策:– generic object 機構( C 言語による KLIC の拡

張)を用いて未定義変数の同一性検査を実装– 静的参照数解析により,中継ノードに参照が

残らないことを保証

遠隔サーバへの接続

• チャットサーバを遠隔述語呼出しすると– 複数の接続をまたいでサーバの履歴を残す

ことができない– クライアント別の履歴ではチャットになら

ない• 既存の遠隔サーバへの接続が必要

– 遠隔述語呼出しによるプロセス生成だけでは不十分

遠隔サーバの仕組み

I, O

KLICruntime

KLICruntime

chat

stub

chatd

getl, putl

chatd(I,O)skeleton

登録検索

サービス検索

• サービス名によってサービスストリームを要求する。

• service_name(S) メッセージを適切なノードの実行系に送信すれば良い。

• 既存のサーバがサービスを生成する。– 遠隔述語呼出しでは、スケルトンがサービ

スを生成する。

まとめと今後の課題• ネットワーク透過な遠隔述語呼出しを

低コストで実現した。• 今後の課題

– KLIC の generic object 機構と静的解析を用いた分散変数管理の最適化

– ネットワーク透過な遠隔サーバへの接続の実現

– 実装および安全性保証への検証技術の適用

その他

• 失敗(例外)の原因– 単一化の失敗,ゼロ除算,配列参照,メモ

リ不足,計算時間超過, node failure ,入出力エラー

• 対策はいろいろな角度から– 静的モード解析( cf. 単一化の安全性)– JIT 検証( cf. proof carrying code ) – 例外処理機構( cf. 荘園)の設計– フォールトトレランス

静的

動的