2016-11-19 4 views
0

Мне нужна помощь в параллельном программировании в MATLAB. У меня есть список имен файлов; для каждого файла я должен сделать независимый расчет, который возвращает строку таблицы. Все таблицы должны быть интегрированы в одну таблицу. Порядок строк не имеет значения. Как обрабатывать все файлы параллельно и вставлять строки в одну таблицу?Многопотоковое программирование в MATLAB

samples=dir('*.txt'); 
for smpl=samples' 
    row=processSamples(smpl,prm1,prm2); //should be parallel 
    table=[table;row];     
end 

Благодаря

ответ

1

Matlab имеет очень полезный и простой в использовании реализацию из распараллеливание для цикла называется parfor. См. doc parfor.

Код будет похож на приведенный ниже в зависимости от размера и типа вашей переменной «строка». Дело в том, что вы должны индексировать таблицу для parfor, чтобы иметь возможность работать.

samples=dir('*.txt'); 
parfor k=1:length(samples) 
    smpl = samples(k) 
    row=processSamples(smpl,prm1,prm2); //should be parallel 
    table(k) = row % Preserves order 
end 

Когда код попадает в parfor линию будет провести некоторое время (в секундах) для настройки параллельных рабочих на локальном компьютере. В качестве альтернативы вы можете использовать parpool, чтобы настроить рабочих на локальном компьютере или кластере fx.

Иллюстрирующих

n = 10; 
y = randi(10,1,n); 
squaredy = zeros(n,1) % Not necessary for parfor to work 
parfor k = 1:n 
    squaredy(k) = y(k)^2 
end 
disp(y) 
disp(squaredy) 
+0

Вы уверены, что это использование растущего массива в 'parfor' является законным? Это выглядит подозрительно для меня, но сейчас у меня нет MATLAB, чтобы проверить его. Обычно 'parfor' не позволяет использовать с неожиданными результатами. – buzjwa

+0

цикл «parfor» не может работать как «foreach» (как в текущей программе), но я изменил некоторые строки, и он отлично работает . – Tolik

+0

Да, вы можете быть правы в отношении роста, вероятно, работает с предварительно распределенным массивом и индексированием. Я проверю это, держись –

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