如何让多个MATLAB实例同时保存同一个文件

时间:2014-02-17 21:33:51

标签: matlab

我目前正在编写代码,使用Unix集群上的节点运行一系列耗时的实验。这些实验中的每一个都需要在12核机器上运行3天。每次实验完成后,我都希望将一些数据保存到一个公共文件中。

我有一个小问题,因为我同时将所有实验提交到群集,因此他们也可能同时保存到同一个文件中。

我想知道当多个MATLAB实例同时尝试保存同一个文件时会发生什么(错误/崩溃/无)。无论结果如何,我可以使用try / catch循环解决它:

n_tries = 0;
while n_tries < 10
    try
        save('common_file',data)
        n_tries = 10;
    catch
        wait_time = 60 * rand;
        pause(wait_time);
        n_tries = n_tries+1;
        end
    end
end

3 个答案:

答案 0 :(得分:3)

对于如此长时间的模拟运行,除非您拥有可靠的框架,否则不要自动聚合数据。有几个原因:

  • 内存异常或类似的写入可能会破坏以前的所有结果,这可能会在写入大量数据时发生。
  • 编码错误可能会破坏以前的结果。如果发生冲突,您的代码将至少覆盖最新添加的数据。
  • mex函数中未检测到的错误,通过随机命中matlab地址空间而不是包含分段错误,可能导致Matlab将垃圾写入Matfile并破坏以前的结果。

使用一些独特的模式,例如电脑名称+当前日期/时间

答案 1 :(得分:3)

别。

所有Matlab功能在多线程/处理环境中明确安全。 如果你从多个matlab会话同时写入一个mat文件,很可能缺少几个变量(因为例如2个matlab附加到文件的相同状态)或整个文件被破坏。

保存单个文件并在后处理步骤中合并它们。

答案 2 :(得分:0)

通过单个记录器任务执行文件输出并将保存信息排入该任务,您将获得最佳服务。

不要忘记,您提供给matlab的输出“文件”只需文件 - 即支持必要的方法。