假设我有一个程序要在拥有32个核心(64个线程)的Linux机器上运行,而我只能使用其中的10个核心(20个线程)。因此,在运行程序之前我想要指定这一点。
我搜索了谷歌并找到了
然后我尝试了
相同的
我搜索了谷歌并找到了
maxNumCompThreads
,但是当我在MATLAB 2016a的core i5 (2个核心,4个线程)机器上测试时,它似乎无法工作。也就是说,我对feature('numCores')
的任何操作都会得到相同的输出。maxNumCompThreads(1)
maxNumCompThreads(2)
maxNumCompThreads(4)
maxNumCompThreads('Automatic')
然后我尝试了
parpool
(每次使用delete(gcp('nocreate'))
关闭当前的parpool会话)。当运行parpool(4)
时出现错误(我认为我知道原因: parpool
需要输入核心数,而超线程会自动启用,测试机器只有2个物理核心)。所以我尝试了parpool(1)
和parpool(2)
。同样,feature('numCores')
的输出没有改变。
问题:那么对于上述情况,什么是正确的工具?feature('numCores')
是查看是否生效的正确监控工具吗?
相同的
feature('numCores')
输出如下:MATLAB detected: 2 physical cores.
MATLAB detected: 4 logical cores.
MATLAB was assigned: 4 logical cores by the OS.
MATLAB is using: 2 logical cores.
MATLAB is not using all logical cores because hyper-threading is enabled.
编辑:当我在Linux机器上运行parpool(10)
时,我收到了以下错误提示:
Starting parallel pool (parpool) using the 'local' profile ... Error using parpo ol (line 103)
Couldn't interpret output from psname.sh: ""
Error in parpool_test_2016_10_03 (line 3)
parpool(10);
parpool(1)
几乎没有意义,如果它只有1个核心,那么它不是并行池。不知道呢,只是假设。 - Ander Biguriparpool
在 Linux 机器上甚至都不能工作。 - yurnero