
以下の私の投稿は StackOverflow で(かなり不当だと思いますが)閉じられたため、ここに再投稿します。
元の質問: 複数のコンピュータを使用して、より高速な環境を作成するにはどうすればよいでしょうか。 それぞれ 4GB、2GHz のコンピュータが 12 台あります。時間のかかるデータ変換を実行する必要があり、これらのマシンのパワーを組み合わせて使用したいと考えています。これらはすべて Win2003 サーバーを実行しています。
基本的に、アナリストが分析を行えるように変換する必要があるビデオ ファイルが多数あります。プロジェクトについて詳細をお伝えできないため、問題は複雑になっています。
答え1
あなたが尋ねているのは、今日のコンピューティングにおける大きな問題の核心です。個々の処理コアはそれほど高速化しないため、プログラマーは、大きな問題を複数のコンピューターで並列処理できる小さな問題に分割するコードを書き始める必要があります。
簡単に答えると、処理ソフトウェアでジョブを分割して並列実行できる場合は、そのようにしてください。できない場合は、ソフトウェアの作成者に相談して、より並列に動作するように再設計してもらってください。
データを個々のコンピュータに送り、並列タスクを開始し、ジョブが実際に終了したことを確認し、データを戻すという仕組みは、他の投稿者が言及しているクラスタ管理ソフトウェアが行うこととほとんど同じです。はいくつかの重要な問題が関係していますが、一般的にクラスタ管理ソフトウェアはジョブのスケジュールとリソース管理に関するものです。クラスタ管理ソフトウェアは並列作業の実際の実行は処理しません。これは「処理ソフトウェア」が行う必要があります。
複数のコンピュータのグループを 1 台のより高速なマシンのように「動作」させる「魔法」は存在しません。最初から複数のプロセッサを利用できるように構築されたソフトウェアがなければ、この状況から抜け出すことはできません。
答え2
複数のマシンの処理能力を組み合わせるには、コンピューティング クラスターまたはコンピューティング クラスターと呼ばれる、何らかのクラスタリング ソフトウェアを実行する必要があります。これを実行できるアプリケーションの例は次のとおりです。
ただし、これらは複雑なソフトウェアであり、使用可能な高性能クラスターの作成は複雑で、コストがかかる可能性があるため、簡単に実行すべきではありません。また、クラスターで作業を実行するには、特別なソフトウェアも必要になります。単に多数の Windows コンピューターを接続して魔法のようにクラスターを作成し、標準的な一連の Windows アプリケーションをそこにインストールすることはできません。
答え3
コンピュータのクラスターは、次のような場合にうまく機能します...
各コンピューターの前に誰かを座らせて、問題の一部を解かせれば、処理速度は上がりますか? つまり、問題を基本的に独立したチャンクに分割できますか?
問題を「変換するビデオ ファイルが大量にある」と説明していることを考えると、はい、これはクラスター上で機能します。
Microsoft には、私が全く知らないクラスタリング ソフトウェアがあります。それがよい方法かもしれません。
おそらくもっと簡単なのは:
1 台のコンピューターをマスターとして専用にします。残りはすべてクライアントです。
このマスター上のすべてのビデオ ファイルをフォルダーに配置します。
クライアントごとに共有フォルダーを作成し、各クライアントにその共有フォルダーをマウントさせます。
クライアントは、定期的に起動する Windows スクリプト言語 (Perl で動作します) を実行し、共有フォルダーに何かがある場合は、名前を work_yourfilenamehere に変更して変換を実行します。変換が完了すると、名前を done_yourfilenamehere に変更します。変換が実行されない場合は、60 秒ほど待機します。
マスター コンピューターは、各共有フォルダーを調べるスクリプトを実行します。フォルダーに何もない場合は、変換するファイルを 1 つ配置します。done_yourfilenamehere という名前のファイルがある場合は、それを done フォルダーに移動します。マスター フォルダーに何も残らなくなるまでループします。
基本的に、すべてのクライアントを可能な限りビジー状態にして、各クライアントが各ファイルを変換するために必要な時間をかける必要があります。
答え4
あなたの質問に対する答えは大部分はこれらのビデオ ファイルを「変換」するために使用しているソフトウェアと、それが何を伴うかによって異なります。
Adobe After Effectsには「ネットワークレンダリング」と呼ばれる一種のクラスタリングモードがありますが、これは理想的なソリューションではありません。(私が最後に調べたところ、ビデオをレンダリングしてシーケンスを想像するおそらく、それをビデオに再結合して使用する必要があるでしょう)
その基本的な考え方は、映画をチャンクに分割し、各チャンクで異なる PC を動作させることです。
特定の範囲のフレームのみを処理するオプションを備えたコマンドライン ビデオ エンコード ツールがいくつかあるはずです。これにより、分割を自動化できます。
各チャンクを別の共有フォルダにコピーできます(これも自動化が非常に簡単です)
「ファーム」内の各 PC は、変換するソース ビデオを探すために、これらの共有フォルダーの 1 つを参照します。(変換を実行するソフトウェアに「フォルダーを監視する」機能があると仮定すると非常に簡単ですが、バッチ ファイル/シェル スクリプトをこのために用意することもできます)
ビデオの「変換」の性質、使用しているソフトウェア、または利用可能なスクリプト/プログラミングのレベルがわからないため、これ以上コメントすることは不可能です。