在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
答案 0 :(得分:3)
numlabs
返回""当前作业并行操作的工人总数"。如果您在启动池后键入命令,那么显然不会有任何正在进行的工作。同样来自numlabs
文档:
在spmd块中,每个worker上的numlabs返回并行池大小。
但是,在parfor-loop中,numlabs始终返回值1。
如果您只想要工人数量,可以使用gcp
(获取当前池):
hp = gcp;
hp.NumWorkers
答案 1 :(得分:2)
我认为这是正常行为,因为numlabs
在spmd
块内未使用或在并行作业期间应返回1。你上面所做的只是打开并行池,而不是要求它做并行工作。
我现在无法测试,但如果你这样打电话:
spmd
some statement with numlabs
end
您将在命令窗口中看到您确实使用了4个可用的工作人员。