我在使用Matlab 2016b的Sun Grid Engine上并行运行多个Matlab作业。在我个人的Macbook上,我正在运行Matlab 2016a。该脚本正在进行一些MRI图像处理,其中每个作业使用一组不同的参数,以便我可以为我的图像处理程序进行参数优化。
然而,大约一半的工作都会因分段违规, malloc.c内存断言失败而崩溃('您可能修改过的内存不属于您。')或 HDF5-DIAG 中的错误,然后是分段违规。
一些观察
- 错误并不总是发生在相同的作业或相同的作业中
功能,但崩溃发生在几组作业中,其中一个组内的作业在一分钟内崩溃。
- 我不再使用动态数组,而是预先分配我的
阵列。如果阵列太小,我会延长它们
例如
cat(array, zeros(1, 2000))
。
- 工作部分使用
相同的计算,以便他们可以共享数据。我先这样做
检查数据是否已由另一个作业生成。如果是这样
尝试使用具有最大尝试次数的while循环加载它
并暂停1秒(因为当另一份工作时,它可能会失败
仍然写入文件,如果它等待一点并重试它可能
成功)。如果在最大尝试次数后加载失败
或者如果数据尚不存在,则此作业执行
需要计算并尝试保存数据。如果数据是
在此期间由另一份工作保存,然后这份工作没有保存
数据了。
- 我没有使用任何C / C ++或MEX文件。
- 我用Matlab 2016a在自己的笔记本电脑上测试了一些作业的子集,在使用Matlab 2016b的Linux计算机上测试过,这些工作正常。但同样,问题只发生在几百次(总共500次迭代)之后,并且我没有在我自己的计算机上运行完整的模拟,但由于时间限制,只有大约20次迭代。
醇>