シングルスレッド CPLEX と Java (Linux 下) を使用して、線形プログラム (LP) をモデル化し、解決しています。私の目的は、並列スレッドで複数の小さな LP を解決することです。理想的には、各コアが 1 つの LP を個別に解決します。
問題は、2 つ以上の LP を並行して解くと、1 つの LP を解くよりもはるかに時間がかかることです。非常に単純なテストで、同じ LP を解決する複数の同じプロセスを同時に開始しました。単一のプロセスを開始する場合と複数のプロセスを開始する場合の実行時間の違いは非常に大きくなります。
- 1工程:180秒
- 2工程:225秒
- 3工程:280秒
同様に、同じプロセスから複数のスレッドを開始して複数の LP を同時に解決するのは、単一の LP を解決するよりもはるかに時間がかかりました。
メモリ アクセスがボトルネックになるのではないかと考えましたが、メモリへの読み書きが頻繁に行われるコードをテストしたところ、同等のランタイムが得られました。
- 1工程:87秒
- 2工程:85秒
- 3プロセス 88秒
遅さの原因は何ですか?
私がこれを実行しているマシンには、スワッピングを避けるために 6 つのコアと十分なメモリがあります。IBM ILOG Cplex ライブラリーはバージョン 12.5 です。