2009-06-27 9 views
3

私は、データ配布モデルの並列アルゴリズムを設計する際に、ベストプラクティスが何かを理解しようとしています。ブロック分布に対する賛否両論とメモリ上のデータの循環分布との関係どんな助けもありがとう。並列アルゴリズム設計

答えて

1

Quinnの「MPIとOpenMPを使用したCでの並列プログラミング」では、パラレルプログラミングでデータを配布するさまざまな方法の例が多数提供されています。ニーズに応じて、どのアプローチが最も便利かを把握するのに役立つ意思決定ツリーもあります。

1

共有メモリのブロック分散は、アルゴリズムの実行中にほとんど(または、まったく)同期を必要としないチャンクに分割するアルゴリズムに最適です。

並列アルゴリズム設計では、プロセス間の同期のボトルネックを最小限に抑えることに焦点を合わせる必要があります。一例は、グリッドがストリップ(プロセッサごとに1つ)に分割され、同期が実行されない、2-Dグリッド上のGauss-Seidel緩和法である。各プロセッサは独立した収束値を計算し、その数値に達すると終了します。

また、参照のデータローカリティも考慮する必要があります。これは、並列および順次アルゴリズムに顕著な影響を与えることができます。

+0

"共有メモリのブロック分散は、アルゴリズムの実行中にほとんど(または、まったく)同期を必要としないチャンクに分割するアルゴリズムに最適です。 - このステートメントは必要ではありませんが、私は独立したタスクのセットを与える巡回分解を見つけることができますが、ブロックではそれを行うことができません。 –

+0

@Artem Barger:あなたは正しいです。私は根底にあるトポロジー、すなわちグリッド、トーラスなどについて言及しておきました。 –

+0

ガウス・ザイデルは病理学的に悪い並列アルゴリズムです。あなたが示唆しているのは、各ストリップ内のガウス・ザイデルを使ったライン・ヤコビです。これは非常にゆっくりと収束するアルゴリズムです(すでにガウス・ザイデルは恐ろしいですが)。 – Jed