PARFOR 内で SIM コマンドが動作しないのはなぜですか?

조회 수: 4 (최근 30일)
MathWorks Support Team
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
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개)

카테고리

Help CenterFile Exchange에서 並列 for ループ (parfor)에 대해 자세히 알아보기

태그

아직 태그를 입력하지 않았습니다.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!