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?
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?
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
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 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.