gpt4 book ai didi

matlab - 并行化程序

转载 作者:行者123 更新时间:2023-12-04 23:01:37 25 4
gpt4 key购买 nike

我有一个由多个 .m 文件组成的程序。该程序运行时调用其中一个名为 tests.m 的(主要),然后我从那里调用另一个 optFun.m,我在其中计算不同的参数。这些参数在 while 循环内计算,当它们的值在多次(例如 4500)没有变化时结束。该程序运行良好,但我必须执行 200 次才能获得 200 组不同的值。此外,我可以使用具有 >12 个内核的计算机,因此我对主要 .m 文件(包括 parfor 语句)进行了一些更改,以部署 12 个 matlab worker。我的目标是在一轮中获得 12 个不同的解决方案(初始程序的执行)。

function [] = tests(Num)
matlabpool open local 12;
y = zeros(itermax,15);
z = zeros(itermax,9);
parfor i = 1:itermax
[iternum tTot SolOpt ImpCostMAX minABFmax ABFmax ImportCosteABS] =...
optFun(N, K, AntNum,...
q, eps, Rt, Rs, theta, maxiter,...
strcat(particad,num2str(i)));
y(i,:) = [ i; iternum; tTot; SolOpt; ImpCostMAX(1); ImpCostMAX(2);...
q; eps; N; K; AntNum; maxiter;...
SolOpt/ImpCostMAX(1); SolOpt/ImpCostMAX(2); SolOpt/N];
z(i,:) = [ i; minABFmax(1); minABFmax(2); minABFmax(3); ABFmax(1);...
ABFmax(2); ABFmax(3);...
ImportCosteABS(1); ImportCosteABS(2)];
end %parfor

matlabpool close;
dlmwrite(nombre, y, 'delimiter', ' ','precision', '%9.5f');
dlmwrite(b, z, 'delimiter', ' ','precision', '%9.5f');

我已经运行了 12 个 matlab worker,但现在程序似乎在达到最佳或正确结果之前就停止了。似乎我的程序的参数解在达到 while 循环的 4500 次迭代之前就已经输出了。尽管我获得了 12 种不同的解决方案,但似乎 12 名工作人员共享了一些变量的值,因此当其他工作人员充分改进解决方案或其中几个解决方案的总和被认为是正确的解决方案时,他们就会停止。你能帮我了解发生了什么吗?

非常感谢您提前问候

最佳答案

我以前遇到过类似的问题。您确定您的 for 循环的“独立”评估不会通过它们都使用的公共(public)变量交换有关解决方案收敛的信息吗?比如说,您在 parfor 之外定义了一个 convergence=zeros(1);,然后让 optFun.m 的所有后续调用都使用相同的变量。这也可能适用于在数组中存储中间值的函数。

虽然我不能说这是否确实是您的问题(没有代码示例),但可能就是这样。在这种情况下,我建议为每个评估创建一个独立的容器(例如,一个 zeros(NoEvals,NoThingsToStore) 矩阵,它们将使数据彼此独立)。

关于matlab - 并行化程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14417900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com