SET-PARALLEL-EXECUTION.html -- ACL2 Version 6.3

## SET-PARALLEL-EXECUTION

for ACL2(p): enabling parallel execution for four parallelism primitives

    Major Section:  SWITCHES-PARAMETERS-AND-MODES

This documentation topic relates to the experimental extension of ACL2 supporting parallel execution and proof; see parallelism. See parallelism-tutorial for an introduction to parallel execution in ACL2.

    General Forms:
    (set-parallel-execution nil) ; default for images not built for parallelism
    (set-parallel-execution t)   ; default for images built for parallelism
    (set-parallel-execution :bogus-parallelism-ok)

`Set-parallel-execution` takes an argument that specifies the enabling or disabling of parallel execution for the primitives `pand`, `por`, `plet`, and `pargs` (but not `spec-mv-let`, whose parallel execution remains enabled). However, without using `top-level`, calls of parallelism primitives made explicitly in the ACL2 top-level loop, as opposed to inside function bodies, will never cause parallel execution; see parallelism-at-the-top-level. Parallel execution is determined by the value of the argument to `set-parallel-execution`, as follows.

Value `t`:
All parallelism primitives used in bodies of function definitions are given the opportunity to execute in parallel. However, the use of parallelism primitives directly in the ACL2 top-level loop causes an error.

Value `:bogus-parallelism-ok`:
Parallel execution is enabled, as for value `t`. However, the use of parallelism primitives directly in the ACL2 top-level loop does not cause an error, but rather, simply results in serial execution for these primitives.

Value `nil`:
All parallelism primitives degrade to their serial equivalents, including their calls made directly in the ACL2 top-level loop. Thus, uses of parallelism primitives do not in themselves cause errors.