产品
产品概览
Mathematica
Mathematica 学生版
Mathematica Home Edition
Wolfram
CDF Player
(免费下载)
可计算文档格式(CDF)
web
Mathematica
grid
Mathematica
Wolfram
Workbench
Wolfram
SystemModeler
Wolfram
Finance Platform
Mathematica
附加程序包
Wolfram|Alpha 产品
解决方案
解决方案概览
工程
航空航天与国防
化学工程
控制系统
电气工程
图像处理
工业工程
材料科学
机械工程
运筹学
光学
石油工程
生物技术与医药
生物信息学
医学影像
金融、统计、商业分析
精算科学
数据分析与挖掘
计量经济学
经济学
金融工程与数学
金融风险管理
统计
软件工程、内容传递
创作与出版
界面开发
软件工程
网页开发
科学
天文学
生物科学
化学
环境科学
地球科学
社会与行为科学
设计、艺术以及娱乐
游戏设计、特殊效果及衍生艺术
教育
STEM 教育倡议
高等教育
高职高专院校
中小学教育
学生
科技
可计算文档格式(CDF)
高性能并行计算(HPC)
参见:技术指南
购买
网上商店
其它购买方式
批量许可及站点许可证
联络销售部
软件
服务
升级
培训
书籍
Merchandise
技术支持
技术支持概览
Mathematica
参考资料
知识库
学习中心
技术服务
社区与论坛
培训
查看站点是否有许可证授权
Wolfram 用户门户
公司概况
关于 Wolfram Research
新闻
活动
Wolfram 博客
合作伙伴
工作机会
Mathematica
的历史
Stephen Wolfram 主页
联系我们
公司网站
全部站点
Wolfram|Alpha
演示项目
MathWorld
Integrator
Wolfram Functions Site
Mathematica Journal
Wolfram Media
Wolfram
Tones
Wolfram Science
Stephen Wolfram
THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE
DOCUMENTATION CENTER
FOR THE LATEST INFORMATION.
DOCUMENTATION CENTER SEARCH
New to
Mathematica
?
Find your learning path
»
Mathematica
>
系统界面与配置
>
并行计算
>
Parallelize
>
Mathematica
>
核心语言
>
调整和调试
>
并行计算
>
Parallelize
>
MATHEMATICA 内置符号
ParallelEvaluate
ParallelTry
Kernels
LaunchKernels
DistributeDefinitions
参见 »
|
数据并行化
并行计算
7.0版本的新功能概要
调整和调试
7.0的新功能: 字母列表
7.0的新功能: 核心语言
7.0的新功能: 系统界面和配置
8.0的新功能:核心语言
8.0的新功能:系统界面和部署
更多关于 »
Parallelize
Parallelize
[
expr
]
自动并行计算
expr
.
更多信息
Parallelize
[
expr
]
在不同的内核和处理器之间分配不同的
expr
计算部分.
Parallelize
[
expr
]
通常给出计算
expr
相同的结果,除了在计算中产生副作用外.
Parallelize
有属性
HoldFirst
,这样在并行之前不会计算表达式.
Parallelize
的
Method
选项指定使用的并行方法. 包括:
"CoarsestGrained"
按照现有内核,将计算分成相同数量的段
"FinestGrained"
将计算分成最小的子单元
"EvaluationsPerKernel"->
e
将计算分成每个内核最多
e
段
"ItemsPerEvaluation"->
m
将计算分成每个内核最多
m
个子单元
Automatic
在总开销和负载平衡之间的折中
Method
适用于涉及多个子单元的计算,所有子单元采用相同的时间计算. 将总开销降到最低,不提供任何负载均衡.
Method
适用于少量子单元的计算,子单元采用不同的时间计算. 它提高总开销,但最大化了负载均衡.
Parallelize
的
DistributedContexts
选项指定出现在
expr
的哪个符号可以在计算前自动分配它们的定义到所有可用的内核.
默认值为
DistributedContexts
:>
$Context
,分配当前上下文的所有符号的定义,但是不分配来自于程序包的符号定义.
范例
关闭所有单元
例
(3)
并行对一个函数进行映射:
并行地产生一个表格:
交互式定义的函数可以立即被并行使用:
并行对一个函数进行映射:
In[1]:=
Out[1]=
并行地产生一个表格:
In[1]:=
Out[1]=
交互式定义的函数可以立即被并行使用:
In[1]:=
In[2]:=
Out[2]=
范围
(12)
当应用到一个列表时,所有具有一个变量的可列表函数将自动地并行化:
隐式定义列表:
许多保存列表结构的函数型程序结构并行处理:
结果不一定有和输入相同的长度:
没有函数,
Parallelize
仅简单并行计算元素:
统计直到一百万的素数的数量:
检测93是否出现在前100个素数的列表中:
检查一个列表是否不含有5:
该变量不一定是一个显式的
List
:
内积自动地并行化:
外积自动地并行化:
并行计算一个表,在迭代变量和无迭代变量下:
并行产生一个数组:
并行计算和与积:
函数的计算并行出现:
具有属性
Flat
的函数自动并行化:
推广和延伸
(3)
由一些变量组成的可列表函数:
只有赋值的右边被并行化:
一个复合表达式的并行是一个接一个:
选项
(11)
把计算分成最小可能的子单元:
把计算分成与可利用内核相同数目的块:
对于整个任务,把计算分成每个内核最多两次计算:
把计算分成每次计算最多含有5个元素:
默认选项设置在计算规模和计算次数之间取折中:
具有很大差异的运行时间的计算应该被尽可能精细地并行化:
大量简单计算应该被分成尽可能少的批次:
默认情况下,当前上下文的定义会自动分配:
没有分配任何函数的定义:
分配出现在并行计算中的所有上下文中的符号定义:
只分配给定上下文的定义:
恢复
DistributedContexts
选项的值为默认值:
应用
(4)
搜索 Mersenne 素数:
观测求得的结果的出现:
计算视觉化的整个表格:
并行搜索整个区域,以求得局部最小值:
选择最佳结果:
使用一个共享函数来记录产生的计时结果:
建立带有计时结果的动态柱状图:
运行一系列具有很大差异的运行时间的计算:
属性和关系
(7)
对于数据并行函数,
Parallelize
关于
ParallelCombine
实现:
并行加速可用花费已知数目的时间的计算来测量:
定义大量具有已知运行时间的任务:
一个串行执行的时间是所有单个时间的和:
测量并行计算的加速:
最细颗粒度调度(Finest-grained scheduling)产生更好的负载平衡和更高的加速:
首先调用大型任务产生更好的结果:
关于从
、
、
、
中选择的
,形成算术表达式
:
每个算术运算的列表产生一个简单的计算:
计算它是简单的:
求所有产生0的算术运算的序列:
显示相应的表达式:
当需要时,互动式定义的函数自动分配到所有内核:
手动分配定义且禁止自动分配:
对于来自于程序包的函数,使用
ParallelNeeds
而不是
DistributeDefinitions
:
设置一个随机数生成元,适于并行使用和初始化每个内核:
可能存在的问题
(8)
不能并行化的表达式则进行通常计算:
副作用(Side effects)不能用于并行映射的函数中:
使用一个共享变量来支持副作用:
如果没有子内核,则在主内核中计算结果:
如果所用的函数没有先被分配,则结果可能仍然看起来是正确的:
仅当函数被分配,结果才能真正地在可用的内核上计算:
在当前上下文的函数定义自动分配:
不是来自于默认上下文的定义不会自动分配:
使用
DistributeDefinitions
分配这样的定义:
或者,设置
DistributedContexts
选项包括所有的上下文:
显式分配函数的定义:
修改定义:
修改的定义是自动分配的:
禁止定义的自动分配:
只在子内核中定义的符号不会自动分配:
$DistributedContexts
的值没有用在
Parallelize
:
设置
Parallelize
的
DistributedContexts
选项:
恢复所有的设置为默认值:
当并行处理时,平凡操作可能需要更长的时间:
巧妙范例
(1)
显示求得的非平凡自动机:
参见
ParallelEvaluate
ParallelTry
Kernels
LaunchKernels
DistributeDefinitions
更多关于
数据并行化
并行计算
7.0版本的新功能概要
调整和调试
7.0的新功能: 字母列表
7.0的新功能: 核心语言
7.0的新功能: 系统界面和配置
8.0的新功能:核心语言
8.0的新功能:系统界面和部署
版本 7 的新功能 | 版本 8 修改功能