Matlab分段违规和内存断言失败

时间:2017-06-02 13:38:08

标签: matlab memory segmentation-fault hdf5 sungridengine

我在使用Matlab 2016b的Sun Grid Engine上并行运行多个Matlab作业。在我个人的Macbook上,我正在运行Matlab 2016a。该脚本正在进行一些MRI图像处理,其中每个作业使用一组不同的参数,以便我可以为我的图像处理程序进行参数优化。

然而,大约一半的工作都会因分段违规 malloc.c内存断言失败而崩溃('您可能修改过的内存不属于您。')或 HDF5-DIAG 中的错误,然后是分段违规。

一些观察

  1. 错误并不总是发生在相同的作业或相同的作业中 功能,但崩溃发生在几组作业中,其中一个组内的作业在一分钟内崩溃。
  2. 我不再使用动态数组,而是预先分配我的 阵列。如果阵列太小,我会延长它们 例如cat(array, zeros(1, 2000))
  3. 工作部分使用 相同的计算,以便他们可以共享数据。我先这样做 检查数据是否已由另一个作业生成。如果是这样 尝试使用具有最大尝试次数的while循环加载它 并暂停1秒(因为当另一份工作时,它可能会失败 仍然写入文件,如果它等待一点并重试它可能 成功)。如果在最大尝试次数后加载失败 或者如果数据尚不存在,则此作业执行 需要计算并尝试保存数据。如果数据是 在此期间由另一份工作保存,然后这份工作没有保存 数据了。
  4. 我没有使用任何C / C ++或MEX文件。
  5. 我用Matlab 2016a在自己的笔记本电脑上测试了一些作业的子集,在使用Matlab 2016b的Linux计算机上测试过,这些工作正常。但同样,问题只发生在几百次(总共500次迭代)之后,并且我没有在我自己的计算机上运行完整的模拟,但由于时间限制,只有大约20次迭代。

0 个答案:

没有答案