Я пытаюсь обработать сигнал времени, который разбивается на (многие) меньшие сегменты, и каждый сегмент («кусок») анализируется независимо. Этот вывод, я хочу сохранить в комбинированном файле.Предупреждение при сохранении в matfile в параллельной среде
Мое текущее решение работает:
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
при создании файлового объекта , но кто-нибудь знает, почему это предупреждение появляется, и как его избежать?
Update: Это не работает, на самом деле. Точная переменная, которую я пишу, недействительна, и всякий раз, когда я пытаюсь ее прочитать, я получаю сообщение об ошибке.
Когда параллельный процесс был закончен, я получил следующее сообщение об ошибке:
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 операции в памяти, а затем после каждой N-й итерации, оставить parfor, сохранить и вернуться в петле parfor для остальных. –
После того, как подумали, на компьютерах, на которых будет работать, хватит памяти, чтобы выделить все куски сразу. Я просто сохраню в памяти и буду записывать потом, вся эта проблема не нужна :-) Но спасибо. –