私はコンピューターのクラスターで作業しており、最近、Python で並列プログラミングを使い始めました。
私の現在の理解では、mpi4py は異なるノード間の作業を管理するのに役立ち、マルチプロセッシングはノードのコアで作業を管理します。
実行中のプロシージャの数に基づいて、大きな for ループをパーツに分割しました。
comm.Get_size() = nprocs
次に、ノードのcpu_countによってプロセスのプールを生成しようとし、それらに作業を与えました。コードは次のとおりです。
if rank == proc:
global output_dictionary
output_dictionary = {}
p=Pool(processes=cpu_count())
print "rank", rank, "started backpropagating. Async mapping..."
results = []
for key in serialize_and_divide(n_muscles,n_mn,rank,nprocs):
r = p.apply_async(calc_neuronij_grad,key,callback=append_grads_list)
results.append(r)
for r in results:
r.wait()
p.close()
p.join()
私の問題は、コードが p = Pool(processes=cpu_count()) に達した瞬間に、「メモリを割り当てられません」というエラーが生成されることです。トレースバックは、Python が multiprocessing.pool を使用してメモリを割り当てることができないのと同じですが、解決策は役に立ちません。
ヒント/ヘルプ/説明をいただければ幸いです