주요 콘텐츠

parfor 루프 또는 spmd 문에서 투명성 확보하기

R2026b

parfor 루프나 spmd 블록의 본문은 투명해야 합니다. 여기서 투명성이란 변수에 대한 모든 참조를 코드 텍스트에서 확인할 수 있어야 한다는 것을 의미합니다. 이 페이지를 통해 parfor 루프 또는 spmd 블록의 본문이 투명하게 유지되도록 하면서 오류를 방지하는 방법을 알아볼 수 있습니다.

팁

MATLAB® 코드 분석기에서 parfor 루프 요구 사항, 지침 또는 제한 사항과 관련된 경고나 오류가 발생하는 경우 MATLAB Copilot 동작을 사용하면 문제를 진단하는 데 도움이 될 수 있습니다. 코드 분석기 메시지에서 Copilot Explain 버튼을 클릭하여, 코드가 위반한 특정 요구 사항이나 제한 사항을 설명하고 루프를 병렬 실행에 적합하게 만들 수 있는 코드 변경 사항을 제안하도록 Copilot에 요청하십시오. 예제 워크플로는 Resolve Issues in parfor-loops Using MATLAB Copilot 항목을 참조하십시오.

다음 예제에서 변수 X는 워커로 전송되지 않습니다. 문자형 벡터 'X'만 eval로 전달되며 X는 루프 본문이나 블록 본문에 입력 변수로 보여지지 않습니다. 그 결과 MATLAB은 런타임에 오류를 발생시킵니다.

X = 5;
parfor ii = 1:4
    eval('X');
end
X = 5;
spmd
    eval('X');
end

마찬가지로, parfor 루프 또는 spmd 문 내에서 clear 함수를 실행하여 작업 공간에서 변수를 지울 수 없습니다.

parfor ii = 1:4
    <statements...>
    clear('X')  % cannot clear: transparency violation
    <statements...>
end
spmd; clear('X'); end

대신에 변수가 더 이상 필요하지 않을 경우 변수 값을 빈 값으로 설정하여 사용된 메모리를 해제할 수는 있습니다.

parfor ii = 1:4
    <statements...>
    X = [];
    <statements...>
end

spmd 블록의 경우 Composite 객체를 클라이언트 작업 공간에서 지울 수 있습니다.

일반적으로 투명성 요구 사항은 변수에 대한 모든 동적 액세스를 제한합니다. 이는 지정된 워커에 한 변수의 전체가 존재하지 않을 수도 있기 때문입니다. 투명한 작업 공간에서는 코드에 해당 변수가 명시적으로 지정되어 있지 않으면 그 변수를 생성, 삭제, 수정, 액세스 또는 쿼리할 수 없습니다.

parfor 루프에서 투명성을 위반하는 기타 동작이나 함수의 예제는 다음과 같습니다.

  • who 및 whos

  • workspace 인수가 'caller'로 지정된 evalc, evalin 및 assignin

  • save 및 load(load의 출력값이 변수에 할당되지 않은 경우)

  • 스크립트에서 부모 작업 공간의 변수를 읽어 들이거나 작성하려고 시도할 경우, 이 스크립트를 실행하면 투명성 위반을 야기할 수 있습니다. 이 문제를 방지하려면 스크립트를 함수로 변환하고 필요한 변수를 입력 인수나 출력 인수로 사용하여 함수를 호출하십시오.

참고

투명성은 parfor 또는 spmd 구문의 직접적인 본문에만 적용되며, 그 본문에서 호출되는 함수에는 적용되지 않습니다. save와 load의 한 가지 우회적 해결 방법은 함수 내에 save와 load에 대한 호출을 숨기는 것입니다. 다른 우회적 해결 방법은 "-fromstruct" 옵션을 사용하여 save를 호출하는 것입니다. 자세한 내용은 parfor 루프에서 변수 저장하기 항목을 참조하십시오.

MATLAB은 parfor 본문에서 호출되는 함수에 나타나는 eval 및 evalc 문을 성공적으로 실행합니다.

병렬 Simulink 시뮬레이션

parfor 루프를 사용하는 대신 parsim 명령을 사용하여 Simulink® 모델을 병렬로 실행할 수 있습니다. Simulink의 병렬 사용에 대한 자세한 내용과 예제는 Running Multiple Simulations in Simulink (Simulink) 항목을 참조하십시오.

  • Simulink 모델이 .mat 파일에 포함된 변수에 액세스해야 하는 경우, 각 워커의 작업 공간에 해당 파라미터를 불러와야 합니다. 이 작업은 parfor 루프 전, 그리고 parpool을 연 후에 수행해야 합니다. 이 작업을 수행하려면 예제에 나오는 대로 spmd 또는 parfevalOnAll을 사용하면 됩니다.

    spmd 
        evalin('base', 'load(''path/to/file'')') 
    end
    parfevalOnAll(@evalin, 0, 'base', 'load(''path/to/file'')')

  • 모델이 MATLAB 스크립트 본문에 정의된 변수도 필요로 하는 경우, 모든 parfor 반복에서 assignin 또는 evalin을 사용하여 해당 변수를 각 워커의 기본 작업 공간으로 이동해야 합니다.

참고 항목

|

도움말 항목