我一直在运行一个程序数百次,但最近发现一个输入参数集会导致以下错误:
In DElambda at 116
In parallel_function>make_general_channel/channel_general at 879
In remoteParallelFunction at 31
??? Error using ==> parallel_function at 598
The session that parfor is using has shut down
Error in ==> CreateCurve at 86
parfor j=1:10
??? The client lost connection to an unknown lab.
This might be due to network problems, or the interactive matlabpool job might have errored. This is
causing: java.lang.OutOfMemoryError: GC overhead limit exceeded
当我将参数搜索空间的最小值和最大值设置为 min[0;0] 和 max[1.5;1.5] 并将 Population size 设置为 10k(这是差分进化)时,就会发生这种情况。我在任何时候都没有触及其他参数。每当我尝试使用上述参数运行它时,都会出现上述错误。
但是,当我将人口规模降至 1k 时,它会收敛(由于搜索不足而导致答案不正确)。或者,当我使用 10k 的人口规模和我尝试过的任何其他参数集时,它是否可以完美运行并收敛到正确的解决方案?
看起来很奇怪?
我目前正在使用 for 循环而不是 parfor 循环(并且 matlabpool 已关闭)重新运行问题参数集,以查看它是否运行得更好。不幸的是,这非常耗时,所以我暂时不知道结果。
同时,任何人都可以解释导致此错误的原因吗?和/或告诉我如何调试并行代码?
只是为了添加代码在我使用 for 而不是 parfor 时使用流氓参数集运行良好!所以我真的需要在并行环境中找到某种调试方法,以便我可以隔离和修复这个错误。使用 for 而不是 parfor 太慢了!