私はPythonで科学計算ツールを開発しています。これは、NUMA共有メモリ環境の複数のコアに作業を分散できるはずです。私はこれを行う最も効率的な方法を検討しています。
スレッドは-残念ながら-Pythonのグローバルインタープリターロックのためにゲームから外れています。これは私の唯一の選択肢としてフォークを残します。プロセス間通信の場合、オプションはパイプ、ソケット、またはmmapだと思います。このリストに不足しているものがある場合は、それを指摘してください。
私のアプリケーションでは、プロセス間のかなりの通信と、ある程度の共通データへのアクセスが必要になります。私の主な関心事はレイテンシーです。
私の質問:プロセスをフォークすると、そのメモリは割り当てられているコアの近くに配置されますか?書き込み時の*nixコピーのフォークとして、最初はこれが当てはまらないと思います。メモリアクセスを高速化するためにコピーを強制しますか?その場合、それを行うための最良の方法は何ですか?通信にmmapを使用する場合、そのメモリは引き続きコアに分散できますか、それとも単一のコアに配置されますか?アクセスを最適化するためにデータを透過的に再配置するプロセスはありますか?物理的な割り当てを直接制御する方法、または最適化を支援するために割り当てに関する情報を要求する方法はありますか?
より高いレベルでは、これらのうちどれが私のハードウェアによって決定され、どれがオペレーティングシステムによって決定されますか?私はハイエンドのマルチソケットマシンを購入している最中であり、AMDOpteronとIntelXeonの間で疑問を抱いています。上記の質問のいずれかに対する特定のハードウェアの影響は何ですか?