diff --git a/lib/array_iter.ml b/lib/array_iter.ml new file mode 100644 index 0000000..566813e --- /dev/null +++ b/lib/array_iter.ml @@ -0,0 +1,10 @@ + +let parallel_iter (f:'a->unit) arr cur_pool = + let arr_len = Array.length arr in + Task.parallel_for cur_pool ~start:0 ~finish:(arr_len - 1) ~body:(fun i-> + f arr.(i)) + +let parallel_iteri (f:int->'a->unit) arr cur_pool = + let arr_len = Array.length arr in + Task.parallel_for cur_pool ~start:0 ~finish:(arr_len - 1) ~body:(fun i-> + f i arr.(i)) diff --git a/lib/array_iter.mli b/lib/array_iter.mli new file mode 100644 index 0000000..6ef89fd --- /dev/null +++ b/lib/array_iter.mli @@ -0,0 +1,9 @@ + +val parallel_iter : ('a -> unit) -> 'a array -> Task.pool -> unit +(** [parallel_iter f a pool] applies function [f] in turn to all the elements of [a] + It does Stdlib.Array.iter in parallel *) + +val parallel_iteri : (int -> 'a -> unit) -> 'a array -> Task.pool -> unit +(** Same as {!parallel_iter}, but the function is applied to the index of the element as first + argument, and the element itself as second argument + It performs Stdlib.Array.iteri in parallel *) \ No newline at end of file