2016-11-19 15 views
0

MATLABでの並列プログラミングの助けが必要です。 私はファイル名のリストを持っています。ファイルごとに テーブル行を返す独立した計算を行う必要があります。 すべてのtableRowsを1つのテーブルに統合する必要があります。 行の順序に意味がありません。 すべてのファイルを並行して処理し、1つのテーブルに行を挿入するにはどうすればよいですか?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

ええ、成長している可能性があります、おそらく事前に割り当てられた配列とインデックスを使用して動作します。私はそれを試すよ、 –

関連する問題