当以下行作为parfor循环的一部分执行时,即使G矩阵病态,它也会执行。
betas = G\data.y2.';
然而,当我尝试将其作为常规for循环的一部分运行时,代码停止执行并报告Matrix是单数。
为什么for和parfor循环以不同方式处理它?</ p>
我问的原因是我正在调试其他人写的代码。我无法调试parfor所以我希望通过查看等效的内容来了解发生了什么。
有没有办法可以调试并行代码,我可以期望代码的行为与在并行环境中的行为相同?
data.y2.
也是如此;意思是与data.y2'
相对;
此外,我有一个较旧版本的代码,旨在纯粹在常规for循环中运行。
当我回去运行时,我遇到了阻止代码运行的相同错误。
然而,当我重新启动MATLAB并再次运行它时没有问题。它只是将奇异矩阵的反转结果变为NaN
并继续(这就是我想要的)。
在并行版本中,发出以下声明:
warnState(1) = warning('error', 'MATLAB:singularMatrix');
warnState(2) = warning('error', 'MATLAB:illConditionedMatrix');
这些是导致代码停止的原因吗? 如果是这样,他们为什么不影响并行版本?
答案 0 :(得分:1)
常规桌面MATLAB和Parallel Computing Toolbox工作者之间的一个区别是桌面MATLAB运行多线程,工作程序以单计算线程模式运行。我相信这可能会导致一些轻微的数字差异。您可以尝试使用
启动桌面MATLABmatlab -singleCompThread
查看常规MATLAB是否可以表现出相同的行为。
在MATLAB中,.'
运算符为TRANSPOSE
,'
为CTRANSPOSE
- 复共轭转置。