whileループからparforループへの変換

5 vues (au cours des 30 derniers jours)
Jo Sasaki
Jo Sasaki le 16 Juil 2019
Réponse apportée : Kenta le 18 Juil 2019
forループ文をparforループを使用して時間の短縮を行いたいです。
コード本文は1次元csvに対して3000ずつ1データずらしでで切り取りを行っているのですが、forをparforに変更した際にこういったエラーが出ます。
parfor文のドキュメンテーションを見てもいまいちピンと来ないのでどこが間違っているのかご教授願いたいです。
原文
data = csvread('C:\Users\test\.csv'); % Put Data
data = transpose(data);
G = gpuArray(data);
L = length(data);
S = 3000; % Space
K = L-S+1;
for n =1:L-S+1;
t = data(n:n+S-1);
filename = ['C:\Users\test\test',num2str(n),'ch2.csv']; % Put Data name 'test'
csvwrite(filename, t);
n = n + 1;
end
エラー文
Error:Assigning to the loop variable "i" of a parfor is not allowed.
See Parallel for Loops in MATLAB, "Loop Variable".
  2 commentaires
Kenta
Kenta le 17 Juil 2019
こんにちは。ちなみに、n=n+1を消去しても同じエラーがでますか?
Jo Sasaki
Jo Sasaki le 18 Juil 2019
n=n+1を消去しましたら作動いたしました。
ですが、ループの方はfor文を使用したときとあまり時間が変わらない結果となりました。
csv書き出しは結局cpuを使用しているためあまり差が出なかったのでしょうか?

Connectez-vous pour commenter.

Réponse acceptée

Kenta
Kenta le 18 Juil 2019
n=n+1を消去すれば、動作すると思います。解析時間に関してですが、parpoolとコマンドウィンドウで打てば、自動的にクラスタが立ち上がりますが、その数が少なければ、結局、クラスタを立ち上げるための時間との相殺になって、あまり時間はかわらないかもしれません。

Plus de réponses (0)

Catégories

En savoir plus sur 並列計算の基礎 dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!