在 MATLAB 中并行执行

Parallel execution in MATLAB

在MATLAB中,当我调用parpool(4)后在命令Window中使用numlabs指令时,它是1。但是,当我在并行命令中使用相同的指令时window是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 

我认为这是正常行为,因为 numlabs 应该 return 1 当不在 spmd 块内或并行作业期间使用时。你上面所做的只是打开了并行池,并没有要求它做一个并行工作。

我现在无法测试,但如果你这样调用:

spmd

   some statement with numlabs

end

您将在命令 Window 中看到打印您确实在使用 4 个可用的工人。

numlabsreturns"total number of workers operating in parallel on current job"。如果您在启动池后键入命令,显然不会有任何正在进行的工作。同样来自 numlabs 文档:

In an spmd block, numlabs on each worker returns the parallel pool size.

However, inside a parfor-loop, numlabs always returns a value of 1.

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

hp = gcp;
hp.NumWorkers