1

ギャップ統計アルゴリズムを使用して、データセットの正しい ks 数を計算する関数を作成しました。このアルゴリズムでは、たとえば 100 個の異なるデータセット (「テスト データ (セット)」または「参照データ (セット)」と呼ばれる) の分散 (つまり、すべてのポイントとその重心との間の距離の合計) を計算する必要があります。 )。これらの操作は独立しているため、すべてのコアで並列処理を行いたいと考えています。私は Mathworks の Parallel Toolbox を持っていますが、その使い方がわかりません (問題 1; 過去のスレッドを使用してこれを理解できると思います)。ただし、私の本当の問題は別の問題です。このツールボックスでは、12 個のコアしか使用できないようです (問題 2)。私のマシンには 64 個のコアがあり、それらすべてを使用する必要があります。12 以上のコア間でプロセスを並列化する方法を知っていますか?

参考までに、これは並行して実行する必要があるコードの一部です。

%This cycle is repeated n_tests times where n_tests is equal
%to the number of reference datasets we want to use
for id_test = 2:n_tests+1

test_data = generate_test_data(data);

%% Calculate the dispersion(s) for the generated dataset(s)

dispersions(id_test, 1:1:max_k) = zeros;

%We calculate the dispersion for the id_test reference dataset
for id_k = 1:1:max_k
    dispersions(id_test, id_k) = calculate_dispersion(test_data, id_k);
end
end
4

4 に答える 4

5

R2014a では、ローカル ワーカー数の制限が削除されたことに注意してください。リリース ノートを参照してください。

于 2014-03-07T10:49:04.970 に答える
3

Parallel Computing Toolbox で使用できるローカル ワーカーの数は、ライセンスによって異なります。導入時の制限は 4 でした。これは R2009a で 8 に変更されました。R2011b では 12 に。

16 個のワーカーを使用する場合は、16 ノードの MDCS ライセンスが必要になります。また、それらを管理するために何らかのスケジューラーをセットアップする必要があります。これを行う方法に関する詳細な手順は、http: //www.mathworks.de/support/product/DM/installation/ver_current/にあります。それが完了したら、はい、「matlabpool open 16」を実行できるようになります。

編集: Matlab バージョン R2014a 以降、Parallel Computing Toolbox のローカル ワーカーの数に制限がなくなりました。つまり、Matlab の最新バージョンを使用している場合、OP で説明されている問題は発生しません。

于 2013-06-09T16:21:48.070 に答える
0

matlab がその並列ツールボックスにこの制限を作成するという事実は、多くの場合、それを使用するためのお金と労力に見合わないものにします。解決方法の 1 つは、matlab コンパイラと、vmware または仮想ボックスのいずれかを使用する仮想マシンを組み合わせて使用​​することです。

  1. テストの実行に必要なコードをコンパイルします。
  2. VM テンプレートの MCR (matlab コンパイラ ランタイム) を使用してコンパイル済みコードを読み込みます。
  3. VM テンプレートの複数のコピーを作成し、各テンプレートが一部のデータセットに必要な計算を実行できるようにします。
  4. すべての結果のデータを収集する

この方法は時間がかかり、コードを移植するよりも多くの時間を節約でき、コードがすでに高度に最適化されている場合にのみ価値があります。

于 2013-06-10T07:26:12.243 に答える
0

32 コアのマシンと 6 つのデータセットで同じ問題が発生しました。私はシェル スクリプトを作成することでこれを克服しました。シェル スクリプトは、データ セットごとに 1 つずつ、matlab を 6 回起動しました。計算が依存していなかったので、これを行うことができました。私が理解していることから、同様のアプローチを使用できます。約 6 つのインスタンスを開始し、それぞれが約 16 のデータセットをカウントします。使用している RAM の量と、各インスタンスが消費する量によって異なります。

于 2014-02-07T16:11:45.040 に答える