0

我在 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 格式保存,一切都会按预期进行。

4

0 回答 0