在 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 个可用的工人。
numlabs
returns"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
在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 个可用的工人。
numlabs
returns"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