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

Warning when saving to matfile in parallel environment

我正在尝试处理一个时间信号,它被分成(许多)更小的片段,每个片段 ("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 的警告:

Warning: Unable to read some of the variables due to unknown MAT-file error.

In matlab.io.MatFile/genericWho (line 209) In matlab.io.MatFile/whos (line 309) In matlab.io.MatFile (line 422) In matfile (line 75) In parallel_function>make_general_channel/channel_general (line 929) In remoteParallelFunction (line 38)

在我的例子中,我没有读取 parfor 中的任何内容,因此我可以在创建文件对象时使用 evalc 忽略脚本中的警告, 但是有谁知道为什么会出现这个警告,以及如何正确避免它?

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

并行处理完成后,出现以下错误:

Error using matlab.io.MatFile/whos (line 311) Could not open /Users/casparjespersen/ardetector/matlab/data/EMD/A0007_4/EEG.mat as a valid MAT-file.

Error in matlab.io.MatFile (line 422) varInfo = whos(obj);

Error in matfile (line 75) mf = matlab.io.MatFile(varargin{:});

Error in HHSA_BD_gen_emd (line 104) parfor windowIdx = 1:size(windowChunks,2)

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

内编写