Matlab分段冲突和内存断言失败

Matlab分段冲突和内存断言失败,matlab,memory,segmentation-fault,hdf5,sungridengine,Matlab,Memory,Segmentation Fault,Hdf5,Sungridengine,我正在使用Matlab2016b的Sun Grid引擎上并行运行多个Matlab作业。在我的个人macbook上,我正在运行Matlab2016a。该脚本正在进行一些MRI图像处理,每个作业都使用一组不同的参数,以便我可以对图像处理例程进行参数优化 但是,大约一半的作业会崩溃,原因可能是分段冲突、malloc.c内存断言失败(“‘您可能修改了不属于您的内存’”)或HDF5-DIAG出现错误,然后是分段冲突 一些观察 这些错误并不总是发生在相同的作业或相同的作业中 功能,但崩溃发生在多个作业组中,

我正在使用Matlab2016b的Sun Grid引擎上并行运行多个Matlab作业。在我的个人macbook上,我正在运行Matlab2016a。该脚本正在进行一些MRI图像处理,每个作业都使用一组不同的参数,以便我可以对图像处理例程进行参数优化

但是,大约一半的作业会崩溃,原因可能是分段冲突、malloc.c内存断言失败(“‘您可能修改了不属于您的内存’”)或HDF5-DIAG出现错误,然后是分段冲突

一些观察

  • 这些错误并不总是发生在相同的作业或相同的作业中 功能,但崩溃发生在多个作业组中,其中一个组中的作业在另一个组中的一分钟内崩溃
  • 我不再使用动态数组,而是预先分配我的 数组。如果阵列太小,我会用 例如
    cat(数组,零(12000))
  • 这些工作在一定程度上利用了资源 相同的计算,以便他们可以共享数据。我先做这个 检查数据是否已由其他作业生成。如果是的话 尝试使用while循环以最大尝试次数加载它 暂停1秒(因为当另一个作业启动时可能会失败) 仍在写入文件,如果它稍等并重试,则可能会 成功)。如果在最大尝试次数后加载失败 或者,如果数据尚不存在,则此作业将执行 所需的计算并尝试保存数据。如果数据是 同时由另一个作业保存,则此作业不保存 再也没有数据了
  • 我没有使用任何C/C++或MEX文件
  • 我用Matlab2016a在我自己的笔记本电脑上测试了一些作业的子集,用Matlab2016b在linux计算机上测试了一些作业,这些都很好。但同样,问题只在几百次(总共500次迭代)之后出现,我没有在自己的计算机上运行完整的模拟,但由于时间限制,只有大约20次迭代

  • 你对此有进一步的了解吗?在使用统计和机器学习工具箱(我粘贴)时,我观察到非常类似的问题。撞车时有发生。任务越大,发生的可能性就越大。我使用的集群运行的是CentOS 7.4和Matlab 9.1(R2016b)Hi@normanius,最后我重新构造了代码,以防止不同线程同时读取/写入文件(我以前有过这种情况,但我认为我已经用旋转锁解决了)。这可能是并发性的问题,但还不确定,因为我做了很多重构,还有很多其他的事情也改变了。。。你观察到系统性的争吵吗?谢谢你的回答。我发现在批处理系统上提交作业时请求更多内存可以解决我的问题。Matlab只是耗尽了内存,因此在malloc中出现了故障。我平均使用的Matlab函数不会消耗大量内存,但可能会显示较大的峰值,这取决于训练收敛的程度。输入数据的随机化有时会导致我观察到的行为。但你可能也是对的。我还观察到与并发访问公共资源相关的问题,特别是在启动Matlab时。但我不确定这是否与我最近遇到的问题有关。你对此有进一步的了解吗?在使用统计和机器学习工具箱(我粘贴)时,我观察到非常类似的问题。撞车时有发生。任务越大,发生的可能性就越大。我使用的集群运行的是CentOS 7.4和Matlab 9.1(R2016b)Hi@normanius,最后我重新构造了代码,以防止不同线程同时读取/写入文件(我以前有过这种情况,但我认为我已经用旋转锁解决了)。这可能是并发性的问题,但还不确定,因为我做了很多重构,还有很多其他的事情也改变了。。。你观察到系统性的争吵吗?谢谢你的回答。我发现在批处理系统上提交作业时请求更多内存可以解决我的问题。Matlab只是耗尽了内存,因此在malloc中出现了故障。我平均使用的Matlab函数不会消耗大量内存,但可能会显示较大的峰值,这取决于训练收敛的程度。输入数据的随机化有时会导致我观察到的行为。但你可能也是对的。我还观察到与并发访问公共资源相关的问题,特别是在启动Matlab时。但我不确定这是否与我最近遇到的问题有关。