並列計算
しかし、先の例のように実行順番が強く束縛される場合は、あるプロセッサだけが働き、ほかのプロセッサはすることがなくなってしまうといった状態になり、性能が引き出しにくい。そのため,並列計算はそうでない場合と比べて性能を引き出すプログラミングが困難となる。
また、並列化のためのオーバーヘッドが、並列化によって得られる性能向上の恩恵を上回ってしまうこともありえる。例えば複数のプロセスやスレッド上で並列処理しようとする場合、各プロセスやスレッドの起動/終了処理およびデータ分割/統合処理などにかかる時間の合計が、並列化によって短縮された時間の合計を上回ってしまうと、並列化することで逆に処理性能が低下してしまうことになる。そのほか、物理的なプロセッサコアの数を上回るプロセスやスレッドを起動して並列処理をしても、コンテキスト切り替えのオーバーヘッドなどがかさむことで、かえって性能が低下してしまう。
以上のように、並列計算によって高い性能を発揮するためには、ソフトウェア側の並列コンピューティング環境への最適化が重要な鍵となる(詳しくは並列化を参照)。
共有メモリ型の並列コンピュータでは、主記憶上の同じアドレスの内容のコピーが複数のキャッシュメモリ上に存在する可能性があり、その内容が食い違うとプログラムの実行に支障が発生する。そのような問題への対処としてキャッシュコヒーレンシシステムがあり、プロセッサが常に最新の内容を得られるようキャッシュの内容を制御する。よく使われる方式としては、バススヌーピングがある。大型かつ高性能のキャッシュコヒーレンシシステムの設計は、コンピュータアーキテクチャの中でも非常に難しい問題である。そのため、共有メモリ型のシステムは分散メモリ型ほどスケーラブルではない。
プロセッサ同士またはプロセッサとメモリの通信のハードウェア実装方式は様々であり、マルチポート型の共有メモリ、クロスバースイッチ、共有バス、スター型、リング型、ツリー型、ハイパーキューブ型、ファット・ハイパーキューブ型(ハイパーキューブの頂点に複数のノードが接続される形態)、メッシュ型などの様々なネットワーク構成のインターコネクト・ネットワークがある。
インターコネクト・ネットワークを使った並列コンピュータは、直接接続されていないノード間でメッセージパッシングできるように何らかのルーティング機構が必要となる。大規模なマルチプロセッサ機では、プロセッサ間の通信媒体は複数の階層を構成することもある。