Python multiprocessing.cpu_count() returns '1' on 4-core Nvidia Jetson TK1

喜你入骨 提交于 2019-12-18 04:40:22

问题


Can anyone tell me why Python's multiprocessing.cpu_count() function would return 1 when when called on a Jetson TK1 with four ARMv7 processors?

>>> import multiprocessing
>>> multiprocessing.cpu_count()
1

The Jetson TK1 board is more or less straight out of the box, and no one has messed with cpusets. From within the same Python shell I can print the contents of /proc/self/status and it tells me that the process should have access to all four cores:

>>> print open('/proc/self/status').read()
----- (snip) -----
Cpus_allowed:   f
Cpus_allowed_list:      0-3
----- (snip) -----

What else could be causing this behavior from cpu_count()?

Edit:

To test Klaus's hypothesis, I used the following code to run a very simple experiment:

import multiprocessing

def f(x):
    n = 0
    for i in xrange(10000):
        n = max(n, multiprocessing.cpu_count())
    return n

p = multiprocessing.Pool(5)
for i in range(10):
    print p.map(f, [1,2,3,4,5])

Which produced the following output:

[3, 3, 3, 3, 1]
[4, 3, 3, 3, 3]
[4, 3, 3, 3, 3]
[3, 3, 4, 3, 3]
[4, 3, 3, 3, 3]
[3, 3, 4, 3, 3]
[4, 3, 3, 3, 3]
[3, 3, 4, 3, 3]
[3, 3, 3, 4, 3]
[4, 3, 3, 3, 3]

Running just a single iteration of p.map(f, [1,2,3,4,5]) usually produces [1, 1, 1, 1, 1], although occasionally a 2 will appear as one of the list elements.


回答1:


On Linux systems multiprocessing.cpu_count() relies on a sysconf (_SC_NPROCESSORS_ONLN) call, which returns the number of online CPUs in contrast to sysconf (_SC_NPROCESSORS_CONF) which returns the number of configured CPUs.

The values might differ in systems with advanced CPU power management functionality that sets CPU cores offline to save energy or with similar dynamic CPU activation functionality.




回答2:


The documentation for os.cpu_count() (which declares that it returns the total number of CPUS, not the number of usable CPUs) provides a means to count usable CPUs:

len(os.sched_getaffinity(0))

see https://docs.python.org/3/library/os.html#os.cpu_count



来源:https://stackoverflow.com/questions/31344582/python-multiprocessing-cpu-count-returns-1-on-4-core-nvidia-jetson-tk1

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!