1

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

クラスターで使用することを検討していますが、リソースが少し不足しています。大学にはクラスタがあり、Rocks と OpenMPI が搭載されていますが、どこから作業を開始すればよいかわかりません。

現在、データを含む 2D および 3D 配列のセットアップがあり、システムがモデル間でクロスオーバーまたは交換を行っている場合、2D および 3D 配列の一部を交換しようとします。これらの構造を複数のノードに分割する良い方法は何ですか?

4

2 に答える 2

1

行列計算を行っている場合、計算を分割する良い方法があるかどうかは、計算自体に大きく依存します。

Golub と van Loan の本、"Matrix Computations, 3rd Ed." を強くお勧めします。その中には、並列計算 (第 6 章) に専念する章全体があります。

OpenMPI は、この問題に使用する優れたミドルウェアです。これは C++ で行っているため、zeromq も参照してください。この 2 つはセマンティクスが異なり、一方が他方よりも問題領域またはスキルセットを優先する場合があります。

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

于 2009-04-22T01:26:42.130 に答える
0

フィットネス計算:

通常、フィットネスを計算するには1人の個人について知る必要があるだけなので、各コアに個人を配ることで母集団を処理できます。個人の体力が計算されたら、そのコアを新しい個人に渡します。

クロスオーバー:

分割統治アプローチは、この問題に適している可能性があります。配列を各CPUコアによって処理されるブロックに分割してから、グローバルクロスオーバーステップ(ペアのサブセットを結合する)を追加して、多次元空間を適切に移動できるようにします。

于 2009-04-22T16:45:39.283 に答える