我正在尝试使用 并行计算一系列光谱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 中 33 在 parallel_function>make_general_channel/channel_general 在 885 在 remoteParallelFunction 在 30 使用 parallel_function 时出错(第 589 行)
需要向量(行或列)输入。
错误堆栈:psd.m at 37
有没有人遇到过这个?有没有更好的方法来并行化谱计算?