假设我有一个程序要在具有 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 postthis StackOverflow question 以了解有关 feature 的更多信息。

关于MATLAB:控制数量核心/线程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39834042/

10-12 19:33