0

32 コアのマシンを活用するために多くの並列プロセスを作成しようとしていますが、トップ画面を見ると 5 つの Python プロセスしか表示されていません。これは私のコードでした:

max_processes = min(len(corpus_paths), cpu_count()*2)
__log.debug("Max processes being used: " + str(max_processes))
pool = Pool(max_processes)
for path in corpus_paths:
    pool.apply_async(...)
pool.close()
pool.join()

そして、これはマシンの構成です:

[minh.lengoc@compute-1-5 ~]$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                32
On-line CPU(s) list:   0-31
Thread(s) per core:    2
Core(s) per socket:    8
CPU socket(s):         2
NUMA node(s):          4
Vendor ID:             AuthenticAMD
CPU family:            21
Model:                 1
Stepping:              2
CPU MHz:               2099.877
BogoMIPS:              4199.44
Virtualization:        AMD-V
L1d cache:             16K
L1i cache:             64K
L2 cache:              2048K
L3 cache:              6144K
NUMA node0 CPU(s):     0,2,4,6,8,10,12,14
NUMA node1 CPU(s):     16,18,20,22,24,26,28,30
NUMA node2 CPU(s):     1,3,5,7,9,11,13,15
NUMA node3 CPU(s):     17,19,21,23,25,27,29,31

ありがとうございました!


それは今動作します。私のコードに何か問題があったに違いありませんが、それが何であったかを確認するためにロールバックできませんでした。閉まっている。

4

2 に答える 2

4

すべてのコアが使用されない理由の1つは、pool.apply_asyncによって実行されているターゲット関数の完了が速すぎる場合です。その場合の解決策は、より多くのデータをターゲット関数に送信することです(したがって、呼び出しごとにより多くの作業を実行します)。

これは、石炭を32個の炉にシャベルで運ぶようなものです。小さなシャベルを使用する場合、最初の炉の石炭が使い果たされる前に、5番目の炉にたどり着く可能性があります。次に、最初の炉を補充する必要があります。石炭が大量にある場合でも、すべての炉を使用することはできません。十分な大きさのシャベルを使用すると、すべての炉を燃焼させることができます。

于 2013-03-06T15:55:30.780 に答える