ロブ・パイクの意味
アルゴリズムの抽象的な形式を念頭に置いている場合は、それをメッセージ パッシングまたは共有メモリで実装するか、ハイブリッドで実装するかを選択する必要があります。また、メモリ アクセスのタイプ (NUMA、UMA など) と使用されるトポロジ (ハイパーキューブ、トーラス、リング、メッシュ、ツリーなど) も考慮する必要があります。
これは、並列処理 (例えば、parallel for) で何か (おそらく単純なもの) を実行したいだけの人にとっては、大変な作業のように思えます。
また、特にトポロジを変更する場合 (その利点をすべて利用できるようにするため) は、多くの作業が必要になります。
したがって、並列コード (単純であろうと複雑であろうと) を作成すると、VM またはコンパイラが最善と思われる方法を選択し、順次実行することもできます! (例は、.net のタスク並列ライブラリです)
重要な編集:
システムで実行される独立したプログラム間ではなく、プログラム/アルゴリズムでの並行性について話していることに注意してください。
あなたが言った
並行性とは、複雑な問題をより小さなコンポーネントに分解することであることはよく知られています。何かをより小さな部分に正しく分割できない場合、並行性を使用して解決することは困難です
しかし、これらの小さなコンポーネントが完了するために順番に相互に依存している可能性があるため、小さなコンポーネントに分割したとしても、同時実行性/並列性を実現できるわけではありません。
並列アルゴリズムと分散アルゴリズムのすべてのクラス(BS と MS の両方) で、「取得した同時実行性について話したことはありません。次に、並列処理を取得する方法を見てみましょう」。並行性という言葉を使用してアルゴリズムを説明する場合は、並列性を意味し、その逆も同様です。
文献では、分散型と並列型の間の細い線も見つけることができます。
アルゴリズムの観点からは、並行性、並列性、および分散を使用でき、同じ考えが得られます。
実装の観点から、「並列処理」と言う場合、通常、ローカル コンピューターまたはクラスター上で実行されるプログラム (共有メモリ通信) を意図し、プログラムをグリッド上で実行する場合は「分散」 (メッセージ パッシング通信) を意味します。 .
現在、分散処理と並列処理の両方が並行処理を意味しています。
これらの用語の正確な意味については、もっと懐疑的であるべきだと思います。なぜなら、文献の中でも (言語の作成だけでなく、この分野に実際に貢献した人々についても話しています)、抽象的な概念を表現するために使用されているからです。
アルゴリズムの同時実行性 (プログラムである場合) は、最終的に他のコードの一部を待機する場合でも、他のコードの一部から独立して実行できるコードを持つことを意味します (アムダールの法則を確認して、この意味を正確に確認してください)。
したがって、アルゴリズム/プログラムに並行性があるときはいつでも、並列性もあります。
その背後にある考え方をよりよく理解するには、いくつかの並列 AND 分散アルゴリズムを実装する方がよいと思います。C/C++ を知っている場合は、分散 (メッセージ パッシング) 実装に OpenMPI を使用し、並列 (共有メモリ) 実装に OpenMP を使用できます。
編集:
彼はまた、抽象的な原則としての並行性と、それが実装される方法としての並列性を意味する可能性があります [共有メモリ、メッセージ パッシング、両者のハイブリッド。メモリ アクセスの種類 (numa、uma など)]。