2

マルチコアプログラミングは初めてです。1 つのコアのみを使用する次のプログラム。複数のコアで実行するにはどうすればよいですか (私は 4 つのコアを持っています)。

simDict={}

def sim(outer,inner, ...):
    val= /*do some math*/
    simDict[...]=val

def foo():
   for outer in xrange(0, limit):
      for inner in xrange(outer, limit):
          sim(outer,inner, ...)
foo()
4

2 に答える 2

5

簡単:

from multiprocessing import Pool

p = Pool()

def do_inner(outer, limit):
    for inner in xrange(outer, limit):
        sim(outer, inner, ...)

def foo():
    p.map(do_inner, xrange(limit))

foo()

これはmultiprocessing.Pool、ワーカー プロセスのプールを作成するために使用されます。

于 2012-10-21T05:29:39.620 に答える
1

あなたの問題については、キューを使用してから、消費者/生産者の問題に固執し、そこから進みます。スレッド間に何らかのデータ依存関係がない限り、より高度なロック メカニズムを使用する必要があり、はるかに多くのスレッド化の落とし穴から保護する必要があります。

Producer/Consumer の概念: http://en.wikipedia.org/wiki/Producer-consumer_problem 参考までに: http://docs.python.org/library/multiprocessing.html

multiprocessingスレッドのみが使用されている場合、グローバルインタープリターロックが特定のケースで速度を低下させる可能性があるのと同様に、使用すると役立つ場合があります。

于 2012-10-21T05:30:16.817 に答える