分散並列Lisp 計算実験
Easy-ISLispはver5.0に向かって分散並列の機能を入れる予定です。ver4.20においてTCP/IP通信により親Lispと子Lispマシンとが通信できる機能を追加しました。
基本機能
(dp-create x1 x2 ... xn) 引数として子機のIPアドレスを与えます。
(dp-close) 子機にネットワークモードを終了を指示します。
(dp-let forms body) let構文を分散並列で実行します。
(eisl-test ch sexp) チャンネルchの子機にS式、sexpを送信します。計算実験をするための暫定的な機能です。
マシン
3台のパソコンをLAN接続して使います。
計算実験
フィボナッチ数を並列で計算させます。子機には予めフィボナッチ数を計算するプログラムをコンパイルしておきます。そして-nオプションによりネットワークモードで起動して待機させておきます。
親機においてdp-create構文を使って子機と接続します。eisl-testを使ってコンパイル済みのフィボナッチ数計算プログラムをロードしておきます。
親機においてdp-letを使った並列フィボナッチ数計算のプログラムをロードします。
さあ、計算実験開始です。
どうやら成功のようです。TCP/IPによるレイテンシーはほとんどないようです。よさそうです。
ネットワークモードで動さいしている子Lispの様子です。
改良
次の機能の追加を予定しています。
〇子機がバグで停止しても再起動、親機との通信を回復させる。
〇親機から子機へFTPによりファイルを転送する機能
〇親機から子機に一斉にコンパイル指示、ロード指示を出す機能
マルチプロセスとの併用
子機はそれぞれマルチコア、マルチプロセスで動作可能ですから、それらをフル活用すれば数台のパソコンで18コアマシンとして計算できるはずです。並列計算の可能性を追求したいと思っています。
実装はgithubにおいてあります。OSSです。自由にお使いください。
https://github.com/sasagawa888/eisl