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

Posted

技术标签:

【中文标题】在并行环境中保存到 matfile 时出现警告【英文标题】:Warning when saving to matfile in parallel environment 【发布时间】:2016-07-30 04:49:53 【问题描述】:

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

我目前的解决方案有效:

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)

【问题讨论】:

如果所有写入线程都与文件相同,那么保存时它可能看起来像这样 确实如此。也许我应该将 parfor 操作的输出保存在内存中,然后在每 N 次迭代后,离开 parfor,保存,然后返回 parfor 循环进行剩余操作。 经过进一步考虑,将运行此程序的计算机有足够的内存一次分配所有块。我只是保存到内存中然后再归档,这整个问题是不必要的:-)但是谢谢。 【参考方案1】:

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

【讨论】:

以上是关于在并行环境中保存到 matfile 时出现警告的主要内容,如果未能解决你的问题,请参考以下文章

使用 SVG 时出现 SF 符号不可用警告

在 Playstore 中更新 apk 时出现警告消息

在 MATLAB 中使用回归函数时出现排名不足警告

在 PIG 中执行命令时出现警告

在 Windows 8 上使用 OpenGL 时出现 DXGI 警告?

引用 COM 对象 ActiveD 或 MSXML2 时出现大量构建警告