How to use multicores in Ocaml to do Monte Carlo simulations?
-
18-09-2019 - |
Question
Ocaml process can use just one core and in order to use multiple cores I have to run several processes.
Are there any Ocaml frameworks to use to parallelize Monte Carlo simulations?
Solution
Currently, the only way to do it is with MPI, and you can find ocaml bindings for it on Xavier Leroy's website.
OTHER TIPS
Use the following invoke
combinator to apply a function to a value in another (forked) process and then block waiting for its result when the ()
value is applied:
let invoke (f : 'a -> 'b) x : unit -> 'b =
let input, output = Unix.pipe() in
match Unix.fork() with
| -1 -> (let v = f x in fun () -> v)
| 0 ->
Unix.close input;
let output = Unix.out_channel_of_descr output in
Marshal.to_channel output (try `Res(f x) with e -> `Exn e) [];
close_out output;
exit 0
| pid ->
Unix.close output;
let input = Unix.in_channel_of_descr input in
fun () ->
let v = Marshal.from_channel input in
ignore (Unix.waitpid [] pid);
close_in input;
match v with
| `Res x -> x
| `Exn e -> raise e
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow