2

最近、クラスターでコードを実行するためのアクセス権を取得しました。私のコードは完全に並列化可能ですが、その並列性を最大限に活用する方法がわかりません。大きな行列の要素を計算する必要があり、それぞれが他の要素から独立しています。行列の計算を高速化するために、複数のマシン (100 など) で実行するジョブを送信したいと考えています。

今、私は複数のジョブを送信して、それぞれが行列の一部を計算し、それを .mat ファイルに保存するスクリプトを作成しました。最後に、それらをマージしてマトリックス全体を取得します。個々のジョブを送信するために、新しい .m ファイル (run1.m、run.2、...) を作成して変数を設定し、関数を実行してマトリックス内の関連部分を計算しました。したがって、基本的に run1.m は

id=1;compute_dists_matrix

次に、compute_dists_matrix は id を使用して、計算する部分を見つけます。次に、run1.m から run60.m までを作成し、それらをクラスターに qsub するスクリプトを作成しました。

たとえば、いくつかの MATLAB 機能を使用してこれを行うためのより良い方法があるかどうか疑問に思います。これは非常に典型的なタスクのように見えるからです。

4

2 に答える 2

3

はい、機能しますが、理想的ではありません。あなたが言うように、一般的な問題です。Matlab には並列プログラミング ツールキットがあります。

あなたのクラスターにはこれがありますか?もしそうなら、分散配列は一見の価値があります。彼らがそれにアクセスできない場合、あなたがしていることは他の唯一の方法です。run1.m,run2.m を制御スクリプトでラップして自動化できます...

于 2011-04-23T22:47:57.337 に答える
0

IDにコマンドライン引数を使用し、このIDの値の範囲でジョブを送信できると思います。コマンド ライン引数は、IDE を使用せずにコマンド ラインから MATLAB を起動し、実行するスクリプトの名前と引数のリストを指定することで処理できます。ジョブ マネージャーで依存関係を設定し、"reduce" スクリプトを作成して、(ファイルから) 部分的な結果をマージできると思います。プロセス全体は、id とその他の必要な引数を生成し、依存関係のある処理と後処理のジョブを送信する単一のスクリプトから管理できます。

于 2013-03-06T12:34:26.753 に答える