このトピックに関するいくつかの質問と回答を認識していますが、この特定の問題に対する満足のいく回答は見つかりませんでした:
numpy/scipy関数を介してnumpy配列が操作されるpythonループの単純な共有メモリ並列化を行う最も簡単な方法は何ですか?
私は最も効率的な方法を探しているわけではありません。ループが並列で実行されていない場合に大幅な書き換えを必要としない、実装が簡単なものが欲しかっただけです。OpenMP が低レベル言語で実装するのと同じように。
この点で私が見た最良の答えはthis oneですが、これはループを単一の引数をとる関数に表現する必要があるかなり不格好な方法です.共有配列変換のいくつかの行はcrudを必要とするようです.から並列関数が呼び出され__main__
、対話型プロンプト (私が多くの時間を費やす場所) からはうまく機能しないようです。
Python のすべての単純さにより、これは本当にループを並列化する最良の方法ですか? 本当に?これは、OpenMP 方式で並列化するのは簡単なことです。
multiprocessing モジュールの不透明なドキュメントを念入りに読んだところ、単純なループの並列化以外のすべてに適しているように見えるほど一般的であることがわかりました。マネージャー、プロキシ、パイプなどの設定には興味がありません。単純なループがあり、タスク間の通信がない完全に並列です。MPI を使用してこのような単純な状況を並列化するのはやり過ぎのように思えますが、この場合メモリ効率が悪いことは言うまでもありません。
Python 用の多数の異なる共有メモリ並列パッケージについて学ぶ時間がありませんでしたが、誰かがこれについてもっと経験があり、より簡単な方法を教えてくれるかどうか疑問に思っていました。Cython (私は既に使用しています) などのシリアル最適化手法や、BLAS などの並列 numpy/scipy 関数の使用を提案しないでください (私のケースはより一般的で、より並列です)。