2016-06-10 3 views
3

오늘 Matlab-Simulink를 사용한 병렬 컴퓨팅에 대해 질문했습니다. 저의 이전 질문은 좀 지저분한 것이고 코드에 실제로 문제에 속하는 많은 것들이 있습니다. 내 Simulink의 시뮬레이션은 시뮬레이션으로 작업 공간에서 필요한 데이터를 통합 할 수있는 "작업 영역에서"블록을 사용하는 반면parfor (병렬 컴퓨팅)를 사용한 Simulink- 시뮬레이션

내 문제는, 내가 parfor 루프에서 뭔가를 시뮬레이션 할

입니다. 어떤 이유로 그것은 작동하지 않습니다.

DataFromWorkspace

DemoData-파일 그냥 제로입니다 다음과 같이

load DemoData 
path = pwd; 

apool = gcp('nocreate'); 
if isempty(apool) 
    apool = parpool('local'); 
end 

parfor k = 1 : 2 
    load_system(strcat(path,'\DemoMDL')) 
    set_param('DemoMDL/Mask', 'DataInput', 'DemoData') 


     SimOut(k) = sim('DemoMDL') 
    end 

delete(apool); 

내 시뮬레이션이 보인다 (100,20)을 다음과 같이

내 코드 보인다 -매트릭스. 이는 데이터의 예입니다. 내가 시뮬레이션 경우

이제 스크립트 다음과 같은 오류 메시지가 occures :

오류

오류 DemoScript를 사용하여 (9 호선)

오류 'DemoMDL/마스크의 평가 매개 변수'인터페이스 DataInput ' '

원인 :

Error using parallel_function>make_general_channel/channel_general (line 907) 
Error evaluating parameter 'DataInput' in 'DemoMDL/Mask' 
    Error using parallel_function>make_general_channel/channel_general (line 907) 

    Undefined function or variable 'DemoData'. 

지금이 일이 왜 생각을해야합니까?

이상한 점은 parfor-Loop 내부의 'DemoData'에 액세스하려고하면 작동한다는 것입니다. 내 출력 그게 전부

load DemoData 
path = pwd; 

apool = gcp('nocreate'); 
if isempty(apool) 
    apool = parpool('local'); 
end 

parfor k = 1 : 2 
    load_system(strcat(path,'\DemoMDL')) 
    set_param('DemoMDL/Mask', 'DataInput', 'DemoData') 
    fprintf(num2str(DemoData)) 
end 

delete(apool); 

덕분에 많은 시뮬레이션 및 데이터

'>>'DemoScript 00000000000000000을 ..... 표시하지 않고 : 그 코드 excample하십시오. 즉 더 많은 (불필요한) 자세한 원래 질문 : 근로자가 클라이언트의 작업 공간에서 DemoData에 액세스하지 않았기 때문에

EarlierQuestion

답변

2

귀하의 오류입니다.

Simulink로 병렬 시뮬레이션을 실행하는 경우 모델 작업 영역으로 이동하면 작업 공간에서 데이터를보다 쉽게 ​​관리 할 수 ​​있습니다. 그런 다음 각 작업자는 모델 작업 영역에서이 데이터에 액세스 할 수 있습니다. 모델 작업 공간에서 데이터를 초기화하기 위해 MAT 파일을로드하거나 MATLAB 코드를 작성할 수 있습니다.Simulink 모델 메뉴 View-> Model Explorer-> Model Workspace를 사용하여 모델 작업 공간에 액세스 할 수 있습니다.

"작업 영역 액세스 문제 해결"에 대한 http://www.mathworks.com/help/simulink/ug/running-parallel-simulations.html 문서를 참조하십시오.

3

나는 어떤 변수가 근로자에게 전달되어야 하는지를 결정하기 위해 MATLAB이 parfor 루프를 사전 처리 할 때 무엇이 ​​DemoData인지 알지 못한다고 생각합니다. 귀하의 첫 번째 예에서는 단지 문자열 일 뿐이므로 어떤 데이터도 전송되지 않습니다. 두 번째 예제에서는 변수에 대해 명시 적으로 알고 있으므로이를 넘겨줍니다.

당신은 시도 할 수 중 모델 작업 영역을 사용하여, 혹은 단지 parfor 루프 코드의 라인

DemoData = DemoData;

를 삽입.

관련 문제