我在 Matlab 中使用 parfor 时遇到问题。我在 parfor 循环中调用的函数内运行以下代码:
- 如果我打开 matlabpool,程序会在
saveas
函数上崩溃; - 如果我不打开 matlabpool,一切正常;
- 如果我对这两个
surf
电话都发表评论,那么即使 matlabpool 打开,一切都会运行良好。
我通常保存为 .pdf 格式,但如果我保存为.fig格式,一切正常。.fig 格式是唯一不会导致问题的格式。当然,我无法调试并行循环,因为打开 matlabpool 的 parfor 不允许进入,因此没有打开 matlabpool 我可以看到每个变量都很好。
我错过了什么吗?我在 parfor 循环中使用 surf 找不到任何已知问题。有太多奇怪的问题试图理解真正的问题在哪里,所以我问是否有人遇到过类似的问题。
threads=4;
matlabpool(threads);
parfor i=1:threads
t=getCurrentTask();
tmpPath=['tmp' num2str(t.ID)];
importaData = open([tmpPath '\' 'Title','.mat']);
if isempty(importaData) == 0
f8 = importaData.data; %clear importaData;
hf8 = figure('Name','Title','NumberTitle','off', 'Color',[1 1 1], 'visible', 'off');
hold on; grid on; subplot(f8.subplot1);
title('Title');
h = surf(f8.x1,f8.y1,f8.surfVal1); set(h, 'EdgeAlpha', 0.05); axis('square'); view(0,90);
xlabel(f8.xLabel1); ylabel(f8.yLabel1); zlabel(f8.zLabel1);
hold on; subplot(f8.subplot2);
h = surf(f8.x2,f8.y2,f8.surfVal2); set(h, 'EdgeAlpha', 0.05); axis('square'); view(0,90);
xlabel(f8.xLabel2); ylabel(f8.yLabel2); zlabel(f8.zLabel2);
cd(tmpPath);
saveas(hf8, 'Title', 'pdf'); close(hf8);
cd('..');
delete([tmpPath '\' 'Title','.mat']);
else
error = -1;
end;
end;
UP:好的,这是一个导致错误的完成程序:
使用 distcomp.remoteparfor/getCompleteIntervals 时出错(第 22 行) parfor 正在使用的会话已关闭。
我的目标是保存Title.mat
为 pdf 文件。当然 Title.mat 包含一致且正确的数据。每个线程都应该进入一个包含 .mat 文件的独占目录translate
。如果我不打开游泳池,一切都会按预期进行。如果我以 .fig 格式保存,一切都会按预期进行。