Linuxマシンを何台か置いていて、クラスターコンピューターネットワークを作りたかったのです。コントローラー用のモニターが1台あります。コントローラは、タスクを実行し、コンピュータへの負荷を分割するスクリプトを実行します。
すべてコントローラーに接続されている4台のコンピューターがあるとします。 GCCを使用してプログラムをコンパイルしたかったのですが、作業を3つの方法に分割したかったのです。どうすればいいですか?
どんな助けでもいただければ幸いです。
Beowulf Cluster を作成してみてください。 1つのホストをマスターとして設定し、残りをノードとして設定します。 Beowulf Clusterのウィキペディアエントリ が言うように、これは過去にNASAを含む他の人によって行われてきました。
独自のクラスターコンピューターファームを構築すると、コンピューティングリソースで得られるよりも電力コストが高くなる可能性があります。
私はこれを自分で試したことはありませんが、いつも試してみたいと思っていました。
distcc
は、複数のマシンでコードをコンパイルするために使用できます。
Debian distcc
パッケージ情報から:
パッケージ:distcc
説明-en:単純な分散コンパイラクライアントおよびサーバー
distcc
は、C
またはC++
コードのコンパイルをネットワーク上の複数のマシンに分散するプログラムです。distcc
は、常にローカルコンパイルと同じ結果を生成する必要があり、インストールと使用が簡単で、多くの場合、ローカルコンパイルよりも大幅に高速です。distcc
では、すべてのマシンでファイルシステムを共有したり、クロックを同期したり、同じライブラリやヘッダーファイルをインストールしたりする必要はありません。ホームページ: http://distcc.org/
他のタスクの場合、「タスクを実行してコンピューターへの負荷を分割する」のは、スクリプトよりもはるかに複雑です。スケジューラーを使用する必要があります(例: slurm または torque -両方ともdebianおよび他のほとんどのディストリビューション用にパッケージ化されています。私の好みはslurm
です)。
つまり、Linuxマシンのコレクションをクラスターに変えます。これは特に難しいことではありませんが、かなりの量の作業であり、かなりの量の読書と理解が必要です(そして、あなたが読んだものの多くは、大学や研究所の大規模なHPCクラスターに関連していますが、実際には関連していません小さなホームクラスター)。
クラスタ内の複数のマシンにワークロードを同時に分散するプログラムを実行できるようにする場合は、次のことを行う必要があることに注意してください。
並行して実行するのに適したジョブを実行している(たとえば、作業を小さなチャンクに分割して個別に処理し、結果を後で組み合わせることができます)
必要なリソース(ファイルの読み取りと書き込みを行うNFSサーバーなど)への共有アクセス権がある
そしてどちらか:
OR
distcc
が行うことです。