次のようなチュートリアルの簡単なコードがあります。
from multiprocessing import Process, Lock
import os
def f(i):
print 'hello world', i
print 'parent process:', os.getppid()
print 'process id:', os.getpid(), "\n\n"
if __name__ == '__main__':
lock = Lock()
for num in range(10):
p = Process(target=f, args=(num,))
p.start()
p.join()
これが両方のコアを使用しているかどうかを確認するにはどうすればよいですか? 現在、3 GB RAM と Intel Core 2 Duo @ 2.2 GHz を搭載した Ubuntu 11.04 を実行しています。
私がこれを学んでいるプロジェクトは、誰かのオフィスの巨大なマシンに移され、現在私が自由に使えるよりもはるかに多くの馬力を備えています。具体的には、プロセッサには少なくとも 4 つのコアがあり、アルゴリズムが利用可能なすべてのコアを自動的に検出して利用できるようにしたいと考えています。また、そのシステムは Linux 以外のものになる可能性があるため、マルチプロセッシング モジュールを OS 間で移動するときに注意しなければならない共通の落とし穴はありますか?
そうそう、また、スクリプトの出力は次のようになります。
hello world 0
parent process: 29362
process id: 29363
hello world 1
parent process: 29362
process id: 29364
hello world 2
parent process: 29362
process id: 29365
and so on...
これまでのところ、PPID はすべて同じです。実行時の上記のスクリプトは、それぞれ異なるプロセスである子プロセスを呼び出す親プロセスであるためです。マルチプロセッシングは複数のコアを自動的に検出して処理しますか? それとも、どこを調べるかを伝える必要がありますか? また、この質問のコピーを検索しているときに読んだことから、そうでなければ計算に使用されるシステムリソースを消費するため、コアよりも多くのプロセスを生成するべきではありません。
あなたの助けを前もってありがとう、私の論文はあなたを愛しています。