你认为这是一个简单的问题,但我找不到解决方案。采取以下循环:
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
...
答案 0 :(得分:2)
就像我在评论中所说,你需要启动MATLAB工作人员:
matlabpool open N
版本R2013b中的parpool
命令replaced the matlabpool
command。该命令创建了许多本地工作者(假设您的默认集群是local
配置文件),它们只是在没有GUI的情况下运行的MATLAB.exe进程,它们执行部分并行化代码,例如parfor
循环
答案 1 :(得分:1)
没有必要关闭游泳池。在某些情况下,您可能希望将其保持打开状态以供以后重复使用(因为打开也需要一些时间)。如果需要打开一个新的matlabpool,测试零池大小有助于确定:
A = zeros(1,10000000);
if matlabpool('size') == 0
matlabpool('open',4) ;
end
parfor i = 1:length(A)
A(i) = i;
end
答案 2 :(得分:1)
自从matlabpool
更改为parpool
后,可以更轻松地创建池。与parpool
不同,如果池已存在,则不会抛出错误。只需拨打gcp
(代表“获取当前池”)。
gcp();
A = zeros(1,10000000);
parfor i = 1:length(A)
A(i) = i;
end
总是让游泳池保持开放是一种好习惯;这只是确保它在您需要时打开。