0

複数のコンピューターでゲームを実行するのと同じように、ソース コードを追加せずに実行可能プログラムを実行できるかどうか疑問に思っていました。私がC#でプログラミングしていたとき、アプリケーションやプロセスを呼び出したり閉じたりできるプロセスメソッドに気付きました.c++に似たようなものがあり、実行可能ファイルやゲームのプロセスを他のコンピューターに転送したり、コンピューターのプロセッサ消費を最小限に抑えます。

ありがとう。

4

4 に答える 4

1

すべてが可能ですが、これには膨大な量の作業が必要であり、ほぼ確実にプログラムが非常に遅くなります (ここでは数百万または数十億の要因について話しています)。基本的に、プログラムで使用されるすべてのレイヤーでこれが許可されていることを確認する必要があります。そのため、これを行うには OS を書き直す必要がありますが、OS が使用するかなりの数のライブラリも書き直す必要があります。

なんで?実際のスレッドを異なるマシンに分散させたいと仮定しましょう。実際のプロセスであればもう少し簡単ですが、多くのアプリケーションがこのように機能することに驚きます

まず、メモリ、より具体的にはすべての非スレッド ローカル ストレージを同期する必要があります。これは多くの場合、「すべてのメモリ」を意味します。これは、すべての言語がスレッド対応のメモリ モデルを持っているわけではないためです。もちろん、これは最適化できます。たとえば、システムにそのような概念がある場合は、「アトミック」読み取りまたは書き込みが発生するまですべてをバッファリングします。スレッドをロック/ロック解除する必要があるとき、またはアトミック変数を読み書きする必要があるときはいつでも、すべてのスレッドが同期のために数秒間ブロックすることを想像できますか?

その隣には、デバイスの管理に関連する問題があります。ネットワーク接続が必要であると仮定します。これを開始するデバイス、IP の選択方法、...? これをシームレスに解決するには、おそらくすべてのプラットフォーム間で共有される仮想デバイスが必要です。これは、ネットワーク デバイス、ファイル システム、プリンター、モニターなどで発生する必要があります。そして、親切にもゲームについて言及しているように、これは GPU でも発生するはずです。GPU との間でデータを送受信する場合にのみ、これがパフォーマンスにどのような影響を与えるか想像してみてください (ヒント: 16xpci-e でさえ、多くの場合、すでにボトルネックになっています)。

結論として、これは現実的ではありません。クラスター化されたアプリケーションが必要な場合は、最初からアプリケーションに組み込む必要があります。

于 2012-07-19T15:10:20.730 に答える
0

あなたができる最も近いことはMapReduceだと思います: これはパラダイムであり、まもなく公式のブースト ライブラリの一部になることを願っています。ただし、ゲームのようなリアルタイム アプリケーションには適用したくないと思います。

関連する質問でさらに回答が得られる場合があります: https://stackoverflow.com/questions/2168558/is-there-anything-like-hadoop-in-c

しかし、KillianDS が指摘したように、これを自動的に行う方法はなく、実行可能な方法があるようにも見えません。それで、あなたが解決しようとしている正確な問題は何ですか?

于 2012-07-19T15:20:19.617 に答える
0

研究の現在の状態は、プロセスの作業を単一のコンピューターの複数の CPU コアに分散する実用的な手段です。その場合、これらのプロセッサは引き続き RAM を共有します。これは不可欠です。RAM レイテンシはナノ秒単位で測定されます。

分散コンピューティングでは、リモート メモリ アクセスに数百マイクロ秒ではないにしても、数十マイクロ秒かかることがあります。分散アルゴリズムは、これを明示的に考慮します。どんなに魔法を使ってもこれを消すことはできません: 光自体は遅いです。

于 2012-07-19T16:24:29.413 に答える
0

AT&T Bell LabsのPlan 9 OSは、最もシームレスで透過的な方法で分散コンピューティングをサポートします。Plan 9 は、ジョブを相互運用可能な小さなタスクに分割し、高度に専門化されたユーティリティによって実行されるという Unix のアイデアと、「すべてがファイル」であり、クライアント/サーバー モデルをまったく新しいレベルに引き上げるように設計されました。それほど強力ではないネットワーク化されたクライアントの計算を実行する CPU サーバーのアイデアがあります。残念ながら、このアイデアは野心的すぎて時代を超えていたため、Plan 9 は大部分が研究プロジェクトのままでした。ただし、まだオープンソースソフトウェアとして開発されています。

MOSIX は、複数のマシンに 1 つのプロセス空間を提供し、透過的なプロセス移行をサポートする別の分散 OS プロジェクトです。すべてのコンテキストの保存と復元は OS カーネルによって行われるため、ソース コードを変更することなくプロセスを移行可能にすることができます。MOSIX モデルには、MOSIX2、openMosix (2008 年以降廃止)、LinuxPMI (openMosix プロジェクトの継続) など、いくつかの実装があります。

ScaleMP は、もう 1 つの商用シングル システム イメージ (SSI) 実装であり、主にデータ処理とハイパフォーマンス コンピューティングを対象としています。クラスタのノード間の透過的な移行を提供するだけでなく、エミュレートされた共有メモリ (分散共有メモリと呼ばれる) も提供します。基本的に、非常に高速なネットワークを介して接続された多数のコンピューターを、多数の CPU と大量のメモリを備えた単一の大きな NUMA マシンに変換します。

これらのいずれも、PC でゲームを起動し、ネットワーク上のどこかに透過的に移行して実行することはできません。さらに、ほとんどのゲームは GPU を集中的に使用し、CPU をそれほど集中的に使用しません。ほとんどのゲームは、マルチコア CPU の計算能力をフルに活用することすらできていません。ここに ScaleMP クラスタがありますが、Quake がうまく動作しません...

于 2012-07-20T09:12:02.750 に答える