for ループ内の多くのパラメーターの微分方程式系を解くスクリプトがあります。(反復は完全に独立していますが、各反復の終わりに、大きな行列 ( mat ) が計算結果に従って変更されます )。コードは次のとおりです: (B はパラメーターを含む行列です)
mat=zeros(20000,1);
for n=1:20000
prop=B(n,:); % B is a (20000 * 2 ) matrix that contains U and V parameters
U=prop(1);
V=prop(2);
options=odeset('RelTol',1e-6,'AbsTol',1e-20);
[T,X]=ode45(@acceleration,tspan,x0,options);
rad=X(:,1);
if max(rad)<radius % radius is a constant
mat(n)=1;
end
function xprime=acceleration(T,X)
.
.
.
end
最初にparforを使おうとしたのですが、加速関数(ode45入力)がインライン関数として定義されていたため(パフォーマンス向上のため)、それができませんでした。
4 つの MATLAB セッション (私の CPU には 4 つのコアがあります) を開いて、各セッションで個別にコードを実行できますか? 1 つのセッションで実行する場合の 4 倍のパフォーマンスが得られますか? (または、並列化されたコードと同じパフォーマンスが得られますか? - 並列コードではインライン関数を定義できません -) (Windows の場合)