1
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?

並列Lispでたらいまわしをした話(5)

Last updated at Posted at 2024-05-03

竹内関数 考察

前の記事で並列Lispでたらいまわしをしたことをご紹介しました。予想していたことですが、3つの引数を並列で計算しても実行時間が3分の1になることはありません。第2引数の処理量が多いのです。

次の結果をご覧ください。(tarai 12 6 0) を単純に3分割したとしてもそれほど効率は上がらないのです。

bandicam 2024-05-03 09-25-59-570.jpg

なにかもっと並列を活かす方法はないだろうか?考えてみました。現在のCPUはマルチコア数が増加しつつあり、ゲーム用パソコンでは20コアのCPUを採用しているものもあります。もっとこのコア数を活かせないだろうか?使っていない待機中のプロセスを活かす方法について考えてみました。

マルチコアをフル活用

前述のように空いているコアに計算を並列分割すればいいのですが、どうやってそれを行うのか?です。Easy-ISLispではUnixのforkとPipeを利用して子Lispを起動し、親Lispとはパイプを利用して通信をしています。親子は通信ができるのですが、子である兄弟同士は直接に通信ができません。

マルチプロセス1.png

プロトコル

さて、どうしたものか?メモリ共有とかソケットを使ったら兄弟が通信できるかな?などと考えていました。ふっと気がつきました、「親を経由して他の子に通信したならば!」 ChatGPTに相談したらそれは良さそうな方法とのこと。

マルチプロセス2.png

プロトコルを決めておいて子Lispがさらに計算を分割して親Lisp経由で空いている子Lispに並列計算をさせます。英語で仕事を引き継がせることを「hand over]と言うそうです。(mp-hand fun arg1 ... arg2)という並列構文を用意してやったらどうだろう?と構想を練っているところです。これなら従来のpipeを使ったプロセス間通信で実行することができます。楽しくなってきました。

実装

Easy-ISLispはOSSです。BSD2ライセンスで無償提供しています。お楽しみください。

1
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
1
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?