この質問は、共有メモリと分散コンピューティングが正反対であることを前提としています。それは、「RAM と LAN は正反対ですか?」と尋ねるようなものです。CPU/メモリ ノード内の共有メモリの同時実行と、CPU/メモリ ノード間の共有メモリの同時実行を区別する方が明確です。
これは、並列処理研究の全体像の一部です。以下を含む多くの研究プロジェクトがありました。
最初のケースは、ハイ パフォーマンス コンピューティングの友愛に特化しています。私たちのほとんどによく知られているのは後者のケースです。この場合、通常、最近の通信は単にイーサネット経由ですが、特定のニッチ向けにさまざまな高速で低遅延の代替手段が (成功して) 開発されています (たとえば、Transputer シリアル リンクから出現したIEEE1355 SpaceWire )。
何年もの間、効率的な並列処理はメモリが共有されている場合にのみ可能であるという見方が支配的でした。これは、メッセージを渡すことによる通信のコストが (素朴に) 法外に高いと想定されていたためです。共有メモリの同時実行では、問題はソフトウェアにあります。すべてが相互に依存しているため、システムが大きくなるにつれて、同時実行の設計は組み合わせ的にますます難しくなります。筋金入りの専門知識が必要です。
それ以外の私たちにとって、Go は、Erlang、Limbo、そしてもちろん Occam に続き、行われる作業を振り分ける手段としてメッセージの受け渡しを推進しています。これは、任意のサイズの並列システムを作成するための基礎を提供する、Communicating Sequential Processesの代数から生じます。CSP 設計は構成可能です。各サブシステム自体が、理論上の制限なしに、より大きなシステムのコンポーネントになることができます。
あなたの質問は、一緒に使用できる OpenMP (共有メモリ) と MPI (分散メモリ メッセージ パッシング) に言及していました。Go は、メッセージ パッシングを促進するという点で、MPI とほぼ同等であると見なすことができます。ただし、ロックと共有メモリも許可されます。Go は、マルチプロセッサ システムに明示的に関与していないため、MPI や OpenMP とは異なります。Go を使用して並列処理の世界に進むには、誰かが Go API に取り組んでいるOpenCLなどのネットワーク メッセージ パッシング フレームワークが必要です。