我有一些代码可以在系列中完美地运行,但是我试图通过将它并行来加速它,并且它让我适合多个地方。这是我的代码:
parfor q = 1:num_ranges;
timenumber = squeeze(DATA(q,:,:));
timenumber_shift = circshift(timenumber, [0 1]);
for m = 1:total_working_channels;
timenumberm = timenumber(m,:);
for n = 1:total_working_channels;
R_P(m,n,q) = mean(timenumberm.*conj(timenumber(n,:)),2);
R_V(m,n,q) = mean(timenumberm.*conj(timenumber_shift(n,:)),2);
end
end
end
DATA是一个复杂的双倍大小1716x32x400。当我尝试像这样运行时,Matlab就崩溃了(“Matlab遇到了内部问题,需要关闭”)。数组太大而无法发送?我觉得那是问题,但我不确定。
为了解决这个问题,我尝试更改parfor命令的位置;这是第2次尝试:
for q = 1:num_ranges;
timenumber = squeeze(DATA(q,:,:));
timenumber_shift = circshift(timenumber, [0 1]);
parfor m = 1:total_working_channels; %this is line 145!
timenumberm = timenumber(m,:);
for n = 1:total_working_channels;
R_P(m,n,q) = mean(timenumberm.*conj(timenumber(n,:)),2);
R_V(m,n,q) = mean(timenumberm.*conj(timenumber_shift(n,:)),2);
end
end
end
当我这样做时,Matlab不会崩溃。但是,在命令行中,它显示“分析并将文件传输给工作人员......已完成。”,然后出现错误。这是错误消息:
使用DBFCode12时出错(第145行)。在''的工人身上抛出了UndefinedFunction错误。这可能是因为包含''的文件无法访问 工作人员。使用addAttachedFiles(pool,files)指定要附加的所需文件。请参阅文档 'parallel.Pool / addAttachedFiles'了解更多详情。引起:未定义的函数或变量“”。
我对这个很难过。为什么在parfor行上有一个未定义的函数(没有名字!)?
我使用的是版本R2014a。