次の行が parfor ループの一部として実行されると、G 行列が悪条件であっても実行されます。
betas = G\data.y2.';
ただし、通常の for ループの一部として実行しようとすると、コードの実行が停止し、マトリックスが特異であると報告されます。
for ループと parfor ループの処理が異なるのはなぜですか?
私が尋ねる理由は、他の誰かが書いたコードをデバッグしているためです。私は parfor をデバッグできないので、同等の for を見て何が起こっているのかを知りたいと思っていました。
コードが並列環境と同じように動作することを期待できる並列コードをデバッグする方法はありますか?
また、何をしますかdata.y2.
; とは対照的に意味しdata.y2'
ます。
さらに、純粋に通常の for ループで実行するように設計された古いバージョンのコードがあります。
実行に戻ったとき、コードの実行を停止したのと同じエラーが発生しました。
しかし、MATLAB を再起動して再度実行したところ、問題なく実行されました。特異行列を反転した結果を取り、NaN
継続します(これが私が望んでいることです)。
並列バージョンでは、次の宣言が行われます。
warnState(1) = warning('error', 'MATLAB:singularMatrix');
warnState(2) = warning('error', 'MATLAB:illConditionedMatrix');
これらはコードが停止する原因ですか? もしそうなら、なぜそれらはパラレルバージョンに影響を与えていないのですか?