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]].
  • 若选择相兼容的 combParallelCombine[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)

f 并行作用到列表的4个块中 (存在4个并行内核):

显示每次计算发生的位置:

默认情况下,Join 作为一个组合器(combiner)函数使用:

执行一次并行过滤操作:

范围  (9)

可列表函数  (1)

所有 Listable 函数可以使用 ParallelCombine 并行化:

如果该函数不是 Listable,则使用一个显式的 Map

保结构函数  (3)

许多函数型程序结构可以使用 ParallelCombine 并行化:

该结果不必具有与输入相同的长度:

并行计算列表元素:

简化(Reductions)  (3)

匹配元素的完全统计等于部分统计的和:

如果一个元素出现在至少一个块中,则它出现在列表中:

如果一个元素不出现在任何块中,则它不出现在列表中:

相关函数  (2)

每个子内核执行较少的加法运算,而组合器把结果组合起来:

自动为 Flat 函数挑选组合器:

典型 Flat 函数:

推广和延伸  (1)

一些变量组成的可列表函数:

选项  (11)

Method  (6)

把计算分成最小可能的子单元:

把计算分成与可使用内核相同数目的块:

对于整个任务,把计算分成最多每个内核两次计算:

把计算分成每次计算最多5个元素:

默认选项设置权衡计算规模和计算次数:

可视化每个内核的计算次数和每次计算的项:

DistributedContexts  (5)

默认情况下,当前上下文的定义会自动分配:

没有分配任何函数的定义:

分配出现在并行计算中的所有上下文中的符号定义:

只分配给定上下文的定义:

恢复 DistributedContexts 选项的值为默认值:

应用  (3)

并行化简一个可结合的表达式:

求出一个计算是如何在内核中分配的:

MapThread 的一个并行版本:

属性和关系  (5)

ParallelMap 的一次执行结果:

对于可列表函数,ParallelCombineParallelMap 是等价的:

Parallelize 通过关于 ParallelCombine 实现:

许多数据并行命令的并行版本可以使用 ParallelCombine 轻松地编写:

当需要时,互动定义的函数自动分配到所有内核中:

手动分配定义且禁止自动分布:

现在,函数在并行内核中计算:

可能存在的问题  (2)

组合器(combiner)必须与部分结果兼容:

默认组合器是 Join,它对于类列表的结果是适当的:

函数可以简化短的参数列表,但不能简化长的参数列表:

部分表达式的这种简化可能导致不能进行并行计算:

为了阻止部分表达式的这种简化,只能在最后应用想要的函数:

Wolfram Research (2008),ParallelCombine,Wolfram 语言函数,https://reference.wolfram.com/language/ref/ParallelCombine.html (更新于 2010 年).

文本

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_2024_parallelcombine, author="Wolfram Research", title="{ParallelCombine}", year="2010", howpublished="\url{https://reference.wolfram.com/language/ref/ParallelCombine.html}", note=[Accessed: 21-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_parallelcombine, organization={Wolfram Research}, title={ParallelCombine}, year={2010}, url={https://reference.wolfram.com/language/ref/ParallelCombine.html}, note=[Accessed: 21-November-2024 ]}