如何在Ocaml中使用多核进行蒙特卡罗模拟?

时间:2009-08-17 10:56:05

标签: multicore ocaml simulation montecarlo

Ocaml进程只能使用一个核心,为了使用多个核心,我必须运行多个进程。

是否有任何Ocaml框架用于并行化蒙特卡罗模拟?

2 个答案:

答案 0 :(得分:8)

使用以下invoke组合器将函数应用于另一个(分叉)进程中的值,然后在应用()值时阻止等待其结果:

  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

答案 1 :(得分:3)

目前,唯一的方法是使用MPI,你可以在Xavier Leroy's website找到它的ocaml绑定。