分散コンピューティング
一般に参加者を募っている分散コンピューティングプロジェクトが多くあり、既に目的とした問題解決などの成果を出したプロジェクトもある。多くのプロジェクトでは
計算する元データの分配、収集を行うサーバを用意
実際に計算を行う複数のコンピュータ用のクライアントソフトを配布
集計結果を Web などで公開
などの手法を用いて、分散コンピューティングを実現、参加者の募集等をおこなっている。これらのプロジェクトでは、一般ユーザの参加により、コストの削減も目指している。これらのプロジェクト特有の課題として、クライアントなどを改ざんして、意図的に誤った計算結果をサーバに送る危険性が挙げられるため、通信方式を非公開にする、同じ計算を複数のクライアントに行わせる、などの対策が行われている。
通常これらのプロジェクトでは個人の所有するPCによる計算結果を集計し、プロジェクトを進行している。その為、参加者数がプロジェクトの進行速度に大きく影響する。集計ではプロジェクトの進行状況とともに、参加者個人あるいは参加者がまとまったチームでの集計結果を表示するなどしているプロジェクトが多い。これが参加者同士の交流につながったり、参加者の競争意識を煽り、参加者の増加につながっているプロジェクトも存在する。
計画に不備があると、分散システムは全体の計算の信頼性が低下し、ノードのダウンによって他のノードも動作不能に陥る可能性がある。レスリー・ランポートは、「分散システムは、そんな障害があるとは思ってもみなかった障害によって利用不能になるシステムである」と述べている。
分散システムにおけるトラブルシューティングや診断はますます困難になりつつある。問題の原因を突き止めようとすれば、遠隔ノードへの接続が必要であり、ノード間の通信内容を調べる必要がある。
分散環境に適さない計算の種類も多い。特に通信量が多くなるものや同期が必要なものは適さない。必要な帯域幅があまりに大きくレイテンシが少ないほどよいという場合は、分散コンピューティングは不適切であり、分散でない環境の方が性能がよいと予想される。
分散プログラミングは、一般に以下の基本アーキテクチャのいずれかに分類される。
単一のアドレス空間を共有しているかのように仮想化するアーキテクチャを指す。データは必要に応じて透過的にレプリケートされる。時間的/空間的結合度が弱められる。
分散コンピューティング・アーキテクチャの別の観点として、並行プロセス間の通信と作業配布の方法がある。プロセスは各種メッセージパッシングプロトコルを使って互いに直接通信でき、一般にマスタースレーブ型の関係にある。それとは別にデータベースを中心とするアーキテクチャもあり、直接のプロセス間通信をせず、データベースを共有することで分散処理を実現する。
稼働中(アルファベット順) BOINC - 分散コンピューティングの管理ソフト。さまざまなプロジェクトがこのソフトを利用して分散コンピューティングを行っている。 distributed.net - 全探索による暗号解読によるプライバシー保護の訴え、全探索による数学的難問の証明など。 DreamLab - スマートフォン向けのアプリケーション。新型コロナウイルスへの有効物質の探索などを行う。 Einstein@Home - 一般相対性理論から予言される重力波を、観測データから検出する事を目指す。 Electric Sheep - フラクタルの動画を生成するフラクタルアート関連のプロジェクト。 Folding@home - 分子動力学法によるタンパク質の折り畳みの予測(タンパク質構造予測)。 GIMPS - メルセンヌ素数の発見。
インテルのCPUは、Pentium 4の世代の後期にハイパースレッディング・テクノロジーと呼ばれる技術を採用した。これは、複数のスレッドを同じCPU上で同時に実行できる技術である。その後、マルチコア技術で複数のCPUコアを1つのパッケージにするようになり、サン・マイクロシステムズは UltraSPARC T1 で、AMDは Athlon 64 X2/FX/Opteron で、インテルは Pentium D/Core/Core 2/Xeonで実装している。これにより、複数のスレッドを同時実行できるようになり、同時実行可能スレッド数は増えていく傾向にある。
一般に、高度に集積されたマシン群で同じプロセスを並行して実行し、タスクを分割して個々のプロセッサに実行させる。計算結果は後に集約される。