for 루프를 parfor 루프로 변환하기
R2026bfor 루프를 parfor 루프로 변환하도록 코드를 수정해야만 하는 경우가 있습니다. 이 예제에서는 간단한 중첩 for 루프를 사용하여 parfor 루프 문제를 진단하고 수정하는 방법에 대해 설명합니다. MATLAB®에서 다음 코드를 실행하고 결과를 확인해 보십시오.
for x = 0:0.1:1 for y = 2:10 A(y) = A(y-1) + y; end end
코드의 속도를 높이려면 for 루프를 parfor 루프로 변환해 보십시오. 이 코드는 오류를 발생시킵니다.
parfor x = 0:0.1:1 parfor y = 2:10 A(y) = A(y-1) + y; end end
이 경우, 코드 수정 없이 단순히 for 루프를 parfor 루프로 변환할 수 없습니다. 오류 없이 제대로 작동하게 하려면 몇 군데 코드를 변경해야 합니다. 문제를 진단하려면 이 코드를 MATLAB 편집기에 복사한 다음 코드 분석기 메시지를 확인하십시오. 다음 단계를 사용하여 문제를 진단하고 해결하십시오.
팁
MATLAB 코드 분석기에서 parfor 루프 요구 사항, 지침 또는 제한 사항과 관련된 경고나 오류가 발생하는 경우 MATLAB Copilot 동작을 사용하면 문제를 진단하는 데 도움이 될 수 있습니다. 코드 분석기 메시지에서
버튼을 클릭하여, 코드가 위반한 특정 요구 사항이나 제한 사항을 설명하고 루프를 병렬 실행에 적합하게 만들 수 있는 코드 변경 사항을 제안하도록 Copilot에 요청하십시오. 예제 워크플로는 Resolve Issues in parfor-loops Using MATLAB Copilot 항목을 참조하십시오.
코드 분석기에 보고된 구조적 오류를 식별합니다.
MATLAB이 중첩된
parfor루프를 분석하면, 코드 분석기는 루프 구조 및 루프 변수와 관련된 다음과 같은 오류를 보고합니다.바깥쪽 루프가 정수가 아닌 스텝 크기를 사용하고 있는데, 이는
parfor에서 지원되지 않습니다.parfor루프가 또다른parfor루프 내에 중첩되어 있는데, 이는 허용되지 않습니다.

이 단계에서 코드 분석기는
A에 대한 변수 분류 또는 데이터 종속성 오류를 보고하지 않습니다. MATLAB은 추가적인 분석을 방해하는 구조적 문제만 보고합니다.중첩된 parfor 루프 오류를 해결합니다.
parfor루프를 또다른parfor루프 내에 중첩할 수 없습니다. 한 루프를 병렬로 실행하도록 선택하고, 다른 루프는 for 루프로 재작성하십시오. 병렬 연산에 드는 오버헤드는 한 번만 발생하므로 바깥쪽 루프를 병렬로 실행하십시오.parfor x = 0:0.1:1 for y = 2:10 A(y) = A(y-1) + y; end end또는, 한
parfor루프의 본문 내에서 다른parfor루프를 사용하는 함수를 호출할 수 있습니다. 그러나 모든 워커가 가장 바깥쪽 루프를 병렬화하는 데 사용되기 때문에 이러한 중첩parfor루프는 계산적인 이점이 없습니다. 중첩 루프를 처리하는 방법에 대한 자세한 내용은 중첩 parfor 루프와 중첩 for 루프 및 기타 parfor 요구 사항 항목을 참조하십시오.유효하지 않은 parfor 루프 변수를 수정합니다.
원래 예제에서 루프 변수
x는parfor에서 요구하는 연속된 정수를 사용하지 않습니다. 루프 변수를 유효한 정수 인덱스로 바꾼 다음 해당 인덱스를 필요한 값에 매핑하십시오.parfor루프 변수 문제 해결의 다음 단계는 parfor 루프 변수가 연속된 정수인지 확인하기 항목을 참조하십시오.xValues = 0:0.1:1; parfor idx = 1:numel(xValues) x = xValues(idx); for y = 2:10 A(y) = A(y-1) + y; end end
루프 독립성과 변수 종속성을 진단합니다.
구조적 문제를 수정하고 나면 MATLAB이 루프 본문을 분석합니다. 이제 코드 분석기가 변수
A를 분류할 수 없다고 보고합니다.
parfor루프의 본문은 독립적이어야 합니다. 반복이 비결정적 순서로 병렬 실행되므로, 한 루프 반복이 이전 반복에 종속될 수 없습니다. 다음 예제를 보십시오.위 코드는 독립적이지 않으므로A(y) = A(y-1) + y;
parfor를 사용할 수 없습니다. 계속 진행하려면, 계산을 재구성하여 종속성을 제거하거나 루프를for루프로 유지하십시오. 독립성 문제를 처리하는 다음 단계는 parfor 루프 반복이 서로 독립적이어야 함 항목을 참조하십시오.