Calling nested functions inside a parfor loop

31 次查看(过去 30 天)
Hello,
I am trying to parallelize a program. I am experiencing issues with a parallel for and nested functions. My main function contains a big parfor loop, and several nested functions. These nested function access (both read and write) the variables declared in the main function. Without parallelism, everything works fine: my nested function do their job and update the variables in my main function (as it is supposed to be). This is true whether I call the nested function directly or using a handle. However, when I switch to a parfor (and thus use handles, as it should be), and make so that no error appear, the nested function no longer updates the variables from the main function. Said otherwise, MATLAB does not detect any error, but my program doesn't really do anything!
Below is a representative example:
function garbage
accumulator = [];
handleFoo = @foo;
for i=1:10
aux = i*5;
handleFoo(aux);
end
accumulator
function foo(n)
accumulator(end+1) = n;
end
end
Running this program as-is will result "accumulator" equal to 1:10. But simply changing the for loop to a parfor will resut in an empty array.
Is this the expected behavior of MATLAB? Is there away to work around this? I could not find help on this specific question anywhere.
Thank you Antoine

采纳的回答

Edric Ellis
Edric Ellis 2015-3-16
Yes, this is expected behaviour - the MATLAB workers operating on the body of your parfor loop are separate MATLAB processes, and they do not share thing like handle variables, or nested function workspaces. All data that flows into and out from a parfor loop must go through explicit variable transfers.
  2 个评论
Antoine GUELLIER
Antoine GUELLIER 2015-3-16
编辑:Antoine GUELLIER 2015-3-16
Thank you! I supposed it was this way, but I didn't see this fact explicited anywhere.
Hung Dao
Hung Dao 2021-7-6
Is there a solution for this? I am having a similar issue. I want to call a function f inside a parfor loop. I am using feval(f, arguments of f). The function f calls another functions. Without parfor, it works OK but with parfor it results in an error.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Parallel for-Loops (parfor) 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!

Translated by