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

5 views (last 30 days)
Jo Sasaki
Jo Sasaki on 16 Jul 2019
Answered: Kenta on 18 Jul 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 Comments
Kenta
Kenta on 17 Jul 2019
こんにちは。ちなみに、n=n+1を消去しても同じエラーがでますか?
Jo Sasaki
Jo Sasaki on 18 Jul 2019
n=n+1を消去しましたら作動いたしました。
ですが、ループの方はfor文を使用したときとあまり時間が変わらない結果となりました。
csv書き出しは結局cpuを使用しているためあまり差が出なかったのでしょうか?

Sign in to comment.

Accepted Answer

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

More Answers (0)

Categories

Find more on 並列 for ループ (parfor) in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!