0

コードが並列に実行されることを証明しようとしています。スライスされた変数にデータを割り当てている場合を除いて、コードは完全に機能します。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 なしで機能すると言うだけです)

前もって感謝します、

セルジ

4

1 に答える 1

0

私はそれを機能させる方法を見つけました。「features」を 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

それが役立つことを願っています。

セルジ

于 2014-07-02T16:07:08.270 に答える