9 Stimmen

Wie lassen sich Multicores in Ocaml für Monte-Carlo-Simulationen nutzen?

Der Ocaml-Prozess kann nur einen Kern verwenden, und um mehrere Kerne zu nutzen, muss ich mehrere Prozesse laufen lassen.

Gibt es Ocaml-Frameworks, die man zur Parallelisierung von Monte-Carlo-Simulationen verwenden kann?

8voto

J D Punkte 47190

Verwenden Sie die folgenden invoke Kombinator, um eine Funktion auf einen Wert in einem anderen (verzweigten) Prozess anzuwenden und dann auf das Ergebnis zu warten, wenn der () Wert angewendet wird:

  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

3voto

nlucaroni Punkte 46744

Derzeit ist die einzige Möglichkeit, dies zu tun, MPI, und Sie können ocaml Bindungen dafür finden auf Website von Xavier Leroy .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X