Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Cognates

See Cognates for an introduction.

The following symbols are exported by the lparallel.cognate package as well as by the convenience package lparallel .


[macro] pand &rest forms

Parallel version of `and’. Forms in `forms’ may be executed in parallel, though not necessarily at the same time. If all forms evaluate to true, then the result of any form may be returned.

[function] pcount item sequence &key from-end start end key test test-not parts

Parallel version of `count’.

The `parts’ option divides `sequence’ into `parts’ number of parts. Default is (kernel-worker-count).

[function] pcount-if predicate sequence &key from-end start end key parts

Parallel version of `count-if’.

The `parts’ option divides `sequence’ into `parts’ number of parts. Default is (kernel-worker-count).

[function] pcount-if-not predicate sequence &rest args &key from-end start end key parts

Parallel version of `count-if-not’.

The `parts’ option divides `sequence’ into `parts’ number of parts. Default is (kernel-worker-count).

[macro] pdotimes (var count &optional result parts) &body body

Parallel version of `dotimes’.

The `parts’ option divides the integer range into `parts’ number of parts. Default is (kernel-worker-count).

Unlike `dotimes’, `pdotimes’ does not define an implicit block named nil.

[function] pevery predicate &rest sequences

Parallel version of `every’. Calls to `predicate’ are done in parallel, though not necessarily at the same time. Behavior is otherwise indistinguishable from `every’.

Keyword arguments `parts’ and `size’ are also accepted (see `pmap’).

[function] pfind item sequence &rest args &key from-end test test-not start end key parts

Parallel version of `pfind’.

The `parts’ option divides `sequence’ into `parts’ number of parts. Default is (kernel-worker-count).

[function] pfind-if predicate sequence &rest args &key from-end start end key parts

Parallel version of `pfind-if’.

The `parts’ option divides `sequence’ into `parts’ number of parts. Default is (kernel-worker-count).

[function] pfind-if-not predicate sequence &rest args &key from-end start end key parts

Parallel version of `pfind-if-not’.

The `parts’ option divides `sequence’ into `parts’ number of parts. Default is (kernel-worker-count).

[macro] pfuncall function &rest args

Parallel version of `funcall’. Arguments in `args’ may be executed in parallel, though not necessarily at the same time.

[macro] plet bindings &body body

The syntax of `plet’ matches that of `let’.

plet ({var-no-init | (var [init-form]) | ((var1 var2 …) [init-form])}*) declaration* form*

For each (var init-form) pair, a future is created which executes `init-form’. Inside `body’, `var’ is a symbol macro which expands to a `force’ form for the corresponding future.

Likewise, each ((var1 var2 …) init-form) pair creates a future where `var1′, `var2′,… are bound to the respective multiple return values of `init-form’.

Each `var-no-init’ is bound to nil and each variable without a corresponding `init-form’ is bound to nil (no future is created).

Type declarations for vars are recognized by `plet’ and incorporated into the final expansion. The semantics of these declarations are the same as those of a regular `let’ form.

`plet’ is subject to optimization inside `defpun’.

[macro] plet-if predicate bindings &body body

The syntax of `plet-if’ matches that of `plet’ except for the addition of the `predicate’ form.

If `predicate’ evaluates to true, the behavior is the same as `plet’.

If `predicate’ evaluates to false, the behavior is the same as `slet’.

`plet-if’ is subject to optimization inside `defpun’.

[function] pmap result-type function &rest sequences

Parallel version of `map’. Keyword arguments `parts’ and `size’ are also accepted.

The `parts’ option divides each sequence into `parts’ number of parts. Default is (kernel-worker-count).

The `size’ option limits the number of elements mapped to `size’. When given, no `length’ calls are made on the sequence(s) passed.

Warning: `size’ must be less than or equal to the length of the smallest sequence passed. It is unspecified what happens when that condition is not met.

[function] pmap-into result-sequence function &rest sequences

Parallel version of `map-into’. Keyword arguments `parts’ and `size’ are also accepted (see `pmap’).

[function] pmap-reduce map-function reduce-function sequence &rest args &key start end initial-value parts recurse

Equivalent to (preduce reduce-function sequence :key map-function …).

[function] pmapc function &rest lists

Parallel version of `mapc’. Keyword arguments `parts’ and `size’ are also accepted (see `pmap’).

[function] pmapcan function &rest lists

Parallel version of `mapcan’. Keyword arguments `parts’ and `size’ are also accepted (see `pmap’).

[function] pmapcar function &rest sequences

Parallel version of `mapcar’. Keyword arguments `parts’ and `size’ are also accepted (see `pmap’).

Unlike `mapcar’, `pmapcar’ also accepts vectors.

[function] pmapcon function &rest lists

Parallel version of `mapcon’. Keyword arguments `parts’ and `size’ are also accepted (see `pmap’).

[function] pmapl function &rest lists

Parallel version of `mapl’. Keyword arguments `parts’ and `size’ are also accepted (see `pmap’).

[function] pmaplist function &rest lists

Parallel version of `maplist’. Keyword arguments `parts’ and `size’ are also accepted (see `pmap’).

[function] pmaplist-into result-list function &rest lists

Like `pmaplist’ but results are stored in `result-list’. Keyword arguments `parts’ and `size’ are also accepted (see `pmap’).

[function] pnotany predicate &rest sequences

Parallel version of `notany’. Calls to `predicate’ are done in parallel, though not necessarily at the same time. Behavior is otherwise indistinguishable from `notany’.

Keyword arguments `parts’ and `size’ are also accepted (see `pmap’).

[function] pnotevery predicate &rest sequences

Parallel version of `notevery’. Calls to `predicate’ are done in parallel, though not necessarily at the same time. Behavior is otherwise indistinguishable from `notevery’.

Keyword arguments `parts’ and `size’ are also accepted (see `pmap’).

[macro] por &rest forms

Parallel version of `or’. Forms in `forms’ may be executed in parallel, though not necessarily at the same time. Any form which evaluates to non-nil may be returned.

[function] preduce function sequence &rest args &key key from-end start end initial-value parts recurse

Parallel version of `reduce’.

`preduce’ subdivides the input sequence into `parts’ number of parts and, in parallel, calls `reduce’ on each part. The partial results are then reduced again, either by `reduce’ (the default) or, if `recurse’ is non-nil, by `preduce’.

`parts’ defaults to (kernel-worker-count).

`key’ is thrown out while reducing the partial results. It applies to the first pass only.

`start’ and `end’ have the same meaning as in `reduce’.

`from-end’ means “from the end of each part”.

`initial-value’ means “initial value of each part”.

[function] preduce-partial function sequence &rest args &key key from-end start end initial-value parts

Like `preduce’ but only does a single reducing pass.

The length of `sequence’ must not be zero.

Returns the partial results as a vector.

[function] premove item sequence &rest args &key test test-not from-end start end key parts

Parallel version of `remove’. Note the `count’ option is not supported.

The `parts’ option divides `sequence’ into `parts’ number of parts. Default is (kernel-worker-count).

[function] premove-if test sequence &rest args &key from-end start end key parts

Parallel version of `remove-if’. Note the `count’ option is not supported.

The `parts’ option divides `sequence’ into `parts’ number of parts. Default is (kernel-worker-count).

[function] premove-if-not test sequence &rest args &key from-end start end key parts

Parallel version of `remove-if-not’. Note the `count’ option is not supported.

The `parts’ option divides `sequence’ into `parts’ number of parts. Default is (kernel-worker-count).

[function] psome predicate &rest sequences

Parallel version of `some’. Calls to `predicate’ are done in parallel, though not necessarily at the same time. Behavior is otherwise indistinguishable from `some’ except that any non-nil predicate comparison result may be returned.

Keyword arguments `parts’ and `size’ are also accepted (see `pmap’).

[function] psort sequence predicate &key key granularity &allow-other-keys

Parallel version of `sort’.

If `granularity’ is provided then parallel tasks are created only for segments larger than `granularity’. This may or may not result in better performance.

At present `psort’ is only parallelized for vectors; other types are given to `cl:sort’.

[macro] slet bindings &body body

`slet’ (serial let) is the non-parallel counterpart to `plet’.

The syntax of `slet’ matches that of `plet’, which includes the ability to bind multiple values.