私は遺伝的アルゴリズムを作成し、そのパフォーマンスを最適化するために、個人のフィットネステストを並列化することにしました。これが私のアルゴリズムにどのような変更を加えたかを確認するために、並列化の前に行ったテスト実行をやり直して、人口サイズの増加に対するGAのパフォーマンスをテストしました。
GAの並列バージョンは、実際には元のバージョンよりも約50%長くかかりました。並列化のオーバーヘッドが実際に節約するよりも時間がかかる場合があることを認識していますが、それがこの状況に当てはまるとは思えません-私のフィットネステストでは、シェケルのFoxholes関数のグローバル最小値を見つけています(http://extreme.adorio -research.org/download/mvf/html/node51.html)、私の母集団のサイズは10から1000の範囲です。シェケルの狐穴の1000回の実行を並列化すると、節約された時間は並列化のオーバーヘッドを大幅に上回ると予想されます。
だから私の質問は:なぜ並列化がアルゴリズムを(そしてそれほど大幅に)遅くしたのでしょうか?
ちなみに、私はJavaでコーディングしており、続行する前にすべてのスレッド(フィットネステスト)の実行を待機するCountDownLatchを使用して並列化しています。