Mathematica 9 is now available
THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.
Mathematica > 系统界面与配置 > 并行计算 > 数据并行化 > ParallelMap >
Mathematica > 核心语言 > 调整和调试 > 并行计算 > 数据并行化 > ParallelMap >

ParallelMap

ParallelMap
f 并行作用在 expr 第一层的元素上.
ParallelMap
f 并行作用在 levelspec 指定 expr 的部分元素上.
  • ParallelMap 是一个并行的 Map,将 f 作用在不同的内核和处理器之间.
  • ParallelMap 将给出和 Map 相同的结果,除了计算过程中的副作用.
  • ParallelMap 用和 Map 相同的层指定,并非所有指定可以并行化.
ParallelMapMap 工作方式相似,不同之处在于并行:
ParallelMap 对于任何函数都适用:
用明确的纯函数:
互动式定义的函数可以立即并行使用:
ParallelMapMap 工作方式相似,不同之处在于并行:
In[1]:=
Click for copyable input
Out[1]=
In[2]:=
Click for copyable input
Out[2]=
 
ParallelMap 对于任何函数都适用:
In[1]:=
Click for copyable input
Out[1]=
用明确的纯函数:
In[2]:=
Click for copyable input
Out[2]=
 
互动式定义的函数可以立即并行使用:
In[1]:=
Click for copyable input
In[2]:=
Click for copyable input
Out[2]=
在第一层映射(默认):
映射下降到第二层:
在第二层映射:
映射下降到第三层:
在所有层上映射,从第一层开始:
负数层:
正数层和负数层可以混合:
在每个层上的不同头部(head):
不是所有层都可以被并行化:
ParallelMap 可以用于具有任意头部的表达式中:
具有属性 Listable 的函数被自动映射:
把计算分成最小可能的子单元:
把计算分成与可用内核相同数目的块:
对于整个任务,把计算分成每个内核最多两次计算:
把计算分成最次计算最多含有5个元素:
默认选项设置在计算规模和计算次数之间折中:
具有很大差异的运行时间的计算应该被尽可能精细地并行化:
大量简单计算应该被分配成尽可能少的批次:
默认情况下,当前上下文的定义会自动分配:
没有分配任何函数的定义:
分配出现在并行计算中的所有上下文中的符号定义:
只分配给定上下文的定义:
恢复 DistributedContexts 选项的值为默认值:
查看求得的结果:
求解算术难题:
以符号形式写出:
对每个字母指定一个数字:
并且把每个单词解释为一个以10为基数的数字:
自动检查一个特定的数字赋值:
为了系统地求解该赋值,首先获取字母列表:
用户可以通过考虑8个数字的所有子集的全排列来求解该难题:
对它进行并行化处理:
通常只考虑满足 的解:
一旦使用 ParallelTry 找到一个非平凡解,用户也可以停止搜索:
并行化出现在使用的最外层上:
Map 实际使用 ParallelMap,可以被自动并行化:
显示具有已知大小的任务的负载平衡的效果:
定义大量具有已知运行时间的任务:
测量并行执行的时间:
得到的加速(越大越好):
最精颗粒度的调用(Finest-grained scheduling)给出更好的负载平衡和更高的加速:
首先调用大型任务产生更好的结果:
关于一些变量的函数可以使用 MapThread 映射:
通过使用 Parallelize 获取一个并行版本:
MapIndexed 把一个元素的索引传递给被映射的函数:
通过使用 Parallelize 获取一个并行版本:
ScanMap 作用相同,但是不返回结果:
当需要时,互动式定义的函数会自动分配到所有内核:
手动分配定义并禁止自动分配:
对于来自于程序包的函数,使用 ParallelNeeds 而不是 DistributeDefinitions
如果一个层次指定阻止了并行化的运行,ParallelMap 的计算类似 Map
副作用不可以在并行映射的函数中使用:
使用一个共享变量来支持副作用:
在并行内核上未知的一个函数可能导致串行计算:
在所有并行内核上定义该函数:
现在,该函数在并行内核上计算:
当前上下文的定义是自动分布的:
来自于不是默认上下文的定义不会自动分配:
使用 DistributeDefinitions 分配该类定义:
或者,设置 DistributedContexts 选项包括所有上下文:
当并行化时,平凡操作可能需要更长时间:
测量最小并行通讯开销:
与在主内核上进行的简单计算相比较:
函数可以简化短的参数列表,但不能简化长的参数列表:
部分表达式的这种简化可能导致并行映射不能进行:
为了阻止部分表达式的这种简化,只能在最后应用想要的函数:
版本 7 的新功能 | 版本 8 修改功能
Ask a question about this page  |  Suggest an improvement  |  Leave a message for the team
格式:   HTML  |  CDF