假设我有一个程序要在具有 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 session 时)。运行 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);
最佳答案
不,这不是正确的监控工具。看看 feature('numthreads')
代替:
>> feature('numcores')
MATLAB detected: 4 physical cores.
MATLAB detected: 8 logical cores.
MATLAB was assigned: 8 logical cores by the OS.
MATLAB is using: 4 logical cores.
MATLAB is not using all logical cores because hyper-threading is enabled.
ans =
4
>> feature('numthreads')
ans =
4
>> maxNumCompThreads(1)
ans =
4
>> feature('numcores')
MATLAB detected: 4 physical cores.
MATLAB detected: 8 logical cores.
MATLAB was assigned: 8 logical cores by the OS.
MATLAB is using: 4 logical cores.
MATLAB is not using all logical cores because hyper-threading is enabled.
ans =
4
>> feature('numthreads')
ans =
1
一般来说,使用
feature
时要小心,因为它没有记录并且容易在没有警告的情况下更改。查看 this post 和 this StackOverflow question 以了解有关 feature
的更多信息。关于MATLAB:控制数量核心/线程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39834042/