[これが私の最初の投稿であり、SEの使用を完全に誤解していないことを望みます-もしそうであれば、事前に謝罪します]
「bgschaid」には、提供された情報に基づいて質問に答えるのが非常に難しいことに同意します。低レベルのルーチンでマルチコアアーキテクチャを活用したい場合、または並外れた並列問題のために並列処理を活用する必要がある場合、またはその中間の場合、大きな違いが生じます。Pythonでのさまざまな並列計算の可能性の概要については、こちらをご覧ください。
前者の場合、少なくともEnthoughtのMKLコンパイルバージョンでマルチコアアーキテクチャをサポートするNumPy / SciPyなどのツールを使用することをお勧めします。ここでは、環境変数「MKL_NUM_THREADS」を使用して、使用するコアの数を制御できます。これは高度に最適化されたライブラリに依存しているため、パフォーマンスの面で勝つことはほとんどありません。これらの高品質で高度に最適化されたライブラリを可能な限り使用することをお勧めします。
大まかなレベルで並列処理を利用する場合、Python標準ツールのマルチプロセッシングは使いやすく、共有データオブジェクトもサポートしています。マルチプロセッシングパッケージの一部として使用するさまざまなツールがあります。私が使用しているmap_async(SIMDなど)apply_async良い結果にはいくつかの問題のために(MIMDなど)。マルチプロセッシングパッケージには、非常に使いやすいですし、あなたのコードの他の潜在的なユーザーが簡単にそれを使用できることを期待できるというPythonの手段の標準部分です。 マルチプロセッシングは、NumPyデータオブジェクトにも直接リンクします。マルチプロセッシングを使用する場合私はあなたに、環境変数「MKL_NUM_THREADS」を設定することをお勧めします1ようにnumpyのが唯一の各プロセス/労働者のための1つのコア許可されている-そう、あなたがnumpyの平行との間でリソースの競合で終わる可能性マルチプロセッシングリード性能の低下へと。 マルチプロセッシングは、同じオペレーティングシステムの下でマルチCPU /マルチコアアーキテクチャに対して正常に機能します。4 x Xeon E7-4850 CPU(各10コア)と512 GBメモリを備えた共有メモリコンピュータでマルチプロセッシングを使用しましたが、非常にうまく機能しました。共有配列はmultiprocessing.Arrayまたはsharedctypesで処理できます。Pythonのドキュメントはこちらで確認できます。library.pdfファイル。この基本的な部分のいくつかを説明するスライドがあります-それらが必要な場合はPM
分散メモリを使用したクラスター構成の場合、mpi4pyが推奨ツールであると思われます。私自身はこれを使用していませんが、Python並列プログラミングで多く使用されていることを知っています。