ParallelEvaluate

ParallelEvaluate[expr]

evaluates the expression expr on all available parallel kernels and returns the list of results obtained.

ParallelEvaluate[expr,kernel]

evaluates expr on the parallel kernel specified.

ParallelEvaluate[expr,{ker1,ker2,}]

evaluates expr on the parallel kernels keri.

ParallelEvaluate[expr,kernels,h]

wraps the head h around the results before returning them.

Details and Options

  • ParallelEvaluate has attribute HoldFirst.
  • Kernels can be specified either using KernelObject, as returned by Kernels[], or using their integer IDs, as returned by $KernelID. All can also be used.
  • The following properties can also be used to select a subset of all running kernels:
  • Allall kernels
    "CloudKernels"all cloud kernels
    "LocalKernels"all kernels running locally
    "LWGKernels"all LightweightGrid kernels
    "OneKernelPerMachine"one kernel for each different machine
    "RemoteKernels"all kernels on remote machines
    "SshKernels"all SSH kernels
    "WSTPServerKernels"all WSTPServer kernels
  • The DistributedContexts option for ParallelEvaluate specifies which symbols appearing in expr have their definitions automatically distributed to all available kernels before the computation.
  • The default value is DistributedContexts:>$DistributedContexts with $DistributedContexts:=$Context, which distributes definitions of all symbols in the current context, but does not distribute definitions of symbols from packages.

Examples

open allclose all

Basic Examples  (1)

Obtain each parallel kernel's unique ID number:

Obtain each parallel kernel's system process ID:

Scope  (9)

Use ParallelEvaluate to perform initializations on all parallel kernels:

Make definitions of local functions on all parallel kernels:

Obtain local properties of all parallel kernels:

Obtain a local property from a single kernel:

Access data from sources local to the parallel kernels:

Save results computed on the parallel kernels locally in unique files:

Verify that the files have been written:

Prevent local reevaluation of results returned from subkernels:

Run an evaluation on only one kernel per machine:

Run an evaluation only on all local kernels:

Run an evaluation only on all LightweightGrid kernels:

Generalizations & Extensions  (2)

Specify the kernels to query by a kernel object or a kernel ID:

Query several kernels:

All can be used to specify all available kernels:

All is equivalent to Kernels[]:

Options  (5)

DistributedContexts  (5)

By default, definitions in the current context are distributed automatically:

Do not distribute any definitions of functions:

Distribute definitions for all symbols in all contexts appearing in a parallel computation:

Distribute only definitions in the given contexts:

Restore the value of the DistributedContexts option to its default:

Applications  (4)

Tabulate properties of all parallel kernels:

Parallelize a Monte Carlo simulation by running the same code on all parallel kernels:

Combine the individual averages for a more accurate overall result:

Store large intermediate results locally on each parallel kernel:

Work with data stored locally:

Check whether all of these polynomials are irreducible:

Shared variables used for synchronization:

Run one search loop on each kernel until the computation is aborted:

Properties & Relations  (5)

ParallelEvaluate performs the same evaluation on each subkernel:

Parallelize distributes parts of an evaluation to each subkernel:

Deterministic calculations give the same result on each parallel kernel:

Calculations involving randomness give independent results on each parallel kernel:

Force the same result by setting SeedRandom:

Each parallel kernel has a distinct ID, which can be used to make expressions unique:

DistributeDefinitions uses ParallelEvaluate to transport definitions to all kernels:

An explicit ParallelEvaluate does the same:

Distributed definitions are remembered for new kernels:

The effects of ParallelEvaluate are not remembered:

ParallelNeeds uses ParallelEvaluate to run Needs on all parallel kernels:

Additionally all uses are remembered, so that new kernels also load needed packages:

ParallelEvaluate automatically distributes definitions of functions used:

Possible Issues  (2)

Side effects cannot be used between different parallel kernels:

Use a shared variable to support side effects:

Suppress the automatic distribution of definitions when making definitions with ParallelEvaluate:

Neat Examples  (2)

Find such that is prime, until the computation is manually aborted:

Given multiple running kernels on many different machines:

Load a resource function into the cache on each machine only once:

Use the resource function in all kernels:

Wolfram Research (2008), ParallelEvaluate, Wolfram Language function, https://reference.wolfram.com/language/ref/ParallelEvaluate.html (updated 2020).

Text

Wolfram Research (2008), ParallelEvaluate, Wolfram Language function, https://reference.wolfram.com/language/ref/ParallelEvaluate.html (updated 2020).

CMS

Wolfram Language. 2008. "ParallelEvaluate." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2020. https://reference.wolfram.com/language/ref/ParallelEvaluate.html.

APA

Wolfram Language. (2008). ParallelEvaluate. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/ParallelEvaluate.html

BibTeX

@misc{reference.wolfram_2023_parallelevaluate, author="Wolfram Research", title="{ParallelEvaluate}", year="2020", howpublished="\url{https://reference.wolfram.com/language/ref/ParallelEvaluate.html}", note=[Accessed: 18-March-2024 ]}

BibLaTeX

@online{reference.wolfram_2023_parallelevaluate, organization={Wolfram Research}, title={ParallelEvaluate}, year={2020}, url={https://reference.wolfram.com/language/ref/ParallelEvaluate.html}, note=[Accessed: 18-March-2024 ]}