parfor
루프 또는 spmd
문에서 투명성 확보하기
parfor
루프나 spmd
블록의 본문은 투명해야 합니다. 여기서 투명성이란 변수에 대한 모든 참조는 코드 텍스트에서 확인할 수 있어야 한다는 것을 의미합니다.
다음 예제에서 변수 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
루프에서 투명성을 위반하는 기타 동작이나 함수의 예제는 다음과 같습니다.
참고
투명성은 parfor
또는 spmd
구문의 직접 본문에만 적용되며 구문에서 호출되는 함수에는 적용되지 않습니다. save
와 load
의 한 가지 우회적 해결 방법은 함수 내에 save
와 load
에 대한 호출을 숨기는 것입니다. 다른 우회적 해결 방법은 "-fromstruct"
옵션을 사용하여 save
를 호출하는 것입니다. 자세한 내용은 Save Variables in parfor-Loops 항목을 참조하십시오.
MATLAB은 parfor
본문에서 호출되는 함수에 나타나는 eval
및 evalc
문을 성공적으로 실행합니다.
병렬 Simulink 시뮬레이션
parfor
루프를 사용하는 대신 parsim
명령을 사용하여 Simulink® 모델을 병렬로 실행할 수 있습니다. Simulink의 병렬 사용에 대한 자세한 내용과 예제는 Running Multiple Simulations (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
을 사용하여 이 변수를 각 워커의 기본 작업 공간으로 이동해야 합니다.