2017-11-19 2 views
1

에 parfor의 폴더에있는 파일을 .mat로드 어떻게는 MATLAB

B=load('dataB.mat'); % B is a 1600*100 matrix stored as 'dataB.mat' in the local folder 
simN=100; 
cof=cell(1,simN); 
se=cell(1,simN); 
parfor s=1:simN 
    [estimates, SE]=fct(0.5,[0.1,0.8,10]',B(:,s)); 
    cof{s}=estimates'; 
    se{s}=SE'; 
end 

그러나 코드를 다음과 같이 MATLAB에서 parfor 루프를 실행하려면, 코드가 작동하지 않을 것 같다 - 어떤 경고가없고, 그것이 그냥 출력없이 영원히 실행 - 나는 루프를 종료하고 함수 'fct'에 입력 한 적이 없다는 것을 알았습니다. MATLAB의 병렬 컴퓨팅에서 'dataB.mat'와 같은 외부 데이터를로드하는 방법에 대한 도움이 필요하십니까?

+0

코드에 문제가없는 것 같습니다. 정말 오랜 시간이 걸릴 수도 있습니다. 병렬 계산을 할 때 MATLAB은 모든 필요한 데이터를 각 작업자에게 전송해야합니다. 이 경우 B는 모든 작업자에게 복사해야합니다. 'B'가 매우 큰 경우 이것은 주요 지연을 유발할 수 있으며 보통'for' 루프보다 시간이 오래 걸립니다. – jodag

답변

1

내 콘솔에 입력하면 :

rand(1600,100) 

을 한 후 나는 dataB.mat이 명령 내 현재 작업 공간을 저장합니다

B = load('dataB.mat'); 

나에게 ans 필드를 포함하는 1 1 구조체를 가져올 것 1600x100 이중 행렬로. 따라서 응용 프로그램의 각 루프에서 fct 함수를 호출하기 전에 B 열을 추출해야합니다 (추출 된 열은 호출의 세 번째 인수가되며 전달하기 전에 정의해야합니다). parfor 루프를 계속 진행하기 전에 B 변수 구성을 중단 점으로 확인하지 않았습니다.

또한 새로운 Matlab 인스턴스로 parfor 루프를 처음 실행하면 Matlab 엔진이 모든 작업자를 인스턴스화해야하며 매우 오랜 시간이 걸릴 수 있습니다. 인내심을 가지고 결국에는 두 번째 테스트를 실행하여 작업자가 인스턴스화되었다는 것을 확신하면 문제가 지속되는지 확인하십시오.

이것이 원인이 아닌 경우 parfor 대신 표준 루프 (for)를 실행하고 반복의 첫 번째 줄에 중단 점을 설정하는 것이 좋습니다. 이렇게하면 문제를 신속하게 파악하는 데 도움이됩니다.