2014-06-22 5 views
0

에 오류가 나는matlab에 병렬 도구 상자 : parfor

.... 
index = 1; 
parfor mi=initmu:maxmu 
    for la1i=initla+1:(maxla-initla)/stepla+1 
     ImageD=uint8(GaussPoisonDenoise(Image, mu(mi), la1(la1i), la2(la1i))); 
     p = psnr(ImageD, Image0); 
     index=index+1; 
    end 
end 
.... 

을 다음과 같이 코드를 작성하지만 matlab에는 "parfor 루프 변수 인덱스가 사용되는 방식으로 인해 실행할 수 없습니다"라고 나에게 이야기한다. 그게 무슨 뜻 이죠? 나는 무엇을해야합니까?

답변

0

parfor 루프는 다른 루프 반복을 임의의 순서로 실행하도록 루프를 구분합니다.

문제는 변수 "인덱스"가 다른 반복과 다른 값으로 동시에 증가한다는 것입니다.

예를 들어, 한 명의 MATLAB 작업자가 반복 mu = 2를 계산하고 색인을 3 씩 증가시키는 반면, 또 다른 mulab 작업자는 반복 mu = 10을 계산하고 색인을 1 씩 증가시킵니다. 이 경우 인덱스의 유효 가치는 얼마입니까? (인덱스 + 3 또는 인덱스 + 1?)

루프의 반복이 다른 반복의 결과에 의존 할 때 parfor를 사용할 수 없습니다.

"인덱스"가 반복 횟수를 계산하는 데만 필요하면 intmu, maxmu, intla, maxla, stepla에서 연산 할 수 있다고 생각합니다. (하지만 확실한 또 다른 목표가 있습니다!)

0

Parfor는 실행될 여러 반복 사이에 종속성이없는 경우에만 사용해야합니다. 이 경우 두 반복 사이에 종속성이 있으므로 parfor가 작동하지 않습니다.

관련 문제