在MATLAB中并行执行

时间:2015-08-20 19:29:38

标签: matlab parallel-processing execution

在MATLAB中,当我在调用numlabs后在命令窗口中使用parpool(4)指令时,它是1.但是,当我在并行命令窗口中使用相同的指令时它是4,为什么?

>> parpool(4)
Starting parallel pool (parpool) using the 'local' profile ... connected to 4 workers.

ans = 

 Pool with properties: 

            Connected: true
           NumWorkers: 4
              Cluster: local
        AttachedFiles: {}
          IdleTimeout: 30 minute(s) (30 minutes remaining)
          SpmdEnabled: true

>> numlabs

ans =

     1

>> pmode start
Starting pmode using the 'local' profile ... connected to 4 workers.

numlabs 4 4 4 4 

2 个答案:

答案 0 :(得分:3)

numlabs返回""当前作业并行操作的工人总数"。如果您在启动池后键入命令,那么显然不会有任何正在进行的工作。同样来自numlabs文档:

  

在spmd块中,每个worker上的numlabs返回并行池大小。

     

但是,在parfor-loop中,numlabs始终返回值1。

如果您只想要工人数量,可以使用gcp(获取当前池):

hp = gcp;
hp.NumWorkers

答案 1 :(得分:2)

我认为这是正常行为,因为numlabsspmd块内未使用或在并行作业期间应返回1。你上面所做的只是打开并行池,而不是要求它做并行工作。

我现在无法测试,但如果你这样打电话:

spmd

   some statement with numlabs

end

您将在命令窗口中看到您确实使用了4个可用的工作人员。