ocaml-multicore / domainslib

Parallel Programming over Domains
ISC License
172 stars 30 forks source link

Question: Does a parallel map function exist in Domainslib? #117

Open tjazerzen opened 1 year ago

tjazerzen commented 1 year ago

Hello Domainslib maintainers,

I'm currently using the Domainslib library in my OCaml project, and I wanted to use a parallel map function. However, I could not find such a function in the library.

Does a parallel map exist in this library? If not, which implementation would you suggest instead (for example, Parany's)?

Sudha247 commented 1 year ago

Hi @tjazerzen,

One can do a naive version of parallel_map with a parallel_for.

let parallel_map f arr pool =
  let len = Array.length arr in
  let res = Array.make len (f arr.(0)) in
  Domainslib.Task.parallel_for pool ~start:0 ~finish:(len - 1)
  ~body:(fun i -> res.(i) <- (f arr.(i)));
  res

You can also take a look at the parallel map in MPLLang's benchmark suite.

Parany supports parallel map indeed. Although, the latest release of Parany doesn't use shared memory parallelism, but uses Unix fork to spawn new processes. This may work for certain type of jobs, but if you want to use OCaml 5 features in your project I'd suggest going with one of the above two options.

tjazerzen commented 1 year ago

Thank you!