I think O’Caml is a great language for parallel algorithm development. I have written two parallel codes in O’Caml, one is my AI system called the examachine, and the other is a parallel information-retrieval code which I cannot specify yet (it’s ongoing research). Except a few shortcomings such as lack of true shared-memory parallelism and the inefficiencies caused by the garbage collector (which is not easy to tune) and the lack of arbitrary unboxed values, O’Caml is pretty good for writing imperative and even High Performance Computing codes.The time we usually spend on fixing silly but hard-to-find bugs in C++ drops dramatically if we are using O’Caml. Most bugs in O’Caml code are actual algorithm bugs or wrong semantics, so they are easier to understand and locate.
That’s why I went ahead and added basic isend/irecv support to ocamlmpi. Check it out for yourselves. I had some trouble when combining it with multi-threaded code. Let me know if you see any errors in the implementation.