2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

分散並列Prolog(3)

Last updated at Posted at 2024-12-07

ツリー階層型ネットワーク

前回までの計算実験で、単純な分散並列でPrologが動作するようになりました。本格的に仕様固めに取り掛かりました。Prologが深さ優先探索であることから分散並列のネットワークも再帰が活きるようにツリー階層型にすることにしました。

ネットワークモード.png

親機は子機に計算を分割して並列実行させます。その子機は孫機を持つこともできます。さらに孫機も子機を持つこともできます。

Prologの特性

Prologは深さ優先探索であり人間の思考に類似しています。スーパーコンピューターによる流体力学の計算と異なり、再帰的に並列計算を展開していった方がPrologにとっては自然であると考えました。例えばボードゲームの先読みをする場合です。動かしうる駒の置き場所に対応してそれぞれ子機に計算を委ねます。さらにその子機ももう一手先の選択肢について孫機に計算を委ねます。こうして得られた結果は各階層の親機を介して最終的に大元の親機に集約されます。これは人間の思考方法にも近いように思えます。現在はラズパイのような安価なマシンが入手可能です。ラズパイをクラスタ接続したマシンで分散並列Prologの実行が可能と思われます。

仕様

分散並列のために用意した拡張述語は下記のとおりです。子機の端末で npl -n を実行します。N-Prologがネットワークモードで実行されます。親機の端末でN-Prologを実行し、dp_create/1 を使って親と子の間でTCP/IP通信を確立します。

  • npl -n: ネットワークモードで子プロローグを起動します。-nオプションを使用します。 子も親として機能できます。network.pl に dp_create/1 を含めることで、npl -n でネットワークモードを開始した直後に子との通信が確立されます。この機能により、親は子を通じて孫に計算を委任できます。

  • dp_create([IP0, IP1, …, IPn]): 子機のIPアドレスを指定して、親LispとのTCP/IP通信を確立します。IPアドレスは原子(atom)として指定します。例: '178.1.166.2' 最大100台の子機を接続できます。

  • dp-and([p0, p1, ..., pn]): P0からPNまでの述語を並列に実行します。すべてがYESを返すとYESを返し、いずれかがNOを返すとNOを返します。

  • dp_or([p0, p1, ..., pn]): P0からPNまでの述語を並列に実行します。いずれかがYESを返すと、他の計算を中断してYESを返します。

  • dp_transfer(Fn): 親機からすべての子機にファイルFnを転送します。

  • dp_compile(Fn): 親機と子機の両方でファイルFnをコンパイルします。

  • dp_consult(Fn): 親機と子機の両方でファイルFnをロードします。 (注)内部で reconsult/1 を使用します。既存の述語は上書きされます。

  • dp_prove(Nth, Pred): N番目の子プロローグで述語を証明し、テストします。

  • dp_report(Str): 親端末に文字列を表示します。 例: dp_report('Hello World')。
    string_term(X, 1+2), dp_report(X)。

  • dp_close: 子機に終了コマンドを送信し、通信を閉じます。子機の場合、OSがシャットダウンされます。 (注)dp_close を実行せずに halt を実行するとエラーが発生します。適切に終了するには dp_close が必要です。

  • dp_parent: システムが親として動作している場合、YESを返します。それ以外の場合はNOを返します。子機であっても、自身が親として機能している場合、YESを返します。

  • dp_child: 子機であり、子機を持っていない場合、YESを返します。それ以外の場合はNOを返します。

  • dp_wait(Time): Time 秒待機します。

  • dp_pause(Nth): N番目の子機およびその子機に対して待機コマンドを送信します。

  • dp_resume(Nth): N番目の子機およびその子機に対しての待機コマンドをキャンセルします。

ハードウェア

ラズパイ4をクラスタ接続したマシンで分散並列Prologを動作させる予定です。1号機は4台のみをクラスタ接続してハードウェアに関する経験を積みます。うまく動作したら30台程度のラズパイクラスタマシンで試したいものです。問題は予算です。円安でラズパイもけっこう高くなりました。30台ともなりますと、高額になります。

個人的な思い

1980年代の日本の第五世代コンピューター計画は私にとって憧れでした。日本人が世界に類を見ない高度な目標を掲げて果敢に挑戦したことを一人の日本人として誇らしく思っています。時代はちょうとダウンサイジングの波が起きていました。国家プロジェクトであり並列推論マシンを作るという目標は変更できなかったのでしょう。最終的に並列推論マシンは完成しましたが大型の専用機であり民間のニーズに応えられなかったという批判があります。あれから40年ほど経過し、安価なマシンや通信手段が入手可能になりました。私の力の及ぶ限りそのプロジェクトの個人的な続きをやってみたいと思っています。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?