Python multiprocessing.cpu count () retourne '1' sur 4-core Nvidia Jetson TK1

est-ce que quelqu'un peut me dire pourquoi la fonction multiprocessing.cpu_count() de Python retournerait 1 quand elle est appelée sur un Jetson TK1 avec quatre processeurs ARMv7?

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

la carte Jetson TK1 est plus ou moins sortie de la boîte, et personne n'a touché aux cpusets. À partir du même shell Python, je peux imprimer le contenu de /proc/self/status et il me dit que le processus devrait avoir accès aux quatre noyaux:

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

quoi autrement pourrait être la cause de ce comportement de cpu_count() ?

Edit:

pour tester L'hypothèse de Klaus, j'ai utilisé le code suivant pour exécuter une expérience très simple:

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])

qui a produit la sortie suivante:

[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]

L'exécution d'une seule itération de p.map(f, [1,2,3,4,5]) produit habituellement [1, 1, 1, 1, 1] , bien que parfois un 2 apparaîtra comme l'un des éléments de la liste.

5
demandé sur Artem Likhvar 2015-07-10 18:24:44

1 réponses

sur les systèmes Linux multiprocessing.cpu_count() s'appuie sur un appel sysconf (_SC_NPROCESSORS_ONLN) , qui renvoie le numéro de en ligne CPUs par opposition à sysconf (_SC_NPROCESSORS_CONF) qui renvoie le numéro de configuré CPUs.

les valeurs peuvent différer dans les systèmes avec une fonctionnalité avancée de gestion de L'énergie CPU qui permet de désactiver les cœurs CPU pour économiser de l'énergie ou avec une fonctionnalité d'activation CPU dynamique similaire.

15
répondu Klaus D. 2017-01-25 15:24:45