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