web-dev-qa-db-ja.com

コマンドをリモートで実行しますが、それでもホストを制御できます

Linuxマシンを何台か置いていて、クラスターコンピューターネットワークを作りたかったのです。コントローラー用のモニターが1台あります。コントローラは、タスクを実行し、コンピュータへの負荷を分割するスクリプトを実行します。

すべてコントローラーに接続されている4台のコンピューターがあるとします。 GCCを使用してプログラムをコンパイルしたかったのですが、作業を3つの方法に分割したかったのです。どうすればいいですか?

どんな助けでもいただければ幸いです。

5
C. McEvoy

Beowulf Cluster を作成してみてください。 1つのホストをマスターとして設定し、残りをノードとして設定します。 Beowulf Clusterのウィキペディアエントリ が言うように、これは過去にNASAを含む他の人によって行われてきました。

独自のクラスターコンピューターファームを構築すると、コンピューティングリソースで得られるよりも電力コストが高くなる可能性があります。

私はこれを自分で試したことはありませんが、いつも試してみたいと思っていました。

0
StandardEyre

distccは、複数のマシンでコードをコンパイルするために使用できます。

Debian distccパッケージ情報から:

パッケージ:distcc

説明-en:単純な分散コンパイラクライアントおよびサーバー

distccは、CまたはC++コードのコンパイルをネットワーク上の複数のマシンに分散するプログラムです。 distccは、常にローカルコンパイルと同じ結果を生成する必要があり、インストールと使用が簡単で、多くの場合、ローカルコンパイルよりも大幅に高速です。 distccでは、すべてのマシンでファイルシステムを共有したり、クロックを同期したり、同じライブラリやヘッダーファイルをインストールしたりする必要はありません。

ホームページ: http://distcc.org/

他のタスクの場合、「タスクを実行してコンピューターへの負荷を分割する」のは、スクリプトよりもはるかに複雑です。スケジューラーを使用する必要があります(例: slurm または torque -両方ともdebianおよび他のほとんどのディストリビューション用にパッケージ化されています。私の好みはslurmです)。

つまり、Linuxマシンのコレクションをクラスターに変えます。これは特に難しいことではありませんが、かなりの量の作業であり、かなりの量の読書と理解が必要です(そして、あなたが読んだものの多くは、大学や研究所の大規模なHPCクラスターに関連していますが、実際には関連していません小さなホームクラスター)。

クラスタ内の複数のマシンにワークロードを同時に分散するプログラムを実行できるようにする場合は、次のことを行う必要があることに注意してください。

  1. 並行して実行するのに適したジョブを実行している(たとえば、作業を小さなチャンクに分割して個別に処理し、結果を後で組み合わせることができます)

  2. 必要なリソース(ファイルの読み取りと書き込みを行うNFSサーバーなど)への共有アクセス権がある

そしてどちらか:

  1. クラスタ内の他のノードで実行されている他のインスタンスと通信するために特別に作成する必要があります(たとえば、 [〜#〜] mpi [〜#〜] ライブラリ( Open MPI)など)を使用するなど

OR

  1. 通信と制御を行うマスター制御プロセスがあります。これはdistccが行うことです。
2
cas