質問

私は何人かの友人と協力してMATLAB遺伝的アルゴリズムをC ++に変換してきましたが、現在は連続して動作しています。 Matlabは、現在のコードの一部ではなくなりました。

クラスターで使用したいと考えていますが、リソースで少し乾燥しています。大学にはクラスターがあり、RocksとOpenMPIが装備されていますが、どこで作業を始めるかは本当にわかりません。

現在、データを使用して2Dおよび3Dアレイがセットアップされており、システムがクロスオーバーを実行している場合、またはモデル間で交換している場合、2Dアレイと3Dアレイの部分を交換します。これらの構造を複数のノードで分離する良い方法は何ですか?

役に立ちましたか?

解決

マトリックス計算を行っている場合、計算を分割する良い方法さえあるかどうかは、計算自体に大きく依存しています。

ゴラブとバンのローン帳「マトリックス計算、第3版」を強くお勧めします。その中には、並列計算に専念する章全体があります(ch。6)。

OpenMPIは、この問題に使用する素晴らしいミドルウェアです。 C ++でこれを行っているので、Zeromqも見ることができます。 2つは異なるセマンティクスを持っています。1つは他のセマンティクスよりも問題のある空間やスキルセットを好むかもしれません。

また、並列マトリックス計算(通常は信号処理がありますが、他にも多くのアプリケーションがあります)が非常に活発な研究分野であることを知っておく必要があります。

他のヒント

フィットネスの計算:

通常、そのフィットネスを計算するために1人の個人について知る必要があるため、各コアに個人をドリングすることで、人口を介して作業することができます。個人のフィットネスが計算されたとき、新しい個人をコアする手を握ります。

クロスオーバー:

この問題に適している可能性があります。各CPUコアによって処理されるブロックに配列を分割し、おそらくグローバルクロスオーバーステップ(ペアのサブセットを交尾させる)を追加して、多次元空間を適切に移動できるようにすることを確認してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top