在并行环境中保存到matfile时发出警告

时间:2016-04-08 19:28:38

标签: matlab parallel-processing parfor mat-file

我正在尝试处理一个时间信号,它被分成(很多)较小的段,并且每个段(" chunk")都是独立分析的。这个输出,我想保存在一个组合文件中。

我目前的解决方案有效:

configFileName = 'config.mat';
config = matfile(configFileName,'Writable',true);
% some irrelevant stuff saved in config
config.chnk(1,N) = struct('var1',[],'var2',[],'var3',[]); % pre-allocating
clearvars config;

parfor i = 1:N
    config = matfile(configFileName,'Writable',true);
    chunk = process(data(:,i)); % data has previously been sliced
    config.chnk(1,i) = chunk;
end

注意:process(data(:,i));的输出与预先分配config.chnk的类型相同。 现在,虽然这似乎有效(更新:它没有),我得到了Matlab的警告:

  

警告:由于未知的MAT文件错误,无法读取某些变量。

     

在matlab.io.MatFile / genericWho(第209行)     在matlab.io.MatFile / whos中(第309行)     在matlab.io.MatFile中(第422行)     在matfile中(第75行)     在parallel_function> make_general_channel / channel_general(第929行)     在remoteParallelFunction(第38行)

就我而言,我没有阅读parfor内的任何内容,因此我可以在创建文件对象时使用evalc省略脚本中的警告,但有人知道为什么这样做出现警告,以及如何正确避免?

更新 :实际上它不起作用。我写的确切变量是无效的,每当我尝试读取它时,我都会收到错误。

并行过程完成后,我收到以下错误:

  

使用matlab.io.MatFile / whos时出错(第311行)   无法打开/Users/casparjespersen/ardetector/matlab/data/EMD/A0007_4/EEG.mat作为有效的MAT文件。

     

matlab.io.MatFile中的错误(第422行)               varInfo = whos(obj);

     

matfile中的错误(第75行)   mf = matlab.io.MatFile(varargin {:});

     

HHSA_BD_gen_emd出错(第104行)   parfor windowIdx = 1:size(windowChunks,2)

1 个答案:

答案 0 :(得分:1)

正如@ user3528438所指出的,这是由于工作人员同时写入文件。我选择重新设计我的脚本以避免在parfor内写作。