挑戦の続き
先日、私はEasy-ISLisp ver4.0をリリースして目標を達成したと思いました。しばらく好きな音楽をやったり、プラモデルを作ってのんびりしようと思っていました。しかし、竹内先生のCELISのことが頭から離れません。竹内先生たちは分散型のCELISでパズルを解いていました。そして1990年代の研究であるコネクションマシンのCM-1のことを知りました。とても興味深いものでした。分散型のLispに挑戦したいと思いました。
分散型並列Lisp
通信回線を使って複数台のパソコンを接続します。親Lisp機からスレッドを使って分解した計算を子Lisp機に送信して計算を依頼します。
TCP/IP
通信回線についてはTCP/IPを利用します。C言語のライブラリが充実しています。これを利用します。
子機
Lisp起動時に-nオプションを与えます。起動するとサーバーのように動作します。親Lisp機からの計算依頼を受け付け、evalして、通信回線を介して返答します。
親機
親機において子機のIPアドレスを与えなければいけません。
(dp-create ip0 ip1 ip2 ... ipn)
という拡張関数を用意します。これにより子機のIPアドレスを与えるとともにソケットを準備します。
ファイル転送
計算しようとするプログラムは親機に保管してあります。(load fn) 関数により親機のメモリ空間にロードするとともに通信回線を利用して子機にも転送します。
# マルチコアをフル活用
親機、子機ともにマルチコアですのでこれらをフルに活かします。現在の安価なパソコンでも6コア程度はもっています。3台あれば3*6=18コアを利用することができます。マルチコア、マルチスレッドもフルに活用します。
目標
ver5.0においてこれらを達成したいと考えています。並列は興味深いです。私の新たな目標です。