3

MPI を使用して、メトリック TSP 問題を解決しようとしているプログラムを並列処理しています。P 個のプロセッサーと N 個の都市を渡す必要があります。

各スレッドはマスターに作業を依頼し、チャンクを受け取ります。チャンクは、チェックする必要がある順列の範囲であり、その中で最小のものを計算します。事前に悪いルートを剪定することでこれを最適化しています。

合計(N-1)あります!計算するルート。各ワーカーは、チェックする必要がある最初のルートと最後のルートを表す番号を持つチャンクを取得します。さらに、マスターは既知の最新の最良の結果を彼に送信するため、残りの下限を使用して、事前に悪いルートを簡単に作成できます。

ワーカーが global よりも優れた結果を見つけるたびに、ワーカーはそれを他のすべてのワーカーとマスターに非同期で送信します。

より良い解決策を探しているわけではありません。どのチャンクサイズが最適かを判断しようとしているだけです。

これまでに見つけた最適なチャンク サイズは (n!)/(n/2)! です。、しかし、それほど良い結果は得られません。

ここでどのチャンクサイズが最適かを理解するのを手伝ってください。計算量と通信量のバランスをとろうとしています ありがとう

4

1 に答える 1

1

これは、MPI の実装、マシンの総負荷など、制御できない要因に大きく依存します。ただし、ワーカー プロセスの数にも大きく依存すると推測できます。その際、MPI はスレッドではなくプロセスを生成することを理解してください。

最終的には、ほとんどの最適化の質問でよくあることですが、答えは単純に「さまざまな設定をテストして、どれが最適かを確認する」ことです。これを手動で行うか、ある種のヒューリスティック (遺伝的アルゴリズムなど) を実装するテスター アプリを作成することをお勧めします。

于 2011-01-21T22:07:02.930 に答える