を使用して一連のスペクトルを並列に計算しようとしていますparfor
が、parfor
ループがクラッシュします。
クラッシュは変数の事前割り当ての失敗によるものではなく、matlabが別の方法でスペクトルを計算していることによるものであると私はかなり確信しています。
問題を示す簡単なスクリプトを次に示します(UbuntuおよびR2012bの場合)。
% allocate the data and objects
mtm = spectrum.mtm;
data = rand(3000,1);
Fs = 500;
fprintf('Entering for loop\n');
for i = 1:5
h = psd(mtm, data, 'Fs', Fs);
end
fprintf('Entering parfor loop\n');
parfor i = 1:10
h = psd(mtm, data, 'Fs', Fs);
end
ループは正しく実行されますfor
が、parfor
エラーが発生します。出力は次のとおりです。
forループに入る
parforループに入る
警告:PSDはSPECTRUMオブジェクトに置き換えられました。PSDは引き続き機能しますが、将来削除される可能性があります。代わりに、SPECTRUM(またはその関数形式PWELCH)を使用してください。
psd at 33 In parallel_function> make_general_channel / channel_general at 885 In remoteParallelFunction at 30 error using parallel_function(行589)
ベクトル(行または列)の入力が必要です。
エラースタック:37のpsd.m
誰かがこれに遭遇したことがありますか?スペクトル計算を並列化するためのより良い方法はありますか?