フィルターのクリア

Just a Beginner's 'parfor' confusion

2 ビュー (過去 30 日間)
Amnah
Amnah 2014 年 2 月 8 日
回答済み: Arslan Ahmad 2014 年 2 月 9 日
I'm trying to execute this code and constantly getting the message that 'variable jVals is indexed but not sliced'. Can anyone kindly help
iVal=5:0.2:5.4;
jVal=2:0.5:2.5;
iLen=length(iVal)
jLen=length(jVal);
matrix=zeros(iLen,jLen);
parfor i=1:iLen
dummy=zeros(1,jLen);
for j=1:jLen
dummy(j)=jVal(j); %/// This line is in ERROR
end
matrix(i,:)=dummy;
end

採用された回答

Matt J
Matt J 2014 年 2 月 8 日
編集済み: Matt J 2014 年 2 月 8 日
In your case, it will go away if you modify the loop as
parfor i=1:iLen
matrix(i,:)=jVal;
end
It's not an error, but rather a warning that you might not have efficient code. MATLAB sees that you are indexing a matrix variable inside the loop using another variable j. This usually means the matrix variable is a large array. If it were a small array, you would usually just index it with known, fixed constants, like jVal(1). If it is a large array, you usually want to find a way to have parfor send to the worker only a slice of the array that the worker will use, instead of broadcasting the whole array to every worker.
  8 件のコメント
Amnah
Amnah 2014 年 2 月 9 日
Now it is not saying that rvals is not sliced.. but it is still taking a lot of time in parallel processing as compared to sequential processing.. probably my code is inefficient or I don't know.. Thanks anyway Matt :)
Matt J
Matt J 2014 年 2 月 9 日
Are you running inside a script or a function? Try both.

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

その他の回答 (1 件)

Arslan Ahmad
Arslan Ahmad 2014 年 2 月 9 日
It is better not to use another index inside the "parfor" use only the index of parfor in your case it's better to use i instead of j for more information I would like to refer you to MATLAB parfor documentation for more information and so for your can try this code for solving your problem. I modified it for you, it tooks only 0.194221 seconds on two matlab workers. If you find it useful than please accept the answer.
tic
iVal=5:0.2:5.4;
jVal=2:0.5:2.5;
iLen=length(iVal)
jLen=length(jVal);
matrix=zeros(iLen,jLen);
parfor i=1:iLen
jVal=2:0.5:2.5;
jLen=length(jVal);
dummy=zeros(1,jLen);
j=1:jLen
dummy(j)=jVal(j); %/// This line is in ERROR
matrix(i,:)=dummy;
end

カテゴリ

Help Center および File ExchangeParallel for-Loops (parfor) についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by