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

11 ビュー (過去 30 日間)
Jo Sasaki
Jo Sasaki 2019 年 7 月 16 日
回答済み: Kenta 2019 年 7 月 18 日
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 件のコメント
Kenta
Kenta 2019 年 7 月 17 日
こんにちは。ちなみに、n=n+1を消去しても同じエラーがでますか?
Jo Sasaki
Jo Sasaki 2019 年 7 月 18 日
n=n+1を消去しましたら作動いたしました。
ですが、ループの方はfor文を使用したときとあまり時間が変わらない結果となりました。
csv書き出しは結局cpuを使用しているためあまり差が出なかったのでしょうか?

サインインしてコメントする。

採用された回答

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

その他の回答 (0 件)

カテゴリ

Help Center および File Exchange並列計算の基礎 についてさらに検索

Community Treasure Hunt

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

Start Hunting!