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 형식이 아닌 runtimeOMP_SCHEDULE 경우 및 parallel for 지시문은 무시됩니다. 이 환경 변수의 기본값은 구현 정의입니다. 선택적 chunk_size 설정된 경우 값은 양수여야 합니다. chunk_size 설정되지 않은 경우 일정이 있는 경우를 제외하고 값 1이 가정됩니다static. 일정의 static 경우 기본 청크 크기는 루프 반복 공간으로 루프에 적용된 스레드 수로 나뉩니다.

예시:

setenv OMP_SCHEDULE "guided,4"
setenv OMP_SCHEDULE "dynamic"

상호 참조

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

상호 참조

  • num_threads 절
  • omp_set_num_threads 함수
  • omp_set_dynamic 함수

4.3 OMP_DYNAMIC

환경 변수는 OMP_DYNAMIC 병렬 영역 실행에 사용할 수 있는 스레드 수를 동적으로 조정하거나 사용하지 않도록 설정합니다. OMP_DYNAMIC 는 라이브러리 루틴을 호출 omp_set_dynamic 하여 동적 조정을 명시적으로 사용하거나 사용하지 않도록 설정할 때 무시됩니다. 해당 값은 이어야 TRUE 합니다.FALSE

설정된 TRUE경우 OMP_DYNAMIC 병렬 영역을 실행하는 데 사용되는 스레드 수를 런타임 환경에서 조정하여 시스템 리소스를 가장 잘 사용할 수 있습니다. 설정된 FALSE경우 OMP_DYNAMIC 동적 조정을 사용할 수 없습니다. 기본 조건은 구현 정의입니다.

예시:

setenv OMP_DYNAMIC TRUE

상호 참조

4.4 OMP_NESTED

OMP_NESTED 라이브러리 루틴을 호출 omp_set_nested 하여 중첩 병렬 처리를 사용하거나 사용하지 않도록 설정하지 않는 한 환경 변수는 중첩된 병렬 처리를 사용하거나 사용하지 않도록 설정합니다. 설정된 TRUE경우 OMP_NESTED 중첩된 병렬 처리가 사용됩니다. 설정된 경우 OMP_NESTED 중첩된 병렬 처리는 사용하지 않도록 설정 FALSE됩니다. 기본값은 FALSE입니다.

예시:

setenv OMP_NESTED TRUE

상호 참조

  • omp_set_nested 함수