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

Posted

技术标签:

【中文标题】如何在 Ocaml 中使用多核进行蒙特卡罗模拟?【英文标题】:How to use multicores in Ocaml to do Monte Carlo simulations? 【发布时间】:2010-11-20 05:08:50 【问题描述】:

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

是否有任何 Ocaml 框架可用于并行化 Monte Carlo 模拟?

【问题讨论】:

【参考方案1】:

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

【讨论】:

ocaml4multicore 可用(有限制),请参阅:algo-prog.info/ocmc/web【参考方案2】:

使用以下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

【讨论】:

以上是关于如何在 Ocaml 中使用多核进行蒙特卡罗模拟?的主要内容,如果未能解决你的问题,请参考以下文章

蒙地卡罗法求PI

如何在蒙特卡洛模拟中添加均值和标准差线?

使用 Python 进行蒙特卡罗模拟:动态构建直方图

什么是蒙特卡洛学习,时序差分算法

什么是蒙特卡洛学习,时序差分算法

使用蒙特卡罗模拟多线程计算 Pi