gpt4 book ai didi

matlab - appdata 是否在并行池中的工作人员之间共享?

转载 作者:太空宇宙 更新时间:2023-11-03 20:17:17 26 4
gpt4 key购买 nike

我正在处理一个调用多个子函数(在同一个文件中)的复杂函数。为了传递数据, setappdata / getappdata 偶尔使用机制。此外,一些子功能包含 persistent变量(初始化一次以便稍后保存计算)。

我一直在考虑是否可以在并行池中的多个 worker 上执行此功能,但开始担心可能会出现一些意外的数据共享(否则每个 worker 都是唯一的)。

我的问题是 - 我如何判断 global 中的数据是否正确?和/或 persistent和/或 appdata是在 worker 之间共享还是每个人都是独一无二的?

几个可能相关的事情:

  1. 在我的例子中,任务是完全并行的,它们的结果不应以任何方式相互影响(并行化只是为了节省时间)。
  2. 没有创建任何临时文件或文件夹,因此不存在一名员工错误读取另一名员工留下的文件的风险。
  3. 所有 persistent和 appdata 存储的变量是在 parfor 子函数中创建/分配的.

我知道每个 worker 对应一个新进程,有自己的内存空间(大概是 global/persistent/appdata 工作空间)。基于此和this official comment ,我会说这种共享很可能不会发生……但是我们如何确定呢?

相关资料:

  1. This Q&A .
  2. This documentation page .

最佳答案

这很容易测试,我们将分两个阶段进行。

第 1 步:手动生成“ worker ”

首先,创建这 3 个函数:

%% Worker 1:
function q52623266_W1
global a; a = 5;
setappdata(0, 'a', a);
someFuncInSameFolder();
end

%% Worker 2:
function q52623266_W2
global a; disp(a);
disp(getappdata(0,'a'));
someFuncInSameFolder();
end

function someFuncInSameFolder()
persistent b;
if isempty(b)
b = 10;
disp('b is now set!');
else
disp(b);
end
end

接下来我们启动 2 个 MATLAB 实例(代表一个并行池的两个不同的 worker),然后在其中一个上运行 q52623266_W1,等待它完成,然后运行 ​​q52623266_W2在另一个。如果数据共享,第二个nd实例将打印一些东西。这导致(在 R2018b 上):

>> q52623266_W1
b is now set!

>> q52623266_W2
b is now set!

这意味着数据不共享。到目前为止一切顺利,但有人可能想知道这是否代表一个实际的并行池。所以我们可以稍微调整我们的功能并继续下一步。

第 2 步:自动生成 Worker

function q52623266_Host

spmd(2)
if labindex == 1
setupData();
end
labBarrier; % make sure that the setup stage was executed.
if labindex == 2
readData();
end
end

end

function setupData
global a; a = 5;
setappdata(0, 'a', a);
someFunc();
end

function readData
global a; disp(a);
disp(getappdata(0,'a'));
someFunc();
end

function someFunc()
persistent b;
if isempty(b)
b = 10;
disp('b is now set!');
else
disp(b);
end
end

运行上面的代码我们得到:

>> q52623266_Host
Starting parallel pool (parpool) using the 'local' profile ...
connected to 2 workers.
Lab 1:
b is now set!
Lab 2:
b is now set!

这又意味着数据不共享。请注意,在第二步中,我们使用了 spmd,出于此测试的目的,它的功能应类似于 parfor

关于matlab - appdata 是否在并行池中的工作人员之间共享?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52623266/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com