Parallel for loop: Using broadcasting array variable values as indexes
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Good day.
I have recently aquired the parallel computing toolbox to speed up some of our applications. I have run into the following challenge and hope that someone can give me advice on this.
topNodes = [2 3 4 5 6 7];
bottomNodes = [1 2 3 4 5 6];
polarity = [1 1 -1 1 1 1];
nodes = max([topNodes bottomNodes]);
T = zeros(numel(polarity),nodes);
for i = 1:numel(polarity);
if polarity(i) < 0
T(i,bottomNodes(i)) = -1;
T(i,topNodes(i)) = 1;
else
T(i,bottomNodes(i)) = 1;
T(i,topNodes(i)) = -1;
end
end
Now, if I use a parfor loop, it complains. Some assistance will be much appreciated.
Kind regards,
Barend.
0 Kommentare
Akzeptierte Antwort
Sarah Wait Zaranek
am 14 Nov. 2011
For parfor loops, when you index into a sliced variables, restrictions are placed on the first-level variable indices. This allows parfor to easily distribute the right part of the variable to the right workers. One of these first-level indices must be the loop counter variable or the counter variable plus or minus a constant. Every other first-level index must be a constant, a non-loop counter variable, a colon, or an end.
I explain this more in the blog post where you also left this question.
See a possible fix below.
topNodes = [2 3 4 5 6 7];
bottomNodes = [1 2 3 4 5 6];
polarity = [1 1 -1 1 1 1];
nodes = max([topNodes bottomNodes]);
T = zeros(numel(polarity),nodes);
parfor i = 1:numel(polarity);
myData = T(i,:);
if polarity(i) < 0
myData(i,bottomNodes(i)) = -1;
myData(i,topNodes(i)) = 1;
else
myData(i,bottomNodes(i)) = 1;
myData(i,topNodes(i)) = -1;
end
T(i,:) = myData;
end
3 Kommentare
Sarah Wait Zaranek
am 15 Nov. 2011
Yes, there is an overhead to pass the data to and from the workers - so for code that takes seconds to run - there isn't often a speedup. Also, you are correct that vectorization often is a better choice then de-vectorizing and using parfor.
Konrad Malkowski
am 17 Nov. 2011
You should also try running the script as a function. In general MATLAB performance is better with functions that with scripts, as scripts are interpreted one line at a time.
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Parallel for-Loops (parfor) finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!