Domanda

processo O'Caml può utilizzare solo un core e per utilizzare più core devo eseguire diversi processi.

Ci sono quadri OCaml da utilizzare per parallelizzare simulazioni Monte Carlo?

È stato utile?

Soluzione

Al momento, l'unico modo per farlo è con MPI, e si possono trovare binding OCaml per esso su sito web di Xavier Leroy .

Altri suggerimenti

Utilizzare la seguente combinatore invoke per applicare una funzione di un valore in un altro (forcella) processo e quindi bloccare attesa per il risultato quando viene applicato il valore ():

  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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top