parfor
병렬 for 루프
구문
설명
parfor 는 생성된 MEX 함수에 루프를 생성하거나 공유 메모리 멀티코어 플랫폼에서 병렬로 실행되는 C/C++ 코드에 루프를 생성합니다.LoopVar = InitVal:EndVal; Statements; end
parfor 루프는 InitVal과 Endval 사이에서 LoopVar의 값에 대한 Statements를 실행합니다. LoopVar은 1씩 증가하는 정수 값의 벡터를 지정합니다.
parfor (는 병렬 LoopVar = InitVal:EndVal, NumThreads); Statements; endfor 루프를 만들 때 최대 NumThreads개 스레드를 사용합니다.
예제
입력 인수
제한 사항
OpenMP(Open Multiprocessing) 애플리케이션 인터페이스를 지원하는 컴파일러를 사용해야 합니다. 지원되는 컴파일러를 참조하십시오. OpenMP를 지원하지 않는 컴파일러를 사용하는 경우, MATLAB Coder는
parfor루프를for루프로 처리합니다. 생성된 MEX 함수 또는 C/C++ 코드에서 루프 반복은 단일 스레드에서 실행됩니다.OpenMP 애플리케이션 인터페이스는 JIT MEX 컴파일과 호환되지 않습니다. JIT Compilation Does Not Support OpenMP 항목을 참조하십시오.
parfor루프 내부에서는 다음 구문을 사용하지 마십시오.parfor루프의 본문에서coder.extrinsic을 사용하여 외재적 함수를 호출할 수 없습니다.parfor루프 내부의 전역 변수에는 쓰기를 할 수 없습니다.MATLAB Coder는 축소에서
coder.ceval을 사용하는 것을 지원하지 않습니다. 예를 들어, 다음parfor루프에 대한 코드는 생성할 수 없습니다.대신,parfor i = 1:4 y = coder.ceval('myCFcn',y,i); end
coder.ceval을 사용하여 C 코드를 호출하는 로컬 함수를 작성하고 이 함수를parfor루프에서 호출하십시오. 예를 들면 다음과 같습니다.parfor i = 1:4 y = callMyCFcn(y,i); end function y = callMyCFcn(y,i) y = coder.ceval('mCyFcn', y , i); end
루프 인덱스의 유형은 타깃 하드웨어에서 정수 유형으로 표현할 수 있어야 합니다. 멀티워드 유형이 필요하지 않은 유형을 생성 코드에 사용하십시오.
독립 실행형 코드 생성 시
parfor에는 실행 파일 또는 라이브러리를 빌드하기 위한 툴체인 접근법이 필요합니다.MATLAB 코드에서
parfor를 사용하려면 Parallel Computing Toolbox™ 라이선스가 필요합니다.
제한 사항의 전체 목록을 보려면 parfor Restrictions을 참조하십시오.
팁
다음의 경우에
parfor루프를 사용하십시오.간단한 계산에 많은 루프 반복이 필요한 경우.
parfor는 루프 반복을 그룹으로 나누어 각 스레드가 하나의 반복 그룹을 실행할 수 있도록 합니다.실행하는 데 시간이 오래 걸리는 루프 반복이 있는 경우.
루프의 반복이 다른 반복의 결과에 따라 달라지는 경우에는
parfor루프를 사용하지 마십시오.축소는 이 규칙의 예외 중 하나입니다. 축소 변수는 모든 반복에 따라 달라지는 값을 누적하지만, 반복 순서와는 관계가 없습니다.
입력 인수
NumThreads는 생성 코드에 OpenMPnum_threads()절을 설정합니다. OpenMP는 환경 변수OMP_NUM_THREADS를 설정하거나omp_set_num_threads()를 사용하여 C/C++에서 스레드의 수를 전역적으로 제한하는 기능도 지원합니다. 자세한 내용은 openMP 사양을 참조하십시오. https://www.openmp.org/specifications/
버전 내역
R2012b에 개발됨