How to construct a Sliced Reduction Variable in MALTAB parallel for loop
2 views (last 30 days)
Show older comments
Hello all, I am having a code with the following construction. In this code, I need to extract K (M x M) from the parfor as this will save much time. Currently, I am working on it using ordinary for loop.
... % code
K = zeros(M,M);
parfor i = 1:N
k = ... % k is a matrix of dimensions (m x m) created in each pafor iteration.
u = ... % u is a vector of integers (n x 1) created in each pafor iteration.
K(u,u) = K(u,u) + k; % This line returns back an error message.
end
... % code
Is there anyway to re-write the code to be accepted in parfor loop without changing the calculation methodology. In a more general form, how can I involve a sliced reduction variable (K in this case) in parfor loop?
Thanks all and best Ahmad
0 Comments
Answers (2)
Jeff Miller
on 20 Nov 2017
Maybe something like this?
k = cell(N,1);
u = cell(N,1);
parfor i = 1:N
k{i} = ... % k is a matrix of dimensions (m x m) created in each pafor iteration.
u{i} = ... % u is a vector of integers (n x 1) created in each pafor iteration.
end
K = zeros(M,M);
for i = 1:N
K(u{i},u{i}) = K(u{i},u{i}) + k{i};
end
Edric Ellis
on 21 Nov 2017
parfor doesn't support the notion of a variable that is both sliced and reduced. You need to recast things so that you have either a pure sliced or a pure reduced output. Here's one way that you might be able to achieve that - I'm not sure if I've completely understood your example, but perhaps this should give you sufficient information to continue:
m = 4;
n = 3;
K = zeros(m, m);
parfor idx = 1:n
% build 'k' and 'u' as per the example
k = idx .* ones(m, m);
u = (1:n)';
% Build an m-by-m increment
increment = zeros(m, m);
increment(u, u) = k(u, u);
% Ensure 'K' is a pure reduction variable
K = K + increment;
end
See Also
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!