あなたは心の中でアルゴリズムの抽象的な形を持っている場合はロブ・パイクが
を意味し何を、あなたは、あなたがメッセージパッシングや共有メモリまたは多分ハイブリッドでそれを実装するかどうか選択する必要があります。また、メモリアクセスの種類(NUMA、UMAなど)と使用されるトポロジ(Hypercube、Torus、Ring、Mesh、Treeなど)も考慮する必要があります。
これは、何か、多分単純なものであっても、パラレルなやり方で(例えば並列に)行われます。
トポロジを変更すると(特にそのメリットがあります)、多くの作業があります。
あなたは並列コード(単純か複雑か)を書いて、VMまたはコンパイラが最良の方法であると思われるものを選択します。でも順番に実行します!
重要EDIT(例では、.NETのためのタスク並列ライブラリになります):
私はシステムで実行する独立したプログラム間でプログラム/アルゴリズムでは、並行性について話しておりませんことを言及すべきです。
あなたはうまく並行処理が小さなコンポーネントに複雑な問題の分解であることが理解だ
と言いました。あなたは正しく小さな部分に何かを分割することができない場合は、同時実行
を使用してそれを解決するのは難しいが、それは、これらの小さな部品が完了するまでに順次に互いに依存し、その場合でもありB/C 間違っています小さなコンポーネントに分割すると、並行性/並列性を実現するわけではありません。並列・分散アルゴリズムのすべての私のクラスで
(両方BSとMSで)私たちは、「我々が得られ、今のは、並列処理を取得する方法を見てみましょう同時性」について話したことはありません。あなたが記述とアルゴリズムに並行性という言葉を使用すると、あなたは並列性を暗示し、逆も同様です。
文献では、分散と並列の間に細い線があります。
アルゴリズムの観点から、並行性、並列性、および分散性を使用することができ、同じアイデアを得ることができます。
実装の観点からは、「並列処理」と言えば、通常、ローカルコンピュータまたはクラスタ(共有メモリ通信)上で動作するプログラムを意図し、グリッド上でプログラムを実行すると「分散」しますメッセージパッシング通信)。
分散型と並列化は、並行処理を意味します。
文章でも(実際にこの分野に貢献した人物については言いますが、言語の作成だけではなく)、これらの用語の正確な意味については、もっと懐疑的であるべきだと思います。抽象的な概念。
アルゴリズム上の並行処理(プログラムともいう)とは、他のコードとは独立して実行できるコードを持つことを意味します(Amdahlの法則が、これの)。
アルゴリズム/プログラムに並行性がある場合は、並列性もあります。
私は、その背後にあるアイデアをよりよく理解するために、いくつかの並列AND分散アルゴリズムを実装する方が良いと思います。 C/C++を知っているなら、分散(メッセージパッシング)の実装にはOpenMPIを、並列(共有メモリ)にはOpenMPを使用できます。
EDIT:
彼はまた、共有メモリ、双方の間のメッセージパッシング、ハイブリッド[それが実装されている方法として、抽象的原則と平行に並列性を意味するかもしれません。メモリアクセスのタイプ(numa、umaなど)]。
出典
2012-07-28 12:52:15
amb
ここでは多少の議論の余地があります。私はProgrammers.SE改造者にこれがうまくいくかどうか尋ねました。ありがとう。 – Kev