ParallelCombine[f,h[e1,e2,…],comb]
并行计算 f[h[e1,e2,…]],将计算分配到所有并行内核上,并用 comb 组合产生的部分结果.
ParallelCombine[f,h[e1,e2, …]]
如果 h 有属性 Flat,等价于 ParallelCombine[f,h[e1,e2,…],h] ,其它情况下等价于ParallelCombine[f,h[e1,e2,…],Join].
ParallelCombine
ParallelCombine[f,h[e1,e2,…],comb]
并行计算 f[h[e1,e2,…]],将计算分配到所有并行内核上,并用 comb 组合产生的部分结果.
ParallelCombine[f,h[e1,e2, …]]
如果 h 有属性 Flat,等价于 ParallelCombine[f,h[e1,e2,…],h] ,其它情况下等价于ParallelCombine[f,h[e1,e2,…],Join].
更多信息和选项
- ParallelCombine[f,h[e1,…,en],comb] 形成表达式 f[h[e1,…,ek]],f[h[ek+1,…]], …, f[h[…,en]],在所有内核上计算这些表达式,并用 comb[r1,r2,…] 组合结果 ri.
- 缺省组合运算 Join 适用于函数 f,这样 f[h[e1,…,ek]] 的结果中包含头部 h. 这包含有属性 Listable 的所有函数.
- 对于有属性 Flat 的头部 h,缺省组合运算 h 实际上执行结合率 h[e1,…,en] = h[h[e1,…,ek],h[ek+1,…],…,h[…,en]].
- 若选择相兼容的 comb,ParallelCombine[f,h[e1,e2,…],comb] 等价于 f[h[e1,e2,…]].
- 如果没有内核,ParallelCombine 通常计算 f[h[e1,e2,…]].
- ParallelCombine 采用与 Parallelize 相同的 Method 选项. 可能的设置包括:
-
"CoarsestGrained" 将计算分解成尽可能多的可用内核 "FinestGrained" 将计算分解成尽可能小的子单元 "EvaluationsPerKernel"->e 将计算分解成每个内核最多 e 个部分 "ItemsPerEvaluation"->m 将计算分解成每个子单元最多 m 个运算 Automatic 在开销和负载均衡之间折中 - ParallelCombine 采用的 DistributedContexts 选项与 Parallelize 相同;默认值为 DistributedContexts:>$DistributedContexts.
- ProgressReporting 选项指定是否报告并行计算的进度.
- 默认值是 ProgressReporting:>$ProgressReporting.
范例
打开所有单元 关闭所有单元基本范例 (2)
ParallelCombine[f[#]&, {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, comb]ParallelCombine[Composition[Labeled[#, $KernelID]&, Framed, f], {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, comb]默认情况下,Join 作为一个组合器(combiner)函数使用:
ParallelCombine[# ^ 2&, {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}]ParallelCombine[Select[#, PrimeQ]&, {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}]范围 (9)
可列表函数 (1)
所有 Listable 函数可以使用 ParallelCombine 并行化:
ParallelCombine[Sqrt, Range[10]]ParallelCombine[Prime, Range[10]]如果该函数不是 Listable,则使用一个显式的 Map:
ParallelCombine[Map[f, #]&, {a, b, c, d, e, f}]保结构函数 (3)
许多函数型程序结构可以使用 ParallelCombine 并行化:
ParallelCombine[Map[f, #]&, {a, b, c, d, e, f}]ParallelCombine[Apply[f, #, 1]&, {{a, b, c}, {u, v, w}}]ParallelCombine[Cases[#, _ ? PrimeQ]&, Range[100]]ParallelCombine[Select[#, PrimeQ]&, Range[100]]ParallelCombine[Identity, Unevaluated[{1 + 1, 2 + 2, 3 + 3}]]简化(Reductions) (3)
相关函数 (2)
ParallelCombine[Identity, Unevaluated[a + b + c + d + e + f], comb]ParallelCombine[Identity, Unevaluated[a + b + c + d + e + f], Plus]自动为 Flat 函数挑选组合器:
ParallelCombine[Identity, Unevaluated[a + b + c + d + e + f]]典型 Flat 函数:
ParallelCombine[Identity, Unevaluated[1 + 2 + 3 + 4 + 5 + 6]]ParallelCombine[Identity, Unevaluated[1 * 2 * 3 * 4 * 5 * 6]]ParallelCombine[Identity, Unevaluated[Max[1, 2, 3, 4, 5, 6]]]ParallelCombine[Identity, Unevaluated[Min[1, 2, 3, 4, 5, 6]]]ParallelCombine[Identity, Unevaluated[GCD[1, 2, 3, 4, 5, 6]]]ParallelCombine[Identity, Unevaluated[LCM[1, 2, 3, 4, 5, 6]]]推广和延伸 (1)
选项 (11)
Method (6)
ParallelCombine[Labeled[Framed[#], $KernelID]&, Range[10], List, Method -> "FinestGrained"]ParallelCombine[Labeled[Framed[#], $KernelID]&, Range[10], List, Method -> "CoarsestGrained"]GatherBy[ParallelCombine[{$KernelID, #}&, Range[18], List, Method -> "EvaluationsPerKernel" -> 2], First]ParallelCombine[{$KernelID, Length[#]}&, Range[18], List, Method -> "ItemsPerEvaluation" -> 5]ParallelCombine[{$KernelID, Length[#]}&, Range[40], List, Method -> Automatic]Manipulate[batches = ParallelCombine[{$KernelID, Length[#]}&, Range[items], List, Method -> method];
BarChart[Map[Labeled[#, #, Center]&, Last /@ Sort[{#[[1, 1]], Last /@ #}& /@ GatherBy[batches, First]], {2}], ChartLayout -> "Stacked"],
{method, {"FinestGrained", "CoarsestGrained", Automatic}},
{items, 1, 100, 1}, SaveDefinitions -> True]DistributedContexts (5)
remote[x_] := {$KernelID, Length[x]}ParallelCombine[remote, Range[39], List]local[x_] := {$KernelID, Length[x]}ParallelCombine[local, Range[38], List, DistributedContexts -> None]a`f[x_] := {$KernelID, Length[x]}ParallelCombine[a`f, Range[37], List, DistributedContexts -> Automatic]b`f[x_] := {$KernelID, Length[x]}ParallelCombine[b`f, Range[36], List, DistributedContexts -> {"a`"}]恢复 DistributedContexts 选项的值为默认值:
SetOptions[ParallelCombine, DistributedContexts :> $DistributedContexts]应用 (3)
ParallelCombine[Identity, Unevaluated[1 + 2 + 3 + 4 + 5 + 6 + 7 + 8]]ParallelCombine[{$KernelID, Length[#]}&, Range[20], List]MapThread 的一个并行版本:
parallelMapThread[f_, args_List] := ParallelCombine[f@@@#&, Transpose[args]]parallelMapThread[f, {{a, b, c}, {u, v, w}, {x, y, z}}]属性和关系 (5)
ParallelMap 的一次执行结果:
ParallelCombine[Map[f, #]&, {a, b, c, d, e}]对于可列表函数,ParallelCombine 和 ParallelMap 是等价的:
ParallelCombine[Sin, Range[0.0, 1, 0.1]]ParallelMap[Sin, Range[0.0, 1, 0.1]]Parallelize 通过关于 ParallelCombine 实现:
Parallelize[Count[Range[20], _ ? PrimeQ]]ParallelCombine[Count[#, _ ? PrimeQ]&, Range[20], Plus]Parallelize[Select[Range[100], PrimeQ]]ParallelCombine[Select[#, PrimeQ]&, Range[100]]许多数据并行命令的并行版本可以使用 ParallelCombine 轻松地编写:
parallelCount[range_, patt_] := ParallelCombine[Count[#, patt]&, range, Plus]parallelCount[Range[10000], _ ? PrimeQ]ftest[n_] := Labeled[Framed[PrimeQ[2 ^ n - 1]], $KernelID]ParallelCombine[ftest /@ #&, Range[1275, 1285]]gtest[n_] := Labeled[Framed[PrimeQ[2 ^ n - 1]], $KernelID]DistributeDefinitions[gtest];ParallelCombine[gtest /@ #&, Range[1275, 1285], DistributedContexts -> None]可能存在的问题 (2)
ParallelCombine[Count[#, _ ? PrimeQ]&, Range[100], Plus]默认组合器是 Join,它对于类列表的结果是适当的:
ParallelCombine[Cases[#, _ ? PrimeQ]&, Range[100]]{Xnor[a], Xnor[b, c], Xnor[d, e, f]}ParallelCombine[Map[fun, #]&, Xnor[a, b, c, d, e, f], Join]Xnor@@ParallelCombine[Map[fun, #]&, {a, b, c, d, e, f}, Join]相关的工作流程
- 执行并行计算
文本
Wolfram Research (2008),ParallelCombine,Wolfram 语言函数,https://reference.wolfram.com/language/ref/ParallelCombine.html (更新于 2010 年).
CMS
Wolfram 语言. 2008. "ParallelCombine." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2010. https://reference.wolfram.com/language/ref/ParallelCombine.html.
APA
Wolfram 语言. (2008). ParallelCombine. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/ParallelCombine.html 年
BibTeX
@misc{reference.wolfram_2026_parallelcombine, author="Wolfram Research", title="{ParallelCombine}", year="2010", howpublished="\url{https://reference.wolfram.com/language/ref/ParallelCombine.html}", note=[Accessed: 02-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_parallelcombine, organization={Wolfram Research}, title={ParallelCombine}, year={2010}, url={https://reference.wolfram.com/language/ref/ParallelCombine.html}, note=[Accessed: 02-November-2026]}