問題タブ [parfor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
performance - MATLABparforはforよりも遅い-何が問題なのですか?
私が扱っているコードには、次のようなループがあります。
小さいnt(10)の場合。
タイミングを合わせた後は、通常のループを使用するよりも実際には100倍遅くなります!!! parforが並列合計を実行できることを知っているので、なぜこれが機能しないのかわかりません。
走る
コードを実行する前に、すぐに使用できる構成を使用します。
私はmatlabに比較的慣れておらず、並列機能を使い始めたばかりなので、愚かなことをしていないと思い込まないでください。
ありがとう!
PS:コードをクアッドコアで実行しているので、いくつかの改善が見られると思います。
matlab - MATLAB parforスライスの問題?
一連の画像でハリスの角を見つけるコードのセクションがあります。92枚の画像に対してこれを行う必要がありますが、かなり遅いです。そのため、コードを並行して実行したいと思います。以下のコードには、変数「corners」に関連するエラーがあります
それは言う:
MATLABは、ループの反復をグループに分割し、MATLABワーカーに送信して並列に実行することにより、parfor関数でループを実行します。MATLABが繰り返し可能で信頼性の高い方法でこれを行うには、ループで使用されるすべての変数を分類できる必要があります。コードは、分類と互換性のない方法で示された変数を使用します。推奨処置指定された変数の使用法を修正してください。変数の分類およびparforループの反復に関するその他の制限の詳細については、ParallelComputingToolboxのドキュメントの「変数の分類」を参照してください。
これを修正する方法はありますか?
ありがとう!
multithreading - parfor で複数の関数を実行する
function1.m
現在、 、function2.m
、function3.m
、 ...という名前の関数がいくつかありますfunction10.m
。各機能は互いに独立しています。すべての機能を 1 回の実行で実行したい
現在、私のコードはこのようなもので、関数を1つずつ実行しています。
では機能しないことがわかっているので、parfor
の代わりに でコードを書き直す方法があることを知りたいです。for
eval
parfor
matlab - Matlab PARFOR ループをプログラムでオン/オフに切り替えることはできますか?
MATLAB の parfor について簡単な質問があります。プログラムにフラグを設定して、parfor ループと通常の for ループを切り替えたいと考えています。基本的に、この機能が必要なのは、コードの一部が「デバッグ」モードでグラフィックスを更新できるようにするためです。その後、フラグがオフになっている場合は、速度のためにグラフィックスの更新なしで parfor を使用します。
だから、私はこの機能を持つシンプルなものを探しています:
どんな助けでも大歓迎です!ありがとう!
matlab - グローバルとパーフォー
ループ内で、aparfor
にアクセスする関数を呼び出そうとしていますglobal
。
関数
ループ:
エラー:
私は何が間違っているのですか?
matlab - 印刷しない理由
parfor ループを含む小さなスクリプトを実行しています。スクリプトは次の行で始まります。
どうやら私はすぐに印刷物を見るべきです。によって開かれた 2 つのワーカーのプールで実行すると、出力がmatlabpool(2)
表示されません。parfor ループを維持したままワーカーを閉じると、ctrl-c を押したときにのみ出力が表示されます。parfor
をレギュラーに変更するとfor
、出力が表示されます。ループが非常に長いため、ループが完了するまで実行されたことはありませんが、出力はスクリプトの 2 行目であり、matlab で認識していないバッファー フラッシュの問題がない限り、すぐに実行されるはずです。何が起こっている??
matlab - プログラムの並列化
複数のファイルからなるプログラム複合体があり.m
ます。プログラムはそのうちの 1 つ (メイン) を呼び出して実行tests.m
し、そこからoptFun.m
別のパラメーターを計算する場所を呼び出します。これらのパラメータはwhile
ループ内で計算され、値が一定回数 (たとえば 4500) 変更されないと終了します。プログラムは正常に動作しますが、200 の異なる値のセットを取得するには、200 回実行する必要があります。さらに、12 コアを超えるコンピューターを使用できるため.m
、ステートメントを含むメイン ファイルを少し変更してparfor
、matlab の 12 ワーカーをデプロイしました。私の目標は、1 回のラウンドで 12 の異なる解 (初期プログラムの実行) を取得することです。
matlab の 12 個のワーカーを実行しましたが、最適または正しい結果に到達する前にプログラムが停止したようです。whileループの4500回の繰り返しに達する前に、私のプログラムのパラメータソリューションが出力されているようです。私は12の異なるソリューションを取得しますが、一部の変数の値を共有する12のワーカーのように見えるため、他のワーカーがソリューションを十分に改善するか、それらのいくつかの合計が正しいソリューションと見なされると停止します。何が起こっているのかを理解するのを手伝ってもらえますか?
よろしくお願いします。
matlab - Matlabのワーカーまたはラボを制御する
Matlabのparforループでは、ワーカーが実行を終了すると、matlabpool close
コマンドがparfor
ループの外にあるため、残りのワーカーがコンピューティングを完了するまでアクティブ(CPU使用率0)のままになります。ワーカーの実行を個別に制御し、終了時にワーカーを動的に解放できますか?
よろしく
multithreading - Matlab - シングルコアでのマルチスレッド
3 つの関数からなる簡単な計算プログラムを作成しています。
最初の f1() は、ある種のデータを生成し、それをバッファー (ベクターまたはキューなど) に格納します。
2 番目の f2() はそのデータを取得し、そのデータに対していくつかの計算を行い、結果を別のバッファーに格納します。
3 番目の関数 f3() は、f2() の結果を視覚化 (プロット、レポートなどを作成) します。
この 3 つの機能は、シングル コア マシンで同時に実行する必要があります。PARFOR ループと matlabpool について知っています。ただし、スレッド (ワーカー) の最大数 = min(8, 'マシン内のコア数') を作成できます。シングルコアマシンのmatlabでいくつかのスレッドを作成する解決策はありますか?
matlab - Matlab での同期
私はparfor
この方法で並列にデータを処理しています:
問題なく動作しますが、問題が 1 つあります。私の関数generate_data
は一意のデータ (つまり、0、1、2、3、4 ...) を生成しますが、実際には、同じ値を 2 回与えることがあります (そして、0、1、1、2、3、4、4、5、 ...)。簡単に言えば、私の関数は次のようになります。
どうすればこれを修正できますか?