1

在最近的一篇文章中,有人告诉我并行工具箱处理警告的方式与常规 matlab 处理警告的方式之间存在差异。我觉得海报的手在某种程度上回答了我的问题,所以我将其标记为已回答。但我还有一些额外的问题(希望这不构成重复发布)。

错误仅在我不使用 parfor 时触发?

我只是想知道是否有人可以向我解释这些差异是什么?另外,parfor 被沙盒化是什么意思?

是否仍然可以使用带有并行工具箱的 try catch 类型结构或使用其他机制来链接相同的东西?

要清楚,当我使用 parfor 运行时,仍然会产生警告消息,告诉我 matix 状况不佳,但尽管我添加了这些行,但它似乎并没有被视为错误

warnState(1) = warning('error', 'MATLAB:singularMatrix'); 
warnState(2) = warning('error', 'MATLAB:illConditionedMatrix'); 

但是,当我使用常规 for 循环运行时,它会被视为错误。

因此,并行工具箱正确地产生了警告,只是没有通过上面的代码将它们转换为错误,因此它们可以在 try catch 结构中使用。

亲切的问候

4

1 回答 1

2

我认为您原始代码中的问题是您仅在 MATLAB 客户端上将警告更改为错误。要对工人进行这种改变,你需要做

spmd
    warnState(1) = warning('error', 'MATLAB:singularMatrix'); 
    warnState(2) = warning('error', 'MATLAB:illConditionedMatrix'); 
end

还有pctRunOnAll函数可以在任何地方运行。

另外,我不知道 OP 对 matlabpool 工作人员被“沙盒化”意味着什么。您的 MATLAB 客户端和工作程序之间的区别是:

  1. 工作人员始终以单线程模式运行;和
  2. 工人在没有显示的情况下运行(尽管他们可以生成屏幕外图形并保存到文件)
于 2012-11-13T19:08:13.410 回答