如何在MATLAB中向parpool的worker发送一些变量?

时间:2016-06-28 14:51:21

标签: matlab parallel-processing

有没有办法向parpool的工人发送一些变量?

例如,我可能想告诉每个工人parpool中的工人总数。或者我可能只进行一次计算,并在特定工作人员或所有工作人员之间共享。我觉得每个工人只需要进行一次计算就是浪费资源和时间。

例如

*Some calculations processed and a number of variables generated

NumWorkers = 32;
ParallelPool  = parpool(NumWorkers);

*Pass the just variables generated to the workers

pctRunOnAll NumWorkers = 32;
pctRunOnAll ParallelScript

目前,我告诉每个工人使用pctRunOnAll命令功能的工人总数,但我不喜欢这样,因为我必须改变两个地方的工人数量,这很可能如果我陷入困境会导致错误。我还想扩展它,以便我可以传递一些变量。

由于

2 个答案:

答案 0 :(得分:0)

我会做这样的事情:

%Some calculations processed and a number of variables generated

NumWorkers = 32;
ParallelPool  = parpool(NumWorkers);

parfor ixWorker = 1:NumWorkers 
    ParrallelFunction(NumWorkers, otherVariable, stillMoreVariables)
end

一些注意事项:

  1. 我总是后悔运行脚本而不是函数。无论您在脚本中执行什么操作,一旦将其转换为函数,许多事情(并行化就是其中之一)变得更容易。

  2. parfor命令是运行N次的简单方法,其中大小不一定与工作池相同。例如,如果您运行包含100个样本的蒙特卡洛样式运行,则使用parfor ix = 1:100,并且Matlab将使所有工作人员忙碌,直到100次执行完成。

答案 1 :(得分:0)

我的解决方案是使用eval。这是一个非常简单的解决方案,我不知道为什么我之前没有想到它。我一直在寻找替代解决方案,但我似乎无法找到任何东西。它不是一个优雅的解决方案,但它有效。

EG。

*Some calculations to obtain the following variables

Variable1 = 12;
Variable2 = 65;
Variable3 = 1205;
Variable4 = 16542;


cmd = ['pctRunOnAll Variable1 = ' num2str(Variable1) ';'];
eval(cmd)
cmd = ['pctRunOnAll Variable2 = ' num2str(Variable2) ';'];
eval(cmd)
cmd = ['pctRunOnAll Variable3 = ' num2str(Variable3) ';'];
eval(cmd)
cmd = ['pctRunOnAll Variable4 = ' num2str(Variable4) ';'];
eval(cmd)