module ParallelArray: sig .. end
Parallel operations over arrays.
    Most operations have the same signature as their original
    counterparts, but fold operations need an additional function
    in order to be able to "merge" the computations done on sub arrays.
    Operations doing computations in parallel can be passed two optional
    parameters to set thread pool, and chunk size. It is possible to get
    rid of these optional parameters through the use of the Make
    functor.
    If any parallel operation is used with a given pool, it is necessary
    to shutdown the pool. This applies in particular to default_pool,
    that can be shutdown through the shutdown_now function.
Thread pool
 
val default_pool : ThreadPoolExecutor.t
The default pool used for parallel computations, initialized with the
    number of available (logical) processors.
 
 
val shutdown_now : unit -> unit
Shutdowns default_pool.
 
 
Synonyms for sequential operations
 
val length : 'a array -> int
 
 
val get : 'a array -> int -> 'a
 
 
val set : 'a array -> int -> 'a -> unit
 
 
val make : int -> 'a -> 'a array
 
 
val create : int -> 'a -> 'a array
 
 
val make_matrix : int -> int -> 'a -> 'a array array
 
 
val create_matrix : int -> int -> 'a -> 'a array array
 
 
val append : 'a array -> 'a array -> 'a array
 
 
val concat : 'a array list -> 'a array
 
 
val sub : 'a array -> int -> int -> 'a array
 
 
val copy : 'a array -> 'a array
 
 
val fill : 'a array -> int -> int -> 'a -> unit
 
 
val blit : 'a array -> int -> 'a array -> int -> int -> unit
 
 
val to_list : 'a array -> 'a list
 
 
val of_list : 'a list -> 'a array
 
 
Parallel operations
 
val init : ?pool:ThreadPoolExecutor.t ->
       ?chunk_size:int -> int -> (int -> 'a) -> 'a array
Similar to 
Array.init, except that computations are done in
    parallel; 
pool indicates the thread pool to use (defaulting to
    
default_pool), while 
chunk_size indicates the size of each chunk
    to be allocated to a thread.
Raises Invalid_argument if passed size is negative or above
                            
Sys.max_array_length
 
 
 
val iter : ?pool:ThreadPoolExecutor.t ->
       ?chunk_size:int -> ('a -> unit) -> 'a array -> unit
Similar to 
Array.iter, except that computations are done in
    parallel; 
pool indicates the thread pool to use (defaulting to
    
default_pool), while 
chunk_size indicates the size of each chunk
    to be allocated to a thread.
 
 
 
val map : ?pool:ThreadPoolExecutor.t ->
       ?chunk_size:int -> ('a -> 'b) -> 'a array -> 'b array
Similar to 
Array.map, except that computations are done in
    parallel; 
pool indicates the thread pool to use (defaulting to
    
default_pool), while 
chunk_size indicates the size of each chunk
    to be allocated to a thread.
    Raises 
Runtime.Raised if the passed function raises an exception.
 
 
 
val iteri : ?pool:ThreadPoolExecutor.t ->
       ?chunk_size:int -> (int -> 'a -> unit) -> 'a array -> unit
Similar to 
Array.iteri, except that computations are done in
    parallel; 
pool indicates the thread pool to use (defaulting to
    
default_pool), while 
chunk_size indicates the size of each chunk
    to be allocated to a thread.
 
 
 
val mapi : ?pool:ThreadPoolExecutor.t ->
       ?chunk_size:int -> (int -> 'a -> 'b) -> 'a array -> 'b array
Similar to 
Array.mapi, except that computations are done in
    parallel; 
pool indicates the thread pool to use (defaulting to
    
default_pool), while 
chunk_size indicates the size of each chunk
    to be allocated to a thread.
 
 
 
val fold_left : ?pool:ThreadPoolExecutor.t ->
       ?chunk_size:int ->
       ('a -> 'b -> 'a) -> ('a -> 'a -> 'a) -> 'a -> 'b array -> 'a
Similar to 
Array.fold_left, except that computations are done in
    parallel; 
pool indicates the thread pool to use (defaulting to
    
default_pool), while 
chunk_size indicates the size of each chunk
    to be allocated to a thread.
    
This version uses an additional function in order to be able to
    "merge" the computations done on sub arrrays.
 
 
 
val fold_right : ?pool:ThreadPoolExecutor.t ->
       ?chunk_size:int ->
       ('b -> 'a -> 'a) -> ('a -> 'a -> 'a) -> 'b array -> 'a -> 'a
Similar to 
Array.fold_right, except that computations are done in
    parallel; 
pool indicates the thread pool to use (defaulting to
    
default_pool), while 
chunk_size indicates the size of each chunk
    to be allocated to a thread.
    
This version uses an additional function in order to be able to
    "merge" the computations done on sub arrrays.
 
 
 
val sort : ?pool:ThreadPoolExecutor.t ->
       ?chunk_size:int -> ('a -> 'a -> int) -> 'a array -> unit
Similar to 
Array.sort, except that computations are done in
    parallel; 
pool indicates the thread pool to use (defaulting to
    
default_pool), while 
chunk_size indicates the size of each chunk
    to be allocated to a thread.
    The current implementation has a 
O(n) space complexity.
 
 
 
val stable_sort : ?pool:ThreadPoolExecutor.t ->
       ?chunk_size:int -> ('a -> 'a -> int) -> 'a array -> unit
 
 
val fast_sort : ?pool:ThreadPoolExecutor.t ->
       ?chunk_size:int -> ('a -> 'a -> int) -> 'a array -> unit
 
 
Additional parallel operations
 
val mem : ?pool:ThreadPoolExecutor.t -> ?chunk_size:int -> 'a -> 'a array -> bool
mem ~pool ~chunk_size x a returns true iff there is an element
    e of a such that e = x. pool indicates the thread pool to use
    (defaulting to default_pool), while chunk_size indicates the size
    of each chunk to be allocated to a thread.
 
 
val memq : ?pool:ThreadPoolExecutor.t -> ?chunk_size:int -> 'a -> 'a array -> bool
memq ~pool ~chunk_size x a returns true iff there is an element
    e of a such that e == x. pool indicates the thread pool to use
    (defaulting to default_pool), while chunk_size indicates the size
    of each chunk to be allocated to a thread.
 
 
val exists : ?pool:ThreadPoolExecutor.t ->
       ?chunk_size:int -> ('a -> bool) -> 'a array -> bool
exists ~pool ~chunk_size f a returns true iff there is an element
    e of a such that f e = true. pool indicates the thread pool
    to use (defaulting to default_pool), while chunk_size indicates
    the size of each chunk to be allocated to a thread.
 
 
val for_all : ?pool:ThreadPoolExecutor.t ->
       ?chunk_size:int -> ('a -> bool) -> 'a array -> bool
for_all ~pool ~chunk_size f a returns true iff there is no element
    e of a such that f e = false. pool indicates the thread pool
    to use (defaulting to default_pool), while chunk_size indicates
    the size of each chunk to be allocated to a thread.
 
 
val find : ?pool:ThreadPoolExecutor.t ->
       ?chunk_size:int -> ('a -> bool) -> 'a array -> 'a
find ~pool ~chunk_size f a returns an element e of a such that
    f e = true, raising Not_found if there is no such element in a.
    pool indicates the thread pool to use (defaulting to
    default_pool), while chunk_size indicates the size of each chunk
    to be allocated to a thread.
    Returns any element matching the condition, not guaranteeing that
    the one with the lowest index is returned.
 
 
 
val find_all : ?pool:ThreadPoolExecutor.t ->
       ?chunk_size:int -> ('a -> bool) -> 'a array -> 'a list
find_all ~pool ~chunk_size f a returns all the elements of a that
    return true when applied to f, preserving the order of the
    elements in a.
 
 
Functor
 
 
module type S = sig .. end
Similar to module type of Array, except for fold operations.
 
 
module Make: 
Functor building an implementation with no optional parameter,
    thus compatible with the Array module (except for fold
    operations).