PARFOR 内で SIM コマンドが動作しないのはなぜですか?
4 ビュー (過去 30 日間)
古いコメントを表示
MathWorks Support Team
2013 年 2 月 1 日
編集済み: MathWorks Support Team
2017 年 7 月 21 日
Parallel Computing Toolbox または MATLAB Distributed Computing Server を使用して以下のプログラムを実行するとエラーとなります。
プログラム:
parfor (i=1:4)
sim('vdp');
end
エラーメッセージ: ERROR: ??? Error using ==> parallel_function>make_general_channel/channel_general at 844 Error using ==> sim Transparency violation error. See Parallel for Loops in MATLAB, "Transparency". Error in ==> parallel_function>distributed_execution at 741 [tags, out] = P.getCompleteIntervals(chunkSize); Error in ==> parallel_function at 553 R = distributed_execution(...
採用された回答
MathWorks Support Team
2017 年 7 月 21 日
編集済み: MathWorks Support Team
2017 年 7 月 21 日
PARFOR の中で sim 関数を使用するためには、sim 関数の透過性に注意する必要があります。
透過性とは、処理の分配先であるワーカーにおいて参照する変数名やパス情報のことです。もし、プログラムがワークスペース上の変数にアクセスするのであれば、このプログラムは透過性がありません。
>> sim('vdp')
はワークスペース上の変数上に値を記録するため、透過性はありません。
透過性を確保するために、以下のように sim 関数をローカルの関数内で使用する方法があります。
% sim 関数を別のローカル関数内で定義
function x = parallel_sim(mdl)
[t,x,u] = sim(mdl)
end
メインのコードでは、以下のように parallel_sim を呼び出します。
parfor (i=1:4)
x{i} = parallel_sim('vdp');
end
0 件のコメント
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で 並列 for ループ (parfor) についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!