ソケットを使用してCで書かれた簡単なクライアントサーバープログラムがあります。サーバーは、要求ごとに新しいpthreadを開きます。新しい開かれたスレッドごとに、私はCPU集約的なタスク(行列の乗算)を行います。MPI:1つのMPIプロセスでプロセッサーが100%にならない
私は2つの物理コアと4つの論理プロセッサを持つCPUを持っています。
4つのクライアントを実行すると、サーバーは4つのスレッドを開き、各スレッドは論理プロセッサーに割り当てられ、CPUは100%(使用率)になります。
5秒遅れでクライアントを1つずつ実行すると、CPUが25%(クライアント1台)から50%(クライアント2台)、75%(クライアント3台)最終的に100%(4クライアント)になります。これはかなり正常な動作です。
サーバーコード全体をMPIプロセス(1つのMPIプロセス)に埋め込むと、開始するクライアントの数にかかわらずCPUは50%以上を上げません。
どうしてですか?
フリスト・イリエフがmpirunのに--bind-になしを渡して、私の質問にコメントで言ったように:
この質問/問題への公式の回答は以下の通りです丁重
おそらくMPIランチャーは、実行されたバイナリのCPUセットを制限します。あなたのMPIマニュアルである 'sched_getaffinity'で確認してください。 MPIインプリメンテーション、バージョン、MPIバイナリとOSを起動する方法についての詳細は、ヘルプを参照してください。 – Zulan
MPI実装がOpen MPIの場合、 '--bind-to none'を' mpiexec'/'mpirun'に渡してみてください。 。 –
タスクが固定されているかどうか不明な場合は、単純に 'mpirun ... grep Cpus_allowed_list/proc/self/status' –