2016-11-19 59 views
0

我需要MATLAB中並行編程的幫助。 我有一個文件名列表; 爲每個文件我必須做一個獨立的計算,返回一個錶行。 所有tableRows應該被集成到一個表中。 行的順序沒有意義。 如何並行處理所有文件並將行插入到一個表中?MATLAB中的多線程編程

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

感謝

回答

1

Matlab具有的並行for循環稱爲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

是的,你可能是對的增長,可能與預分配數組和索引。我會測試一下,堅持 –