From dce6e3fb666edc9709ec0255363ec0b7e09676ed Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Mon, 1 Apr 2019 15:21:22 +0200 Subject: [PATCH] Added SharedMemory --- Parallel_mpi/SharedMemory.ml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Parallel_mpi/SharedMemory.ml diff --git a/Parallel_mpi/SharedMemory.ml b/Parallel_mpi/SharedMemory.ml new file mode 100644 index 0000000..8c40aa7 --- /dev/null +++ b/Parallel_mpi/SharedMemory.ml @@ -0,0 +1,23 @@ +let create ?(temp_dir="/dev/shm") data_type size_array = + let filename = + Parallel.Node.broadcast (lazy (Filename.temp_file ~temp_dir "4idx." ".tmp")) + in + at_exit (fun () -> try Sys.remove filename with _ -> ()); + + if Parallel.Node.master then + begin + let fd = Unix.openfile filename [Unix.O_RDWR] 0o600 in + let result = + Unix.map_file fd data_type Bigarray.fortran_layout true size_array + in + Bigarray.Genarray.fill result 0.; + Parallel.Node.barrier (); + result + end + else + begin + Parallel.Node.barrier (); + let fd = Unix.openfile filename [Unix.O_RDONLY] 0o600 in + Unix.map_file fd data_type Bigarray.fortran_layout false size_array + end +