Message Passing Interface / OCaml

MPIは並列コンピュータを利用するための標準規格で、これをOCamlで実現しているサイトに興味を持ちました。

参考: http://www.ueda.info.waseda.ac.jp/~sakai/ocaml/ocamlmemo.html#doc1_1485

Cで書かれたものよりもシンプルに実現できており、こういう関数型言語のメリットを感じてみようと試してみました。

環境: Ubuntu 16.04 / VirtualBox
設定:

sudo apt-get install opam
opam init
eval opam config env
. /home/n/.opam/opam-init/init.sh > /dev/null 2> /dev/null || true
sudo apt-get install m4
sudo apt-get install mpich
sudo apt-get install libopenmpi-dev
opam install mpi

まずはC言語でMPIの動きを試してみます。

参考: https://ja.wikipedia.org/wiki/Message_Passing_Interface

hello.c

コンパイル:

cc -o hello hello.c -I /usr/lib/openmpi/include -L /usr/lib/open/lib -lmpi

実行結果:
mpi01

rankとtagで識別して通信しているのがわかります。
この動きが把握できたところで、次はOcaml。

mpi_test.ml

コンパイル:

ocamlc -I ~/.opam/system/lib/mpi mpi.cma mpi_test.ml -o mpi_test

実行結果

mpi02

ターゲットとするランク、タグにメッセージを送信しています。
参考にした’OCaml備忘録’というサイトですが、他にもソケット通信、Cとのインターフェイスなど詳しく書かれており、とても興味深い内容ばかりです。ここにあるものでCのLinuxプログラムでよく使うケースがありますが、Cだとわずわらしく感じる部分をOCamlで実装しても面白いと思いました。