2016-04-08 1 views
1

Я пытаюсь обработать сигнал времени, который разбивается на (многие) меньшие сегменты, и каждый сегмент («кусок») анализируется независимо. Этот вывод, я хочу сохранить в комбинированном файле.Предупреждение при сохранении в 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)

+0

, если все писать потоки в тот же файл, что и в то время, как это было возможно, было бы похоже на это – user3528438

+0

Они делают. Возможно, я должен сохранить вывод parfor операции в памяти, а затем после каждой N-й итерации, оставить parfor, сохранить и вернуться в петле parfor для остальных. –

+0

После того, как подумали, на компьютерах, на которых будет работать, хватит памяти, чтобы выделить все куски сразу. Я просто сохраню в памяти и буду записывать потом, вся эта проблема не нужна :-) Но спасибо. –

ответ

1

Как @ user3528438 отметил, что это связано с рабочими, пишущих в файл одновременно. Я решил перепроектировать мой сценарий, чтобы избежать записи с parfor.

 Смежные вопросы

  • Нет связанных вопросов^_^