Even having code, which should run in parralel, Matlab writes: valid indeces for 'ndLog' are restricted in PARFOR loops.
Would anybody please know, what is the issue?
Thank you very much,
Rafael
al = [30 40 50]; m = [40 50 60];
tn=10; cm=cumsum(m); S=sum(m); r=[0 1];
ndLog=zeros(sum(m)*numel(r)*numel(al)*tn,5);
parfor a = 1:tn
for aa = 1:numel(al)
for k=1:numel(r)
for mm = 1:numel(m)
ind = -m(mm)+1+cm(mm) + (k-1)*S + (aa-1)*numel(r)*S +...
(a-1)*numel(al)*numel(r)*S;
ndLog(ind,:) = [a mm aa k 1];
end
end
end
end

8 件のコメント

Daniel M
Daniel M 2019 年 10 月 11 日
You're trying to access position (a-1), but the loop for (a) does not have this information because every loop is a different Matlab instance with no information sharing. Look up how to slice a variable in parfor for more info.
Rafael Schwarzenegger
Rafael Schwarzenegger 2019 年 10 月 11 日
(a-1) is the continuation of the previous line and just a scalar not an index, as far as I see it now. Have looked up slice variables, but didn't really see, how to solve this problem. Which type of solution could be thought of please?
Daniel M
Daniel M 2019 年 10 月 11 日
a is an index.
parfor a = 1:tn
Rafael Schwarzenegger
Rafael Schwarzenegger 2019 年 10 月 11 日
I see. So I cannot work with a in the code then, if I understand correctly.
Is there an alterative like spmd?
Daniel M
Daniel M 2019 年 10 月 11 日
編集済み: Daniel M 2019 年 10 月 11 日
Why do you want to parallelize this anyways? Seems like it could be vectorized fairly easily. And it runs fast without parfor too.
Daniel M
Daniel M 2019 年 10 月 11 日
編集済み: Daniel M 2019 年 10 月 11 日
My mistake, it cannot index into ndLog using ind because ind is NOT an indexing variable. ind could be any value and Matlab doesn't know how to handle repeated values so it restricts them.
For example
parfor j = 1:10
ind = 1;
ndLog(ind) = 1;
end
This is a simplified version of your error. So again I ask if parallel code is even necessary?
This is one of the strangest loop implementations I've ever seen.
Shivam Prasad
Shivam Prasad 2019 年 10 月 17 日
編集済み: Shivam Prasad 2019 年 10 月 17 日
Hi Rafael,
Please refer to this link regarding variables in parfor loops:- https://www.mathworks.com/help/parallel-computing/troubleshoot-variables-in-parfor-loops.html
Rafael Schwarzenegger
Rafael Schwarzenegger 2019 年 10 月 17 日
Thank you for all the link. I was thinking, it was a type of a sliced variable. My index is pointing, which line of code are we going to fill with data. I have a multidimensional matri,x which I tranform into a 2D matrix. Then this index is the link between them. There is no repeared value, so therefore, I am a bit struggling, why Matlab doesn't want it. But thank you for your suggestions.

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

回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeMatrix Indexing についてさらに検索

製品

リリース

R2017b

質問済み:

2019 年 10 月 11 日

Community Treasure Hunt

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

Start Hunting!

Translated by