私はアルゴリズムmyAlgo()
を持っています。これは、データセット(約1000matファイル)を解析するために、パラメータpar1
を使用しています。 .matファイルへのパスは、myAlgo()
にも渡すセル配列です。 myAlgo()
関数には、クラスおよびその他の関数が含まれています。 par1
のすべての値に対して、私はすべての1000の.matファイルをテストする必要があります。私は独立した(?)問題があるので、並列ループを使うことができれば、もっと速くなります。Matlab parforと入力ファイル
私はparfor
に次のコードを使用します。
par1 = linespace(1,10,100);
myFiles % cell array with the .mat file location
myResult = zeros(length(par1),1);
parfor k=1:length(par1)
myPar = par1(k);
myResult(k) = myAlgo(myPar, myFiles);
end
% do something with myResult
。
function theResult = myAlgo(myPar, myFiles)
for ii=1:length(myFiles)
tempResult = initAlgo(myPar, myFiles(ii));
end
theResult = sum(tempResult);
end
だから
par1
内のすべてのパラメータのために、私は同じことを行います。残念ながら、処理時間は減少しません。しかし、CPU(i5)の作業負荷をチェックすると、すべてのコアが静かにアクティブになります。今
私の質問は:parfor
によって初期化すべての労働者が1000個の.MATファイルとフォルダにアクセスする必要があるためparfor
が、この場合には機能しないこと、それは可能です。したがって、彼らは同じ時間に自分の仕事をすることはできません。右?それで、これを処理する方法はありますか?
あなたは正しいです。それはおそらくそれを遅くする。しかし、実際には上記の例では 'parfor'は機能しません。これは、すべてのプロセスが.matファイルに同時にアクセスする必要があるためですか? – Samuel
それはずっと遅くする必要があります。ループ構造を変更しようとしましたか?私の知る限りでは、並列ファイルの読み込みは問題にならないはずです。この記事によれば、場合によってはさらに高速になることもあります。https://de.mathworks.com/matlabcentral/answers/20863-parfor-file-reading 「うまくいきません」エラーメッセージはありましたか? BTW parpoolを使って並列処理を初期化しましたか? – mzunhammer
エラーはありません。しかし、私が 'for'と 'parfor'の時間を測定すると、有意差はありません。両方のループを比較するMATLAB Webサイトの例を使用すると、計算時間に大きな違いがあります。これはうまくいく。しかし、私はparpoolを使って並列処理を初期化することはできません。試してみると、ライセンスエラーメッセージが表示されます。 – Samuel