我如何创建一个并行循环?

你会认为这将是一个简单的问题,但我找不到解决方案。 采取以下循环:

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');

......但我不知道为什么这会起作用,我是否每次关闭池,实际上是一个池(我读过文档,仍然没有看到它),以及matlabpoolparpool ...


就像我在评论中所说的那样,您需要启动MATLAB工作程序:

matlabpool open N

parpool命令替换了版本R2013b中的matlabpool命令。 该命令会创建许多本地工作者(假设您的默认集群是local配置文件),这些工作人员只需运行没有GUI的MATLAB.exe进程即可执行部分并行代码,如parfor循环。


没有必要关闭游泳池。 在某些情况下,您可能希望保持打开状态供以后重新使用(因为打开也需要一些时间)。 如果需要打开一个新的matlabpool,测试零池大小可以帮助您决定:

A = zeros(1,10000000);
if matlabpool('size') == 0 
   matlabpool('open',4) ;
end
parfor i = 1:length(A)
    A(i) = i;
end

自从matlabpoolparpool ,还有更简单的方法来创建池。 与parpool不同,如果池已经存在,它不会抛出错误。 只需调用gcp (即“获取当前池”)即可。

gcp();
A = zeros(1,10000000);
parfor i = 1:length(A)
    A(i) = i;
end

总是保持泳池畅通是一种很好的做法。 这只是确保它在需要时能够打开。

链接地址: http://www.djcxy.com/p/74703.html

上一篇: How do I create a parallel loop?

下一篇: Hoc Deployment with Xcode 5/iTunes 11