我在win 10 64bit操作系统上使用MATLAB 2016a。我运行的程序几乎是一个复杂的工程问题模拟。
问题是我使用parfor并且此程序中有另外2个for循环。我一直谨慎使用minimal for循环并使用数组智能和内置命令,如repmat,bsxfun等,以避免for循环。当我运行该程序时它会很好的存储并为我存储结果但是在一些迭代后我突然遇到这个错误:
“所有工人在执行parfor循环期间中止。”
并且程序终止。我正在使用这些规格的强大系统: corei7 CPU intel 4720HQ,16 GB RAM DDR4,8MB缓存,GPU:Geforce GTX 970M。
一个例子就是这样的(虽然主程序从内存和计算的角度来看要求很高,我省略了许多行,并且还调用了3个函数,这里没有包含):
lambda = 5e-5;
tau = 10.^((-5:25)*0.1);
tau = 0.3;
eta = 1.5;
b = 0.3;
c = 0.4;
beta = (0:90)';
x = (0.01:1000+0.01)';
r = (80.21:800+80.21)';
h = (10:0.1:30.5)';
Lh = length(h);
Lr = length(r);
Lx = length(x);
N = 6;
binom_coeff = factorial(N)*ones(N,1)./(factorial((1:N)').*factorial((N(1:N))'));
pdf_x = 2*pi*x*lambda.*exp(-pi*lambda*x.^2);
pdf_R = 2*pi*lambda*r.*exp(-pi*lambda*r.^2);
theta_l = atan(repmat(h,1,Lr)./repmat(r',Lh,1))*180/pi;
ratio = sqrt(repmat(h,1,Lr)+repmat(r',Lh,1));
coverage = zeros(size(beta_m));
Integrand_x = zeros(size(x));
Y = (b*h+c)*(1-a);
for k=1:length(beta_m)
for thr = 1:length(tau)
parfor i=1:Lx
temp = (-1)*eta*tau(thr)*(G_l/G_0.*( ratio/sqrt(x(i)^2+h_0^2)).^(-v));
temp_N = repmat(temp,1,N).*reshape(repmat(1:N,size(temp,1)*size(temp,2),1),size(temp,1),size(temp,2)*N);
Integrand = (1-(trapz(h,exp(temp_N).*repmat(Y,1,Lr*N))))';
Integrand_x(i) = exp(trapz(r,(Integrand * binom_coeff)));
end
coverage(thr,k) = trapz(x,pdf_x.*Integrand_x);
end
end
savepar = ['FinalMainRes_longheiv',num2str(v),'h0',num2str(h_0),'a',num2str(a),'.mat'];
save(savepar)
值得一提的是,仅与一名工人一起跑步并不会碾碎(尽管完成跑步需要4天左右)。
问题是什么?如何防止它。任何帮助表示赞赏。 提前谢谢。