首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止MATLAB打开池

防止MATLAB打开池
EN

Stack Overflow用户
提问于 2014-08-11 08:13:05
回答 3查看 799关注 0票数 11

当我安装了并行计算工具箱并在我的代码中使用parfor时,MATLAB一旦到达parfor循环,就会自动启动池。然而,这使得有时很难调试,这就是为什么我想阻止MATLAB在某些情况下打开一个池。那么,我怎样才能告诉MATLAB不要打开游泳池呢?显然,我可以遍历我的代码,删除所有的parfor循环并用普通的for循环替换它们,但是这很繁琐,我可能会忘记撤销我的更改。

编辑:指定,理想情况下,当设置控件或变量时,我希望parfor循环的行为与for完全一样。也就是说,例如,我也应该能够在for -循环中放置断点.

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-18 13:18:28

在Home->并行->并行首选项下,您可以取消选中复选框“在执行并行关键字时自动创建并行池(如果不存在的话)”。这使得所有的parfor循环都像普通的for循环一样运行。

如果我想出了在代码中这样做的方法,而不是使用复选框,我会再联系您的。

更新发现确实可以通过代码更改设置,尽管我不建议这样做,因为它涉及更改的首选项文件。这是来自无文件的MATLAB博客的Yair。

代码语言:javascript
复制
ps = parallel.Settings;
ps.Pool
ans = 
  PoolSettings with properties:
                            AutoCreate: 1
                RestartOnClusterChange: 1
    RestartOnPreferredNumWorkersChange: 1
                           IdleTimeout: 30
                   PreferredNumWorkers: 12

您需要将AutoCreate开关更改为0

作为替代,我建议将parfor中的所有内容都封装在一个函数中,从而调用

代码语言:javascript
复制
parfor 1:N
    output = function(..)
end

现在修改脚本/函数,使其顶部有一个Parallel开关:

代码语言:javascript
复制
if Parallel
    parfor 1:N
        output = function(..)
    end
else
    for 1:N
        output = function(..)
    end
end

您可以编辑和调试function本身,并在程序顶部设置开关以并行或串行方式执行。

票数 7
EN

Stack Overflow用户

发布于 2014-08-11 12:58:38

以及正常的语法

代码语言:javascript
复制
parfor i = 1:10

您也可以使用

代码语言:javascript
复制
parfor (i = 1:10, N)

其中,N是循环中要使用的最大工人数。N可以是代码的其他部分设置的变量,因此您可以通过将变量N设置为1或0来有效地打开和关闭并行性。

编辑:要清楚的是,这只控制执行代码的工作人员的数量(如果N为零,那么池是否已经启动)。如果不存在池,则代码将在客户端上执行。尽管如此,代码仍然是一个parfor循环, not 具有与for循环相同的语义--对parfor循环的循环代码有一些限制,而对于for循环则不存在这些限制,并且不能保证循环迭代的执行顺序。

当您使用parfor时,您所做的不仅仅是说“请加快速度”。您对MATLAB说:“我可以向您保证这个循环的迭代是独立的,并且可以按任何顺序执行,所以如果您试图并行化它,您就可以了”。因为您已经保证了这一点,所以MATLAB能够通过使用与for循环不同的语义来加快速度。

完全获得for循环行为的唯一方法是使用for,如果您需要为调试目的来回切换,则需要注释和取消对for/parfor的注释(或者可能使用if/else块,根据某些变量在forparfor之间切换)。

票数 5
EN

Stack Overflow用户

发布于 2014-08-11 08:16:53

我认为这里的方法不是禁用parfor,而是让它表现得像一个简单的for

通过将工人人数设置为1,这应该是可能的。

代码语言:javascript
复制
parpool(1)

根据代码的不同,您可以在运行代码之前只执行一次此操作,或者在每次设置代码中任何位置的工作人员数量时都需要(有条件地)这样做。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25238583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档