4. 환경 변수
이 장에서는 병렬 코드 실행을 제어하는 OpenMP C 및 C++ API 환경 변수(또는 유사한 플랫폼별 메커니즘)에 대해 설명합니다. 환경 변수의 이름은 대문자여야 합니다. 할당된 값은 대/소문자를 구분하지 않으며 선행 및 후행 공백이 있을 수 있습니다. 프로그램이 시작된 후의 값 수정은 무시됩니다.
환경 변수는 다음과 같습니다.
- OMP_SCHEDULE 런타임 일정 유형 및 청크 크기를 설정합니다.
- OMP_NUM_THREADS 실행 중에 사용할 스레드 수를 설정합니다.
- OMP_DYNAMIC 스레드 수의 동적 조정을 사용하거나 사용하지 않도록 설정합니다.
- OMP_NESTED 중첩된 병렬 처리를 사용하거나 사용하지 않도록 설정합니다.
이 챕터의 예제에서는 이러한 변수를 Unix C 셸(csh) 환경에서 설정하는 방법만 보여 줍니다. Korn 셸 및 DOS 환경에서 동작은 다음과 유사합니다.
csh:
setenv OMP_SCHEDULE "dynamic"
ksh:
export OMP_SCHEDULE="dynamic"
DOS:
set OMP_SCHEDULE="dynamic"
4.1 OMP_SCHEDULE
OMP_SCHEDULE
는 일정 유형runtime
이 있는 지시문에만 for
parallel for
적용됩니다. 이러한 모든 루프의 일정 유형 및 청크 크기는 런타임에 설정할 수 있습니다. 이 환경 변수를 인식된 일정 유형 및 선택적 chunk_size 설정합니다.
일정 for
형식이 아닌 runtime
OMP_SCHEDULE
경우 및 parallel for
지시문은 무시됩니다. 이 환경 변수의 기본값은 구현 정의입니다. 선택적 chunk_size 설정된 경우 값은 양수여야 합니다. chunk_size 설정되지 않은 경우 일정이 있는 경우를 제외하고 값 1이 가정됩니다static
. 일정의 static
경우 기본 청크 크기는 루프 반복 공간으로 루프에 적용된 스레드 수로 나뉩니다.
예시:
setenv OMP_SCHEDULE "guided,4"
setenv OMP_SCHEDULE "dynamic"
상호 참조
- for 지시문
- parallel for 지시문
4.2 OMP_NUM_THREADS
환경 변수는 OMP_NUM_THREADS
실행 중에 사용할 기본 스레드 수를 설정합니다. OMP_NUM_THREADS
는 라이브러리 루틴을 호출 omp_set_num_threads
하여 해당 번호가 명시적으로 변경되는 경우 무시됩니다. 지시문에 parallel
명시적 num_threads
절이 있는 경우에도 무시됩니다.
환경 변수의 OMP_NUM_THREADS
값은 양의 정수여야 합니다. 그 효과는 스레드 수의 동적 조정을 사용할 수 있는지 여부에 따라 달라집니다. 환경 변수와 스레드의 동적 조정 간의 OMP_NUM_THREADS
상호 작용에 대한 포괄적인 규칙 집합은 섹션 2.3을 참조하세요.
사용할 스레드 수는 다음과 같은 경우 구현에서 정의됩니다.
- 환경 변수가
OMP_NUM_THREADS
지정되지 않았습니다. - 지정된 값이 양의 정수가 아니거나
- 값이 시스템에서 지원할 수 있는 최대 스레드 수보다 큽니다.
예시:
setenv OMP_NUM_THREADS 16
상호 참조
4.3 OMP_DYNAMIC
환경 변수는 OMP_DYNAMIC
병렬 영역 실행에 사용할 수 있는 스레드 수를 동적으로 조정하거나 사용하지 않도록 설정합니다. OMP_DYNAMIC
는 라이브러리 루틴을 호출 omp_set_dynamic
하여 동적 조정을 명시적으로 사용하거나 사용하지 않도록 설정할 때 무시됩니다. 해당 값은 이어야 TRUE
합니다.FALSE
설정된 TRUE
경우 OMP_DYNAMIC
병렬 영역을 실행하는 데 사용되는 스레드 수를 런타임 환경에서 조정하여 시스템 리소스를 가장 잘 사용할 수 있습니다. 설정된 FALSE
경우 OMP_DYNAMIC
동적 조정을 사용할 수 없습니다. 기본 조건은 구현 정의입니다.
예시:
setenv OMP_DYNAMIC TRUE
상호 참조
- 병렬 지역
- omp_set_dynamic 함수
4.4 OMP_NESTED
OMP_NESTED
라이브러리 루틴을 호출 omp_set_nested
하여 중첩 병렬 처리를 사용하거나 사용하지 않도록 설정하지 않는 한 환경 변수는 중첩된 병렬 처리를 사용하거나 사용하지 않도록 설정합니다. 설정된 TRUE
경우 OMP_NESTED
중첩된 병렬 처리가 사용됩니다. 설정된 경우 OMP_NESTED
중첩된 병렬 처리는 사용하지 않도록 설정 FALSE
됩니다. 기본값은 FALSE
입니다.
예시:
setenv OMP_NESTED TRUE