マルチプロセッシングを使用して簡単なテストを実行しようとしています。 numpyをインポートするまで(プログラムで使用されていなくても)テストはうまく動作します。ここでは、コードは次のようになります。マルチプロセッシングとNumPyの互換性がありません
from multiprocessing import Pool
import time
import numpy as np #this is the problematic line
def CostlyFunc(N):
""""""
tstart = time.time()
x = 0
for i in xrange(N):
for j in xrange(N):
if i % 2: x += 2
else: x -= 2
print "CostlyFunc : elapsed time %f s" % (time.time() - tstart)
return x
#serial application
ResultList0 = []
StartTime = time.time()
for i in xrange(3):
ResultList0.append(CostlyFunc(5000))
print "Elapsed time (serial) : ", time.time() - StartTime
#multiprocessing application
StartTime = time.time()
pool = Pool()
asyncResult = pool.map_async(CostlyFunc, [5000, 5000, 5000])
ResultList1 = asyncResult.get()
print "Elapsed time (multiporcessing) : ", time.time() - StartTime
私はnumpyのインポートしない場合、結果は次のとおりです。
CostlyFunc : elapsed time 2.866265 s
CostlyFunc : elapsed time 2.793213 s
CostlyFunc : elapsed time 2.794936 s
Elapsed time (serial) : 8.45455098152
CostlyFunc : elapsed time 2.889815 s
CostlyFunc : elapsed time 2.891556 s
CostlyFunc : elapsed time 2.898898 s
Elapsed time (multiporcessing) : 2.91595196724
総経過時間が計算がされていることを意味し、1つの工程に要する時間と同様です並列化される。 Iインポートない場合numpyの結果は次のようになる。
CostlyFunc : elapsed time 2.877116 s
CostlyFunc : elapsed time 2.866778 s
CostlyFunc : elapsed time 2.860894 s
Elapsed time (serial) : 8.60492110252
CostlyFunc : elapsed time 8.450145 s
CostlyFunc : elapsed time 8.473006 s
CostlyFunc : elapsed time 8.506402 s
Elapsed time (multiporcessing) : 8.55398178101
唯一つのコアを使用しているため、経過時間の合計は、両方のシリアルおよびマルチ方法についても同様です。この問題は数が少ないことから生じることは明らかです。マルチプロセッシングのバージョンとNumPyとの間に互換性がない可能性はありますか?
私は現在Python2.7、numpyの1.6.2を使用し、Linux上で0.70a1マルチプロセッシングい
これは非常に奇妙です - それはOSXでPython 2.7とNumPy 1.7で正常に動作するようです。 3つのコアが使用されているようなタイミングから、処理時間は遅くなります。これを確認できますか? – Daniel
お返事ありがとうございます。 NumPyをインポートすると、計算が1つのコアのみで行われることは確かです(mpstat(http://linuxcommand.org/man_pages/mpstat1.html)で確認しました)。同じコアが3つのジョブを同時に計算するように見えるので、各ジョブは8.5秒かかりますが、合計時間も8.5秒です。 – user2660966
私はnumpy 1.6.1、numpy 1.6.2とnumpy 1.7.1 ...同じ問題を試しました – user2660966