2011-09-10 5 views
2

parfor을이 코드에서 사용할 수없는 이유는 무엇입니까?Parfor for MATLAB 문제

Error: The variable xr in a parfor cannot be classified. See Parallel for Loops in MATLAB, "Overview".

답변

12

여기서 문제는 슬라이스 배열의 부적절한 색인의 즉 :

parfor i=1:r 

    for j=1:N/r 

     xr(j + (N/r) * (i-1)) = x(i + r * (j-1)); 

    end 

end 

는 오류입니다. parfor 루프는 비동기 적으로으로 실행됩니다. 즉, 각 반복이 실행되는 순서는 무작위입니다. documentation에서 :

MATLAB workers evaluate iterations in no particular order, and independently of each other. Because each iteration is independent, there is no guarantee that the iterations are synchronized in any way, nor is there any need for this.

당신은 쉽게 명령 줄에 다음을 입력하여 위의 진술을 확인할 수 있습니다

parfor i=1:100 
    i 
end 

당신은 주문이 임의의 것을 볼 수 있습니다. 따라서 다른 작업자간에 병렬 작업을 분할하면 한 작업자가 다른 반복 작업이 완료되었는지 여부를 알 수 없습니다. 따라서 가변 색인 은 이터레이터의 과거/미래 값에 따라 달라질 수 없습니다.

간단한 예를 들어 설명해 드리겠습니다. 피보나치 시리즈 1,1,2,3,5,8,...을 고려하십시오. 이제이 parfor 루프와 동일한 기능을 수행 할 수 있도록

f=zeros(1,10); 
f(1:2)=1; 
for i=3:10 
    f(i)=f(i-1)+f(i-2); 
end 

: 당신은 (순진한 for 루프에서) 쉽게 시리즈의 첫 번째 열 조건을 생성 할 수 있습니다.

f=zeros(1,10); 
f(1:2)=1; 
parfor i=3:10 
    f(i)=f(i-1)+f(i-2); 
end 

??? Error: The variable f in a parfor cannot be classified. See Parallel for Loops in MATLAB, "Overview"

왜이 오류를 주는가?

반복을 임의의 순서로 실행하는 것으로 나타났습니다. 그러면 작업자가 루프 인덱스 i=7과 표현식 f(i)=f(i-1)+f(i-2);을 얻는다 고 가정 해 봅시다. 이제 표현식을 실행하고 그 결과를 마스터 노드로 리턴해야합니다. 이제 반복이 완료되었습니다 i=6? f(6)에 저장된 값의 신뢰성이 있습니까? f(5)은 어떨까요? 내가 뭘보고 있는지 보여? f(5)f(6)을 가정하지 않으면 Fibonnaci 시리즈의 7 번째 항이 0이라고 잘못 계산됩니다!

MATLAB이 계산이 제대로을 실행하고 같은 결과 매번 재생을 보장 할 수 있는지 말하는 방법이 없기 때문에, 같은 모호한 과제가 명시 적으로 허용되지 않습니다.

+0

여전히 오류가 발생합니다. 오류 : parfor의 변수 xr을 분류 할 수 없습니다. MATLAB에서 Parallel for Loops, "개요"를 참조하십시오. ==> Code1 at 36 parfor i = 1 : r – user123668

+0

나는 다음을보고 있었다 : http://www.mathworks.com/help/toolbox/distcomp/brdqtjj-1.html 그리고 그 이유를 알 수 없었다. xr을 분류 할 수 없습니다 – user123668

+0

@ user123668 방금 귀하의 코드에서 오류를 발견했습니다. 'parfor '로는 당신이하는 일이 불가능합니다. – abcd