Python(ubuntu)で並列プロセスを実行しようとしています。
マルチプロセッシングを使い始めたところ、単純な例ではうまくいきました。
その後、ピクルエラーが発生したため、パトスに切り替えました。さまざまなオプションに少し混乱したので、非常に単純なベンチマーク コードを作成しました。
import multiprocessing as mp
from pathos.multiprocessing import Pool as Pool1
from pathos.pools import ParallelPool as Pool2
from pathos.parallel import ParallelPool as Pool3
import time
def square(x):
# calculate the square of the value of x
return x*x
if __name__ == '__main__':
dataset = range(0,10000)
start_time = time.time()
for d in dataset:
square(d)
print('test with no cores: %s seconds' %(time.time() - start_time))
nCores = 3
print('number of cores used: %s' %(nCores))
start_time = time.time()
p = mp.Pool(nCores)
p.map(square, dataset)
# Close
p.close()
p.join()
print('test with multiprocessing: %s seconds' %(time.time() - start_time))
start_time = time.time()
p = Pool1(nCores)
p.map(square, dataset)
# Close
p.close()
p.join()
print('test with pathos multiprocessing: %s seconds' %(time.time() - start_time))
start_time = time.time()
p = Pool2(nCores)
p.map(square, dataset)
# Close
p.close()
p.join()
print('test with pathos pools: %s seconds' %(time.time() - start_time))
start_time = time.time()
p = Pool3()
p.ncpus = nCores
p.map(square, dataset)
# Close
p.close()
p.join()
print('test with pathos parallel: %s seconds' %(time.time() - start_time))
約
- プレーン シリアル コードで 0.001 秒、パラレルなし、
-multiprocessing
オプションで0.100 秒、 - で 0.100 秒、 -
で 4.470
秒pathos.multiprocessing
、
- でエラーpathos.pools
AssertionError
pathos.parallel
これらのさまざまなオプションの使用方法をhttp://trac.mystic.cacr.caltech.edu/project/pathos/browser/pathos/examples.htmlからコピーしました
このような単純な例では、並列処理は単純なシリアル コードよりも長くなることがわかります。私が理解していないのは、パトスの相対的なパフォーマンスです。
ディスカッションをチェックしましたがpathos.pools
、なぜそんなに長くなるのか、なぜエラーが発生するのか理解できませんでした (最後のオプションのパフォーマンスがどうなるかわかりません)。
私も単純な二乗関数を試してみましたが、そのためにpathos.multiprocessing
はよりもはるかに長いですmultiprocessing
誰かがこれらのさまざまなオプションの違いを説明できますか?
さらに、pathos.multiprocessing
centOS を実行しているリモート コンピューターでオプションを実行しましたが、パフォーマンスは の約10 倍悪くなりmultiprocessing
ました。
コンピューターをレンタルしている会社によると、自宅のコンピューターと同じように機能するはずです。マシンの詳細がわからないと情報を提供するのは難しいかもしれませんが、それがどこから来たのかについてのアイデアがあれば、それは役に立ちます.