2

私はコンピューターのクラスターで作業しており、最近、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 を使用してメモリを割り当てることができないのと同じですが、解決策は役に立ちません。

ヒント/ヘルプ/説明をいただければ幸いです

4

0 に答える 0