【发布时间】:2013-10-02 06:29:22
【问题描述】:
您可能认为这是一个简单的问题,但我找不到解决方案。采取以下循环:
A = zeros(1,10000000);
parfor i = 1:length(A)
A(i) = i;
end
这仅在我的计算机上的单个内核上运行,尽管它很容易并行化(或者至少应该是并行化的)。我正在使用 Matlab 2012b,我尝试查找有关如何创建并行循环的文档,但找不到任何文档(matlab 文档仅显示了如何创建这些循环的示例,而不是如何实际并行运行它们)。
我尝试查找如何修改并行计算工具箱设置,但它们都不起作用,因为它们都适用于 Matlab 2013(我使用的是 2012b)。如果有人能提供一个实际上并行运行的简单、可并行循环的示例,我将不胜感激!
注意:我已经检查并安装了并行计算工具箱,但我无法知道它是否已启用或如何启用它,因为文档似乎没有为我的版本提供答案(我在命令提示符中输入了preferences,但在那里没有看到)。
编辑:我这样做了:
matlabpool('open',4);
A = zeros(1,10000000);
parfor i = 1:length(A)
A(i) = i;
end
matlabpool('close');
...但我真的不知道为什么会这样,我是否每次都关闭池,池实际上是什么(我读过documnentation,仍然不明白),并且matlabpool 与 parpool 有何不同...
【问题讨论】:
-
也许你的意思是
A(i)=i,现在你只是在循环之后一遍又一遍地覆盖同一个变量,A将等于10000000。 -
@GuntherStruyf 抱歉,这是一个错字;我测试时代码是正确的。
-
你检查
parpool了吗?它位于parfor文档的“另见”部分:mathworks.de/de/help/distcomp/parpool.html -
可能是
matlabpool open -
我还要补充一点 - 不要关闭 MATLABPOOL,除非您不打算在给定的客户端会话中运行任何进一步的 PARFOR 循环(也许除非工作人员正在使用您所在的集群上的共享资源可能建议更保守)
标签: matlab parallel-processing