Main Content

for (drange)

분산된 범위에 대한 for 루프

설명

for loopVar = drange(range); statements; end; 는 분산된 범위에 대해 병렬로 for 루프 반복을 실행합니다.

MATLAB®은 거의 동일한 길이의 연속한 조각들을 사용하여 병렬 풀의 워커들을 range에 의해 지정된 범위로 분할합니다. 그런 다음 MATLAB은 각 워커에서 지정된 범위의 loopVar에 대해 for 루프의 statements 내의 루프 본문 명령을 실행합니다.

반복이 어떤 순서로든 수행될 수 있도록 각 반복은 서로 독립적이어야 합니다. 루프 본문 내에서는 다른 워커와의 통신이 허용되지 않습니다.

각 워커는 공동분산 배열의 국소 부분에 액세스할 수 있지만 다른 워커에 저장된 공동분산 배열의 부분에는 액세스할 수 없습니다. loopVar을 사용하면 다음 조건에서 공동분산 배열의 국소 부분의 요소를 참조할 수 있습니다.

  • 루프 인덱스 rangerange = 1:N 형식으로 제공된 경우

  • 배열이 디폴트 1d 공동분산 방식을 사용한 분산 배열인 경우

  • 배열이 분포 차원을 따라 크기 N을 갖는 경우

break 문을 사용하여 루프 실행을 종료할 수 있습니다.

예제

예제

모두 축소

이 예제에서는 마방진의 랭크를 구하는 방법을 보여줍니다. 공동분산 배열의 국소 부분에만 액세스할 수 있습니다.

spmd
   r = zeros(1, 40, codistributor());
   for n = drange(1:40)
      r(n) = rank(magic(n));
   end
end
r = gather(r);

이 예제에서는 pi의 몬테카를로 근삿값을 계산하는 방법을 보여줍니다.

spmd
   m = 10000;
   for p = drange(1:spmdSize)
      z = rand(m,1) + i*rand(m,1);
      c = sum(abs(z) < 1); 
   end
   k = spmdPlus(c)
   p = 4*k/(m*spmdSize);
end
p{1}
ans = 3.1501

이 예제에서는 피보나치 수의 계산을 시도하는 방법을 보여줍니다. 루프 본문이 종속적이므로 이 예제는 동작하지 않습니다. 다음 코드는 오류가 발생합니다.

spmd
   f = zeros(1, 50, codistributor());
   f(1) = 1;
   f(2) = 2;
   for n = drange(3:50)
      f(n) = f(n-1) + f(n-2)
   end
end
Error detected on workers 2 3 4 5 6.

Caused by:
    Error using codistributed/subsref (line 40)
    Error using codistributed/subsref (line 40)
    Inside a FOR-DRANGE loop, a subscript can only access the local 
    portion of a codistributed array.

입력 인수

모두 축소

루프 변수 이름으로, 텍스트로 지정됩니다.

루프 인덱스 범위로, start:finish 또는 start:increment:finish 형식의 표현식으로 지정됩니다. 디폴트 증분값은 1입니다.

루프 본문으로, 텍스트로 지정됩니다. for 루프에서 실행할 일련의 MATLAB 명령.

statements는 통신을 수행하는 함수를 포함해서는 안 되며, 여기에는 다음과 같은 함수가 포함됩니다.

버전 내역

R2007b에 개발됨

참고 항목

| |