이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
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 (
는 병렬 풀을 만들지 않고 loopVar
= initVal
:endVal
,cluster
); statements
; endcluster
의 워커에서 statements
를 실행합니다. 이는 parfor (loopVar = initVal:endVal,parforOptions(cluster)); statements; end
를 실행하는 것과 동일합니다.
parfor (
는 loopVar
= initVal
:endVal
,pool
); statements
; endparallel.Pool
객체 pool
가 지정한 병렬 풀에서 statements
를 실행합니다. gcp
함수가 반환하는 풀이 아닌 다른 풀에서 parfor
문을 평가하려면 이 구문을 사용합니다. (R2025a 이후)
예제
입력 인수
팁
다음과 같은 경우에
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) 항목을 참조하십시오.GPU 연산의 경우:
GPU가 하나이고 루프 반복이 모두 동일한 GPU를 사용하는 경우
parfor
루프를 사용하지 마십시오. GPU에는 병렬 연산을 수행할 수 있는 많은 마이크로프로세서가 포함되어 있으며parfor
루프를 사용하여 GPU 연산을 추가로 병렬화한다고 해서 코드 속도가 향상될 가능성은 매우 낮습니다.GPU가 여러 개이고 계산에 GPU 지원 함수를 사용하는 경우
parfor
루프를 사용하십시오.parfor
루프에서 여러 개의 GPU를 사용하는 방법에 대한 자세한 내용은 Run MATLAB Functions on Multiple GPUs 항목을 참조하십시오.
확장 기능
버전 내역
R2008a에 개발됨참고 항목
for
| gcp
| listAutoAttachedFiles
| parpool
| parfeval
| ticBytes
| tocBytes
| send
| afterEach
| parforOptions