マシンごとに数百または数千のコア/CPU (または GPGPU でさえ) をサポートする個々のマシンを作成できるのに、大規模な並列処理用の分散システムを作成するすべてのトラブルを経験する必要があるのはなぜでしょうか?
では基本的に、多数のコアをサポートする 1 台のマシンではるかに低コストで確実に実行できるのに、マシンのネットワーク上で並列処理を行う必要があるのはなぜでしょうか?
マシンごとに数百または数千のコア/CPU (または GPGPU でさえ) をサポートする個々のマシンを作成できるのに、大規模な並列処理用の分散システムを作成するすべてのトラブルを経験する必要があるのはなぜでしょうか?
では基本的に、多数のコアをサポートする 1 台のマシンではるかに低コストで確実に実行できるのに、マシンのネットワーク上で並列処理を行う必要があるのはなぜでしょうか?
単純に安いと思います。それらのマシンは現在利用可能であり、何か新しいものを発明する必要はありません.
次の問題は、マザーボードの複雑さです。1 MB に 10 個の CPU があると想像してみてください。そして、これらの CPU の 1 つが停止すると、マシン全体が破壊される可能性があります..
もちろん、GPGPU 用のプログラムを作成することもできますが、CPU 用にプログラムを作成するほど簡単ではありません。多くの制限があります。コアあたりのキャッシュが非常に小さい、コア間で通信できない (または通信できますが、非常にコストがかかる) などです。
多くのコンピューターをリンクすると、使用履歴が長いため、より安定し、スケーラブルになり、安価になります。
ペトルが言ったこと。個々のマシンにコアを追加すると、通信のオーバーヘッドが増加します。メモリがコア間で共有されている場合、共有メモリのロックアーキテクチャとキャッシングにより、ますます大きなオーバーヘッドが発生します。
共有メモリがない場合は、同じボックス内にある場合でも、事実上、異なるマシンで作業していることになります。
したがって、通常は、共有メモリを使用せずに非常に大規模なアプリを開発することをお勧めします。また、通常は可能ですが、通信のオーバーヘッドは依然として大きいことがよくあります。
これが事実であることを考えると、高度にマルチコアの個々のマシンを構築するための用途はほとんどありません-いくつかは存在しますが、例えばnvidia tesla ...