【问题标题】:Parfor sliced variable cause Matlab crashParfor 切片变量导致 Matlab 崩溃
【发布时间】:2014-07-01 18:30:39
【问题描述】:

我正在尝试证明代码可以并行运行,代码可以完美运行,除非我将数据分配给切片变量,我相信我尊重 Matlab 的 parfor 限制,实际上它在某些 parfor 中运行平稳迭代,但某个点 Matlab 崩溃要求退出。

问题出在将值分配给“功能”时的最后一行(我也尝试过使用单元格但同样的问题):

if (matlabpool('size')==0) 
    matlabpool();
end


%Prepare iterations
numTrain = size(Xnorm(1000:1250,:),1);
numFeatures = size(Xnorm,2);
classData=Y(1000:1250,:);

%Linear Space for Grid
zz = linspace(0.1,20,10);
zsize=length(zz);

%Definitions to use inside parfor
features=zeros(numFeatures,1);
fmax=@(x) max(x);

parfor i = 1:numFeatures

    %Internal variables definition
    CsCross=zeros(zsize,1);
    SigmaCsMax=zeros(zsize,1);

    fprintf('\nFeature:%i...',i);

    for j=1:zsize

    %Precompute kernel

       K =  [ (1:numTrain)' , gpuKernel(Xnorm(1000:1250,i),zz(j)) ];

        for iter = 1:zsize

            options = sprintf('-c %d -t 4 -v 10 -q',zz(iter));
            model = svmtrain(classData, K, options);
            CsCross(iter)=model;

        end

        SigmaCsMax(j)=fmax(CsCross);
    end
   temp=fmax(SigmaCsMax);

   %%% HERE THE ERROR IS CAUSED. When removed code runs smoothly
   features(i)=temp;

end

有什么建议吗?我究竟做错了什么? (只是说代码在没有 parfor 的情况下工作)

提前致谢,

塞尔吉

【问题讨论】:

  • 你得到什么错误信息?
  • 我假设 matlab 控制台上有一些细节?你能把它们也加进去吗?
  • 不幸的是控制台没有错误。它只是崩溃。实际上在某些情况下(很少)它可以工作。

标签: matlab parallel-processing crash parfor


【解决方案1】:

我找到了让它工作的方法。我将“功能”预定义为 features=[] (没有任何预定义的大小),然后让 parfor 构建整个数组。令人惊讶的是,结果尊重了顺序。这里是代码(我省略了初始部分): [.....]

%HERE I DEFINE AND EMPTY ARRAY
features=[];


parfor i = 1:numFeatures

    %Internal variables definition
    CsCross=zeros(zsize,1);
    SigmaCsMax=zeros(zsize,1);
    temp=0;

    fprintf('\nFeature:%i...',i);

    for j=1:zsize

    %Precompute kernel

       K =  [ (1:numTrain)' , gpuKernel(Xnorm(1000:1250,i),zz(j)) ];

        for iter = 1:zsize

            options = sprintf('-c %d -t 4 -v 10 -q',zz(iter));
            model = svmtrain(classData, K, options);
            CsCross(iter)=model;

        end

        SigmaCsMax(j)=fmax(CsCross);
    end
   temp=fmax(SigmaCsMax);

   %%% EVERY ITERATION ADD NEW RESULTS

   features=[features,temp];

end

在此处找到有关其工作原理的更详细说明: http://www.mathworks.es/es/help/distcomp/getting-started-with-parfor.html#brdqn6p-1

希望对你有所帮助。

塞尔吉

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    相关资源
    最近更新 更多