Parallel_arrays.Bigstringmodule Kind : sig ... endval sexp_of_t : ('a -> Sexplib0.Sexp.t) -> 'a t -> Sexplib0.Sexp.tval with_kind_exn : 'a Bigstring.Kind.t -> Base_bigstring.t -> 'a tTo read a value from a parallel array, we must prove that it does not escape its capsule. This is the case if its type crosses contention, or if it is manipulated within a portable function.
get t i reads the element at index i. Raises Invalid_arg if i is not in the range [0..length t).
val extract :
'a t ->
Base.int ->
('a -> 'b @ portable contended) @ local once portable ->
'b @ portable contendedextract t i f applies f with the element read from index i. Raises Invalid_arg if i is not in the range [0..length t).
val unsafe_extract :
'a t ->
Base.int ->
('a -> 'b @ portable contended) @ local once portable ->
'b @ portable contendedunsafe_extract t i f applies f with the element unsafely read from index i.
To store a value in a parallel array, we must prove that it does not share unsynchronized state with any other elements. This is the case if its type crosses contention or it lives in a fresh capsule.
set t i a stores the element a at index i. Raises Invalid_arg if i is not in the range [0..length t).
unsafe_set t i a unsafely stores the element a at index i.
insert t i f stores f () at index i. Raises Invalid_arg if i is not in the range [0..length t).
val unsafe_insert :
'a t ->
Base.int ->
(Base.unit -> 'a) @ local once portable ->
Base.unit @@ portableunsafe_insert t i f unsafely stores f () at index i.
val of_string : ?pos:Base.int -> ?len:Base.int -> Base.string -> Base.char tof_string s is a new character bigstring initialized by copying the contents of the string s. The optional arguments pos and len are forwarded to Base_bigstring.of_string
val init :
Parallel_kernel.t @ local ->
(('a Kind.t * Base.int) ->
(f:(Parallel_kernel.t @ local -> (Base.int -> 'a) @ local) @ shareable ->
'a t) @ local) @ local @@ portableinit parallel n ~f initializes an array with the result of f applied to the integers 0..n-1.
val iter :
Parallel_kernel.t @ local ->
('a t ->
(f:(Parallel_kernel.t @ local -> ('a -> Base.unit) @ local) @ shareable ->
Base.unit) @ local) @ localiter parallel t ~f applies f to each element of t.
val iteri :
Parallel_kernel.t @ local ->
('a t ->
(f:
(Parallel_kernel.t @ local ->
(Base.int ->
('a ->
Base.unit) @ local) @ local) @ shareable ->
Base.unit) @ local) @ localiteri parallel t ~f applies f to each element of t and its index.
val find :
Parallel_kernel.t @ local ->
('a t ->
(f:(Parallel_kernel.t @ local -> ('a -> Base.bool) @ local) @ shareable ->
'a Base.option) @ local) @ localfind parallel t ~f returns the first element of t for which f returns true, if it exists. f will always be applied to every element of t.
val findi :
Parallel_kernel.t @ local ->
('a t ->
(f:
(Parallel_kernel.t @ local ->
(Base.int ->
('a ->
Base.bool) @ local) @ local) @ shareable ->
'a Base.option) @ local) @ localfindi parallel t ~f returns the first element of t for which f returns true, if it exists. f will always be applied to every element of t and its index.
val reduce :
Parallel_kernel.t @ local ->
('a t ->
(f:
(Parallel_kernel.t @ local ->
('a @ shared ->
('a @ shared ->
'a) @ local) @ local) @ shareable ->
'a Base.option) @ local) @ localreduce parallel t ~f folds f over the elements of t. f must be associative. If t is empty, reduce returns None.
val min_elt :
Parallel_kernel.t @ local ->
('a t ->
(compare:
(Parallel_kernel.t @ local ->
('a @ local shared ->
('a @ local shared ->
Base.int) @ local) @ local) @ shareable ->
'a Base.option) @ local) @ localmin_elt parallel t ~compare is the minimum element of t according to compare. If t is empty, returns None.
val max_elt :
Parallel_kernel.t @ local ->
('a t ->
(compare:
(Parallel_kernel.t @ local ->
('a @ local shared ->
('a @ local shared ->
Base.int) @ local) @ local) @ shareable ->
'a Base.option) @ local) @ localmax_elt parallel t ~compare is the maximum element of t according to compare. If t is empty, returns None.
val fold :
Parallel_kernel.t @ local ->
('a t @ shared ->
(init:(Base.unit -> 'acc) @ portable ->
(f:
(Parallel_kernel.t @ local ->
('acc ->
('a @ shared ->
'acc) @ local) @ local) @ shareable ->
(combine:
(Parallel_kernel.t @ local -> ('acc -> ('acc -> 'acc) @ local) @ local) @ shareable ->
'acc) @ local) @ local) @ local) @ local @@ portablefold parallel t ~init ~f ~combine folds combine over the result of map parallel t ~f. combine must be associative and combine init x must equal x.
val foldi :
Parallel_kernel.t @ local ->
('a t @ shared ->
(init:(Base.unit -> 'acc) @ portable ->
(f:
(Parallel_kernel.t @ local ->
(Base.int ->
('acc ->
('a @ shared ->
'acc) @ local) @ local) @ local) @ shareable ->
(combine:
(Parallel_kernel.t @ local -> ('acc -> ('acc -> 'acc) @ local) @ local) @ shareable ->
'acc) @ local) @ local) @ local) @ local @@ portablefoldi parallel t ~init ~f ~combine folds combine over the result of mapi parallel t ~f. combine must be associative and combine init x must equal x.
val sort :
Parallel_kernel.t @ local ->
('a t ->
(compare:
(Parallel_kernel.t @ local ->
('a @ local shared ->
('a @ local shared ->
Base.int) @ local) @ local) @ shareable ->
'a t) @ local) @ localsort parallel t ~compare initializes an array with the contents of t unstably sorted with respect to compare.
val stable_sort :
Parallel_kernel.t @ local ->
('a t ->
(compare:
(Parallel_kernel.t @ local ->
('a @ local shared ->
('a @ local shared ->
Base.int) @ local) @ local) @ shareable ->
'a t) @ local) @ localstable_sort parallel t ~compare initializes an array with the contents of t stably sorted with respect to compare.
val scan :
Parallel_kernel.t @ local ->
('a t ->
(init:'a ->
(f:
(Parallel_kernel.t @ local ->
('a @ shared ->
('a @ shared ->
'a) @ local) @ local) @ shareable ->
'a t * 'a) @ local) @ local) @ localscan parallel t ~init ~f initialises an array containing the exclusive prefix sums of t with respect to f. The first element is init and the full reduction of t is returned separately. f must be associative and f init x must equal x.
val scan_inclusive :
Parallel_kernel.t @ local ->
('a t ->
(init:'a ->
(f:
(Parallel_kernel.t @ local ->
('a @ shared ->
('a @ shared ->
'a) @ local) @ local) @ shareable ->
'a t) @ local) @ local) @ localscan_inclusive parallel t ~init ~f initialises an array containing the inclusive prefix sums of t with respect to f. The first element is the first element of t. f must be associative and f init x must equal x.
val filter :
Parallel_kernel.t @ local ->
('a t ->
(f:(Parallel_kernel.t @ local -> ('a -> Base.bool) @ local) @ shareable ->
'a t) @ local) @ localfilter parallel t ~f initialises an array containing the elements of t that satisfy the predicate f.
val filteri :
Parallel_kernel.t @ local ->
('a t ->
(f:
(Parallel_kernel.t @ local ->
(Base.int ->
('a ->
Base.bool) @ local) @ local) @ shareable ->
'a t) @ local) @ localfilteri parallel t ~f initialises an array containing the elements of t that, alongside their index, satisfy the predicate f.
val map_inplace :
Parallel_kernel.t @ local ->
('a t ->
(f:(Parallel_kernel.t @ local -> ('a -> 'a) @ local) @ shareable ->
Base.unit) @ local) @ local @@ portablemap_inplace parallel t ~f overwrites an array with the result of f applied to each of its elements.
val mapi_inplace :
Parallel_kernel.t @ local ->
('a t ->
(f:
(Parallel_kernel.t @ local -> (Base.int -> ('a -> 'a) @ local) @ local) @ shareable ->
Base.unit) @ local) @ local @@ portablemapi_inplace parallel t ~f overwrites an array with the result of f applied to each of its elements and their indices.
val init_inplace :
Parallel_kernel.t @ local ->
('a t ->
(f:(Parallel_kernel.t @ local -> (Base.int -> 'a) @ local) @ shareable ->
Base.unit) @ local) @ local @@ portableinit_inplace parallel t ~f overwrites an array with the result of f applied to each array index. This can be much faster than using mapi_inplace since it does not need to read the array.
val sort_inplace :
Parallel_kernel.t @ local ->
('a t ->
(compare:
(Parallel_kernel.t @ local ->
('a @ local shared ->
('a @ local shared ->
Base.int) @ local) @ local) @ shareable ->
Base.unit) @ local) @ local @@ portablesort_inplace parallel t ~compare unstably sorts t with respect to compare.
val stable_sort_inplace :
Parallel_kernel.t @ local ->
('a t ->
(compare:
(Parallel_kernel.t @ local ->
('a @ local shared ->
('a @ local shared ->
Base.int) @ local) @ local) @ shareable ->
Base.unit) @ local) @ local @@ portablestable_sort_inplace parallel t ~compare stably sorts t with respect to compare.
val scan_inplace :
Parallel_kernel.t @ local ->
('a t ->
(init:'a ->
(f:
(Parallel_kernel.t @ local ->
('a @ shared ->
('a @ shared ->
'a) @ local) @ local) @ shareable ->
'a) @ local) @ local) @ local @@ portablescan_inplace parallel t ~init ~f overwrites t to contain the its exclusive prefix sums with respect to f. The first element becomes init and the full reduction of t is returned. f must be associative and f init x must equal x.
val scan_inclusive_inplace :
Parallel_kernel.t @ local ->
('a t ->
(init:'a ->
(f:
(Parallel_kernel.t @ local ->
('a @ shared ->
('a @ shared ->
'a) @ local) @ local) @ shareable ->
Base.unit) @ local) @ local) @ local @@ portablescan_inclusive_inplace parallel t ~init ~f overwrites t to contain its inclusive prefix sums with respect to f. The first element is unchanged. f must be associative and f init x must equal x.