7

これは簡単な質問だと思うかもしれませんが、私には解決策が見つかりません。次のループを実行します。

A = zeros(1,10000000);
parfor i = 1:length(A)
    A(i) = i;
end

これは私のコンピューターの単一のコアでのみ実行されますが、簡単に並列化できます (または、少なくとも並列化する必要があります)。私はMatlab 2012bを使用しており、並列ループを作成する方法に関するドキュメントを探してみましたが、見つかりません(matlabのドキュメントは、これらのループを実際に実行する方法ではなく、これらのループを作成する方法の例を示しているだけです)。

並列計算ツールボックスの設定を変更する方法を調べてみましたが、すべてMatlab 2013用であるため(私は2012bを使用しています)、どれも機能しません。誰かが実際に並列に実行される簡単な並列化可能なループの例を提供できれば、私は非常に感謝しています!

注: 並列計算ツールボックスがインストールされていることを確認しましたが、有効になっているかどうか、または有効にする方法がわかりません。preferencesコマンドプロンプトに入れましたが、そこには表示されませんでした)。

編集:これを行うことで機能しました:

matlabpool('open',4);
A = zeros(1,10000000);
parfor i = 1:length(A)
    A(i) = i;
end
matlabpool('close');

...しかし、なぜこれが機能するのか、毎回プールを閉じているのか、プールが実際に何であるか(ドキュメントを読んだmatlabpoolまだ理解していない)、およびparpool.. .

4

3 に答える 3

1

matlabpoolからへの変更以降、parpoolプールを作成するさらに簡単な方法があります。とは異なりparpool、プールが既に存在する場合はエラーになりません。呼び出すだけgcpです(「現在のプールを取得」の略です)。

gcp();
A = zeros(1,10000000);
parfor i = 1:length(A)
    A(i) = i;
end

プールは常に開いたままにしておくことをお勧めします。これにより、必要なときに開いていることが保証されます。

于 2014-10-03T19:28:15.847 に答える
1

プールを閉じる必要はありません。場合によっては、後で再利用するために開いたままにしておくこともできます (開くのにも時間がかかるため)。新しい matlabpool を開く必要があるかどうかを判断するには、ゼロ プール サイズのテストが役立ちます。

A = zeros(1,10000000);
if matlabpool('size') == 0 
   matlabpool('open',4) ;
end
parfor i = 1:length(A)
    A(i) = i;
end
于 2013-10-02T21:06:49.207 に答える