ParallelEvaluate[expr]
在所有并行内核上计算表达式 expr,并返回得到结果的列表.
ParallelEvaluate[expr,kernel]
在指定的并行内核上计算 expr.
ParallelEvaluate[expr,{ker1,ker2,…}]
在并行内核 keri 上计算 expr.
ParallelEvaluate[expr,kernels,h]
在返回结果之前将标头 h 封装在结果周围.
ParallelEvaluate
ParallelEvaluate[expr]
在所有并行内核上计算表达式 expr,并返回得到结果的列表.
ParallelEvaluate[expr,kernel]
在指定的并行内核上计算 expr.
ParallelEvaluate[expr,{ker1,ker2,…}]
在并行内核 keri 上计算 expr.
ParallelEvaluate[expr,kernels,h]
在返回结果之前将标头 h 封装在结果周围.
更多信息和选项
- ParallelEvaluate 有属性 HoldFirst.
- 可用 KernelObject(由 Kernels[] 返回)或内核的整数 ID(由 $KernelID 返回)指定内核. 也可以使用 All.
- 以下属性也可用于选择所有运行内核的一个子集:
-
All 所有内核 "CloudKernels" 所有云内核 "LinkKernels" 所有链接的内核 "LocalKernels" 本地运行的所有内核 "LWGKernels" 所有 LightweightGrid 内核 "OneKernelPerMachine" 每个不同的机器都有一个内核 "RemoteKernels" 远程机器上的所有内核 "SshKernels" 所有 SSH 内核 "WSTPServerKernels" 所有 WSTPServer 内核 - ParallelEvaluate 的 DistributedContexts 选项指定在开始计算之前,自动将哪些出现在 expr 中的符号的定义分配到所有可用的内核上.
- 默认情况下,DistributedContexts:>$DistributedContexts,同时 $DistributedContexts:=$Context,会将所有符号按当前情形下的定义进行分配,但不会分配从程序包中来的符号的定义.
范例
打开所有单元 关闭所有单元基本范例 (1)
范围 (9)
使用 ParallelEvaluate 在所有并行内核上执行初始化:
ParallelEvaluate[$RecursionLimit = 500]ParallelEvaluate[f[n_] := n ^ 2]ParallelTable[f[i], {i, 10}]ParallelEvaluate[TimeUsed[]]ParallelEvaluate[$InstallationDirectory, First[Kernels[]]]ParallelEvaluate[ByteCount[lp = ExampleData[{"LinearProgramming", "afiro"}]]]ParallelEvaluate[Save["results-" <> ToString[$KernelID] <> ".m", result]]ParallelEvaluate[FileNames["results-*.m"]]getID := $KernelIDParallelEvaluate[getID, DistributedContexts -> None]ParallelEvaluate[getID, All, Hold, DistributedContexts -> None]ParallelEvaluate[$MachineName, "OneKernelPerMachine"]ParallelEvaluate[$ProcessID, "LocalKernels"]ParallelEvaluate[$Version, "LWGKernels"]推广和延伸 (2)
Kernels[]ParallelEvaluate[$ProcessID, %[[1]]]ParallelEvaluate[$ProcessID, 1]ParallelEvaluate[$KernelID, {1, 2, 3}]All 可用来指定所有可用内核:
ParallelEvaluate[$KernelID]ParallelEvaluate[$KernelID, All]ParallelEvaluate[$KernelID, Kernels[]]选项 (5)
DistributedContexts (5)
remote[] := {$KernelID}ParallelEvaluate[remote[]]local[] := {$KernelID}ParallelEvaluate[local[], DistributedContexts -> None]a`f[] := {$KernelID}ParallelEvaluate[a`f[], DistributedContexts -> Automatic]b`g[] := {$KernelID}ParallelEvaluate[b`g[], DistributedContexts -> {"a`"}]把 DistributedContexts 选项的值恢复到缺省值:
SetOptions[ParallelEvaluate, DistributedContexts :> $DistributedContexts]应用 (4)
TableForm[ParallelEvaluate[{$KernelID, $MachineName, $SystemID, $VersionNumber, $ProcessID, TimeUsed[], MaxMemoryUsed[], "ProcessPriority" /. SystemOptions["ProcessPriority"]}], TableHeadings -> {None, {"ID", "host", "OS", "Version", "Process", "CPU Time", "Memory", "Priority"}}, TableDepth -> 2]通过在所有并行内核上运行相同的代码,并行化一个蒙特卡罗模拟:
With[{n = 10 ^ 5}, ParallelEvaluate[4.0 Count[RandomReal[{0, 1}, {n, 2}], xy_ /; Norm[xy] < 1] / n]]Mean[%]ParallelEvaluate[mat = RandomReal[{-1, 1}, {2000, 2000}];]ParallelEvaluate[Timing[inv = Inverse[mat];]]Module[{x}, poly[n_, x_ : x] := Underoverscript[∑, i = 1, n + 1]i x^i - 1]poly[10, x]d = 200;results = {};
SetSharedVariable[d, results];
DistributeDefinitions[poly];PrintTemporary[Dynamic[{d, results}]];
CheckAbort[ParallelEvaluate[While[True,
With[{d = d++}, If[!IrreduciblePolynomialQ[poly[d]], AppendTo[results, d]]]
]], {d, results}]属性和关系 (5)
ParallelEvaluate 在每个子内核上执行相同的计算:
ParallelEvaluate@Table[foo[i], {i, 3}]Parallelize 把一个计算的每个部分分配到每个子内核:
Parallelize@Table[foo[i], {i, 3}]ParallelEvaluate[N[Pi]]ParallelEvaluate[RandomReal[]]通过设置 SeedRandom,产生相同的结果:
ParallelEvaluate[SeedRandom[123]];ParallelEvaluate[RandomReal[]]ParallelEvaluate[$KernelID]DistributeDefinitions 使用 ParallelEvaluate 把定义传输给所有内核:
f[n_] := PrimeQ[2 ^ n - 1]DistributeDefinitions[f];一个显式的 ParallelEvaluate 执行同样的操作:
ParallelEvaluate[g[n_] := PrimeQ[2 ^ n + 1]];ParallelTable[Through[{f, g}[i]], {i, 10}, DistributedContexts -> None]CloseKernels[];LaunchKernels[];不记录 ParallelEvaluate 的效果:
ParallelTable[Through[{f, g}[i]], {i, 10}, DistributedContexts -> None]ParallelNeeds 使用 ParallelEvaluate 在所有并行内核上运行 Needs:
Needs["ComputerArithmetic`"]ParallelNeeds["ComputerArithmetic`"]CloseKernels[];LaunchKernels[];ParallelEvaluate[Ulp[$MaxMachineNumber]]ParallelEvaluate 自动分配使用的函数定义:
ftest[n_] := Labeled[Framed[PrimeQ[2 ^ n - 1]], $KernelID]ParallelEvaluate[{#, ftest[#]}&[RandomInteger[20]]]可能存在的问题 (2)
i = 0;
ParallelEvaluate[i++]SetSharedVariable[j];j = 0;ParallelEvaluate[j++]j在用 ParallelEvaluate 进行定义时抑制定义的自动分配:
f[n_ ? EvenQ] := n ^ 3ParallelEvaluate[f[n_] := n ^ 2, DistributedContexts -> None]ParallelTable[f[i], {i, 10}, DistributedContexts -> None]巧妙范例 (2)
n = 1;primes = {}; SetSharedVariable[n, primes];PrintTemporary[Dynamic[{n, primes}]];
CheckAbort[
ParallelEvaluate[While[True,
With[{n = n++}, If[PrimeQ[n! + 1], AppendTo[primes, n]]]]],
{n, primes}]ParallelEvaluate[$MachineName]ParallelEvaluate[ResourceFunction["ColorToHex"], "OneKernelPerMachine"]ParallelEvaluate[ResourceFunction["ColorToHex"][Red]]相关的工作流程
- 执行并行计算
文本
Wolfram Research (2008),ParallelEvaluate,Wolfram 语言函数,https://reference.wolfram.com/language/ref/ParallelEvaluate.html (更新于 2020 年).
CMS
Wolfram 语言. 2008. "ParallelEvaluate." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2020. https://reference.wolfram.com/language/ref/ParallelEvaluate.html.
APA
Wolfram 语言. (2008). ParallelEvaluate. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/ParallelEvaluate.html 年
BibTeX
@misc{reference.wolfram_2026_parallelevaluate, author="Wolfram Research", title="{ParallelEvaluate}", year="2020", howpublished="\url{https://reference.wolfram.com/language/ref/ParallelEvaluate.html}", note=[Accessed: 03-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_parallelevaluate, organization={Wolfram Research}, title={ParallelEvaluate}, year={2020}, url={https://reference.wolfram.com/language/ref/ParallelEvaluate.html}, note=[Accessed: 03-November-2026]}