問題タブ [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.
multithreading - ユーザー入力に応じて周波数がリアルタイムで変化する連続トーンを MATLAB で作成する
私は現在、入力を受け取り、この入力を使用してポイントを xy 空間にマップする MATLAB のグラフ作成プログラムに取り組んでいます。ただし、プログラムは、ポイントの位置に応じて周波数が変化する連続音も出力する必要があります。
楽音生成はできましたが、プログラムの性質上連続して音を鳴らすことができませんでした。(トーン生成間のコード) ループの 1 回の繰り返しで周波数を変更するコードと、別のループでトーンを生成するコードを含む parfor ループを使用して、これを解決できると考えましたが、次の理由でそれを取得できないようです。エラー:
警告: 一時変数周波数は、parfor ループの各反復の開始時にクリアされます。ループの前に割り当てられた値はすべて失われます。parfor ループで割り当てられる前に周波数が使用されると、実行時エラーが発生します。MATLAB の Parallel for ループ、「一時変数」を参照してください。
in multiThreadingtest at 5 multiThreadingtest の使用エラー (5 行目) クリアされた可変周波数への参照。
原因: クリアされた可変周波数への参照。
そして私のコード:
matlab - MATLAB PARFOR: メモリ管理: 共有メモリかどうか?
Matlab 並列計算ツールボックスの parfor cicle がメモリでどのように機能するかを理解していません。すべてのワーカー間でメモリを共有することを読みました (その後、すべてのワーカー (コア) がローカル コピーを作成せずに目的のメモリ位置にアクセスできると思います)。他の参考文献は、すべてのコアがメモリ(変数など)のローカルコピーを作成することを教えてくれます。答えは何ですか?Parfor には共有メモリ システムがあり、データのコピーを作成していませんか、それともすべてのワーカーがデータのローカル コピーを持っていますか? ありがとう
matlab - arrayfun を使用した matlab parfor (スライスされた変数)
タイトルが示すように、arrayfun を内部で使用する parfor ループが必要です。
問題の最小限の作業例を作成しました:
というファイルに次の行を含めるthisparfortest.m
コマンドのmcc('-e','-v','thisparfortest')
結果は
しかし、アドバイスどおりmlint thisparfortest
(およびcheckcode
)エディターのように問題は返されません。
ループは for ループとして実行およびコンパイルできます。
これらのコマンドの意味を尋ねないでください - それらは mwe のためにここにあるだけです。
これは mathworks に報告する必要があると思いますが、何か間違ったことをしたのでしょうか?
いくつかの追加: 実行時
for
ループのみで動作しますが、示されているバージョンを使用するparfor
と、
それは mlint/checkcode によってキャッチされるべきではありませんか? これは、コンパイラなしで発生します。
multithreading - codegen と parfor を使用する場合、Matlab はいつスレッドを選択しますか?
オンラインでの議論やヘルプがほとんどないという事実から判断すると、私は Matlab コーダー (codegen コマンド) を使用して高速化を実現している数少ない人の 1 人に思えます。場合によっては、それから信じられないほどのスピードアップが得られました。文書化されているのを見たことはありませんが、parfor ループを含む Matlab スクリプトから codegen を使用して MEX ファイルを作成すると、多くの場合、結果の MEX がスレッド化されます。関数内の Parfor は複数のプロセスを生成しますが、これは単にスレッド化するよりも効率が悪いことがよくあります (Linux で top を見て、Matlab 関数で複数の 100% プロセスを見て、変換された MEX を実行すると単一の 1000% プロセスが表示されることから、これらすべてを推測しています)。私は現在、スピードアップを実際に使用できるケースに取り組んでいますが、parfor が基本関数で機能しているにもかかわらず、MEX で複数のスレッドが使用されているという証拠は見当たりません。
matlab - parfor を使用して入れ子になったループを並列化し、対称距離行列を計算する
2 つの構造体オブジェクト間のペアごとの距離を計算しようとしています。この距離は対称です。配列には約 N = 8000 のオブジェクトがあります。
したがって、N * (N+1)/2 の距離のみを計算する必要があります。各計算は独立しているため、この計算をどのように並列化できますか?
ここで、オブジェクトは配列 X に格納されており、サイズ N*(N+1)/2 の配列 A に距離を格納したいと考えています。BDHMM() は、2 つのオブジェクト間の距離を返す関数です。
次のMatlabコードを試しました。
次のエラーが表示されます。
助けてください。
matlab - Matlab remoteParallelFunction と Mex ファイル エラー
デフォルトのローカル matlab 並列構成を検証しようとしていますが、次のエラーが発生します。
検証の詳細
構成: 「ローカル」 タイプ: ローカル
-------------------------------------- ステージ: リソースの検索
ステータス: 合格説明: 検証に合格しました
コマンド ライン出力: (なし)
-------------------------------------- ステージ: 分散ジョブ
ステータス: 合格説明: 検証に合格しました
コマンド ライン出力: (なし)
-------------------------------------- ステージ:パラレルジョブ
ステータス: 合格説明: 検証に合格しました
コマンド ライン出力: (なし)
-------------------------------------- ステージ: マトラプール
ステータス: 失敗説明: matlabpool でコードを実行しようとしたときに問題が発生しました。
コマンド ライン出力: 「ローカル」構成を使用して matlabpool を開始しています ... 8 つのラボに接続されています。
エラー レポート: Error using ==> parallel_function at 598 RemoteParallelFunction のリモート実行エラー: RUNTIME_ERROR
デバッグ ログ: (なし)
実際にコードを実行しようとすると、次のエラーが表示されます。
私はgnome 2.28.2 Linux「サーバー」でmatlab 2010aを実行しています(実際には、400ギガのメモリと集中的な計算に使用される32個のプロセッサを備えたコンピューターです)。私が実行しているコードは、以前にローカル マシンで実行したいくつかの parfor ループです。実際には、vcn を介してサーバー コンピューター上でローカルにプログラムを実行しています。誰でも問題が何であるかを提案できますか?
matlab - スクリプトがクラッシュした後、一部のファイルを削除できません
画像を生成する MATLAB スクリプトを実行し、特定のフォルダーに保存します。コードがクラッシュすると、MATLAB を再起動しない限り、そのフォルダー内のいくつかの画像を削除できません。
MATLAB プログラムを再起動せずにこの問題を解決できますか?
コード:
matlab - 非常に時間のかかるコード
実行時間の改善にご協力いただける場合は、コードのこの部分を投稿します。
私はコードを verctorising し、Matlab コンパイラを使用しようとしましたが、重要な改善はありませんでした。
何百万回も呼び出されるコード (I5 3.5GH および Ram=4GH では、1 回の実行に数時間かかります):
上記のbinCross
関数は、プロファイラーによって最も複雑であると言われています。
前もって感謝します