parfor
여러 워커에서 병렬로 for
루프 반복 실행
구문
설명
parfor
는 병렬 풀에 있는 워커들에서 loopVar
= initVal
:endVal
; statements
; end for
루프 반복을 병렬로 실행합니다.
MATLAB®은 initVal
과 endVal
사이의 loopVar
값에 대해 루프 본문 명령 statements
를 실행합니다. loopVar
은 1씩 증가하는 정수 값으로 구성된 벡터를 지정합니다. Parallel Computing Toolbox™가 있으면 멀티코어 컴퓨터 또는 클러스터에 병렬 풀로 조직된 워커들을 사용하여 statements
반복을 실행할 수 있습니다. for
루프와 마찬가지로 statements
에 한 줄 또는 여러 줄을 포함할 수 있습니다.
parfor
를 사용하여 처리량을 증가시킬 수 있는 방법을 알아보려면 parfor를 언제 사용할지 결정하기 항목을 참조하십시오.
parfor
는 기존의 for
루프와는 다음과 같이 다릅니다.
루프 반복이 비결정적 순서(nondeterministic order)로 병렬 실행됩니다. 즉,
parfor
를 사용하려면 코드를 수정해야 할 수 있습니다. 자세한 내용은 for 루프를 parfor 루프로 변환하기 항목을 참조하십시오.루프 반복이 연속으로 증가하는 정수 값이어야 합니다.
parfor
루프의 본문은 독립적이어야 합니다. 반복은 비결정적 순서로 실행되므로 하나의 루프 반복이 이전 반복에 종속될 수 없습니다. 자세한 내용은 parfor 루프 반복이 서로 독립적이어야 함 항목을 참조하십시오.parfor
루프를 또다른parfor
루프 내에 사용할 수 없습니다. 자세한 내용은 중첩 parfor 루프와 중첩 for 루프 및 기타 parfor 요구 사항 항목을 참조하십시오.
parfor (
루프 본문에 있는 loopVar
= initVal
:endVal
,M
); statements
; end statements
를 실행할 때 사용할 병렬 풀의 최대 워커 개수를 M
을 사용하여 지정합니다. M
은 음이 아닌 정수여야 합니다.
기본적으로 MATLAB은 사용자의 병렬 풀에 있는 워커들을 사용합니다. 디폴트 프로파일의 PreferredPoolNumWorkers
속성을 사용하여 병렬 풀의 디폴트 워커 개수를 변경할 수 있습니다. 디폴트 풀 크기에 영향을 미칠 수 있는 모든 요인은 풀 크기에 영향을 미치는 요인 항목을 참조하십시오. parpool
함수를 사용하여 병렬 풀의 디폴트 워커 개수를 재정의할 수 있습니다. 풀에 사용 가능한 워커가 없거나 M
이 0인 경우, MATLAB은 병렬 연산을 수행하지는 않지만 계속 비결정적 순서로 루프 본문을 실행합니다. 이 구문을 사용하면 코드를 테스트할 때 병렬 실행과 직렬 실행 간에 전환할 수 있습니다.
이 구문을 사용하여 반복을 병렬로 실행하려면 워커로 구성된 병렬 풀이 있어야 합니다. 기본적으로 parfor
을 실행하면, 디폴트 프로파일로 정의된 병렬 환경에 워커로 구성된 병렬 풀이 자동으로 만들어집니다. 디폴트 병렬 환경은 Processes입니다. 병렬 기본 설정에서 프로파일을 변경할 수 있습니다. 자세한 내용은 병렬 기본 설정 지정하기 항목을 참조하십시오.
parfor (
는 루프 본문에 있는 loopVar
= initVal
:endVal
,opts
); statements
; endstatements
를 실행할 때 사용할 리소스를 opts
를 사용하여 지정합니다. parfor
옵션 세트는 parforOptions
함수를 사용하여 만들 수 있습니다. 이 방식에서는 먼저 병렬 풀을 만들지 않고도 클러스터에서 parfor
를 실행할 수 있으며 parfor
가 반복을 워커의 부분 범위로 분할하는 방식을 제어할 수 있습니다.
예제
입력 인수
팁
다음과 같은 경우에
parfor
를 사용합니다.간단한 계산으로 구성된 루프 반복이 많이 있는 경우.
parfor
는 루프 반복을 그룹으로 나누고 각 스레드가 하나의 반복 그룹을 실행할 수 있도록 합니다.실행 시간이 오래 걸리는 일부 루프 반복이 있는 경우.
루프의 반복이 다른 반복 결과에 따라 달라지는 경우에는
parfor
루프를 사용하지 마십시오.축소는 이 규칙에 대한 한 가지 예외입니다. 축소 변수는 매 반복마다 달라지는 값을 계속 누적하지만 반복 회차 간에는 독립적인 값을 가집니다. 자세한 내용은 Reduction Variables 항목을 참조하십시오.
parfor
를 사용하는 경우 결과를 얻으려면 루프가 완료되기를 기다려야 합니다. 클라이언트 MATLAB이 차단되어 루프를 일찍 중단할 수 없습니다. 중간 결과를 구하거나for
루프를 일찍 중단하려면 대신parfeval
을 사용해 보십시오.cluster 객체를 지정하지 않는 한
parfor
루프는 기존 병렬 풀에서 실행됩니다. 풀이 없는 경우, 병렬 기본 설정에서 자동 풀 시작이 비활성화되어 있지 않는 한parfor
는 새 병렬 풀을 시작합니다. 병렬 풀이 없는 경우와parfor
가 병렬 풀을 시작할 수 없는 경우에는 루프가 클라이언트 세션에서 직렬로 실행됩니다.병렬 풀에 대한 클러스터 프로파일의
AutoAttachFiles
속성이true
로 설정된 경우, MATLAB이parfor
루프를 분석하여 루프 실행에 필요한 코드 파일을 결정합니다.listAutoAttachedFiles
를 참조하십시오. MATLAB은 코드가 워커에 사용될 수 있도록 병렬 풀에 이러한 코드 파일을 자동으로 연결합니다.parfor
루프에서 직접 스크립트를 호출할 수는 없습니다. 대신, 스크립트를 호출하는 함수를 호출할 수 있습니다.clear
는 작업 공간 투명성을 위반하므로parfor
루프 내에서 사용하지 마십시오. parfor 루프 또는 spmd 문에서 투명성 확보하기 항목을 참조하십시오.parfor
루프를 사용하는 대신parsim
명령을 사용하여 Simulink® 모델을 병렬로 실행할 수 있습니다. Simulink의 병렬 사용에 대한 자세한 내용과 예제는 Running Multiple Simulations (Simulink) 항목을 참조하십시오.
확장 기능
버전 내역
R2008a에 개발됨참고 항목
for
| gcp
| listAutoAttachedFiles
| parpool
| parfeval
| ticBytes
| tocBytes
| send
| afterEach
| parforOptions