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?

Was it helpful?

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
scroll top