parfor usage in parallel computing tool

1 回表示 (過去 30 日間)
Yize Wang
Yize Wang 2019 年 8 月 28 日
コメント済み: Yize Wang 2019 年 8 月 29 日
Hi,
I am trying to implement parallel computing in MATLAB. The following code works,
A = zeros(10,5);
for k = 2:10
parfor i =1:5
A(k,i) = 1;
end
end
However, if I change it a little,
A = zeros(10,5);
for k = 2:10
parfor i =1:5
A(k-1,i) = 1;
end
end
an error returns
Error using parallel_computing_test (line 5)
Error: The variable A in a parfor cannot be classified.
See Parallel for Loops in MATLAB, "Solve Variable Classification Issues in parfor-Loops".
I already read the document, but I still do not understand what the problem is. Can anybody please help me?
Thank you in advance.

採用された回答

Edric Ellis
Edric Ellis 2019 年 8 月 29 日
This is a documented restriction for sliced variables within parfor. The relevant doc page is here, and the relevant section is:
Form of Indexing. Within the first-level of indexing for a sliced variable, exactly one indexing expression is of the form i, i+k, i-k, or k+i. The index i is the loop variable and k is a scalar integer constant or a simple (non-indexed) broadcast variable. Every other indexing expression is a positive integer constant, a simple (non-indexed) broadcast variable, a nested for-loop index variable, colon, or end.
It's the sentence in bold at the end that is relevant. In your non-working case, the indexing expression k-1 does not meet the criteria. k is a broadcast variable, but the expression k-1 is not itself a broadcast variable. You could fix this like so:
A = zeros(10,5);
for k = 2:10
kLess1 = k - 1;
parfor i =1:5
A(kLess1,i) = 1;
end
end
because kLess1 is a broadcast variable.
  1 件のコメント
Yize Wang
Yize Wang 2019 年 8 月 29 日
Thank you so much for the clear explanation!

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

その他の回答 (0 件)

カテゴリ

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