簡體   English   中英

Python multiprocessing.cpu_count() 在 4 核 Nvidia Jetson TK1 上返回“1”

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

誰能告訴我為什么 Python 的multiprocessing.cpu_count()函數在具有四個 ARMv7 處理器的 Jetson TK1 上調用時會返回1

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

Jetson TK1 開發板或多或少是直接開箱即用的,沒有人弄亂過 cpuset。 在同一個 Python shell 中,我可以打印/proc/self/status ,它告訴我該進程應該可以訪問所有四個核心:

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

還有什么可能導致cpu_count()出現這種行為?

編輯:

為了檢驗 Klaus 的假設,我使用以下代碼運行了一個非常簡單的實驗:

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

這產生了以下輸出:

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

僅運行p.map(f, [1,2,3,4,5])的單次迭代通常會產生[1, 1, 1, 1, 1] ,盡管偶爾會出現2作為列表元素之一.

在 Linux 系統上, multiprocessing.cpu_count()依賴於sysconf (_SC_NPROCESSORS_ONLN)調用,它返回在線CPU 的數量,而sysconf (_SC_NPROCESSORS_CONF)則返回已配置的CPU 的數量。

在具有高級 CPU 電源管理功能(將 CPU 內核設置為離線以節省能源)或具有類似動態 CPU 激活功能的系統中,這些值可能會有所不同。

os.cpu_count() 的文檔(聲明它返回 CPU 總數,而不是可用 CPU 的數量)提供了一種計算可用 CPU 的方法:

len(os.sched_getaffinity(0))

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM