OpenMP: OpenMP 환경 변수

3629 단어
OpenMP 사양은 OpenMP 프로그램의 실행을 제어하는 네 가지 환경 변수를 정의합니다.다음 표는 그것들을 개괄하였다.
표 2–1 OpenMP 환경 변수
환경 변수
기능
OMP_SCHEDULE
RUNTIME 스케줄링 유형을 지정한 DO,PARALLEL DO, for,parallel for 명령/pragma에 스케줄링 유형을 설정합니다.정의되지 않은 경우 기본값 STATIC이 사용됩니다.예: setenv OMPSCHEDULE 'GUIDED,4'
OMP_NUM_THREADS 또는 PARALLEL
병렬 영역을 실행하는 동안 사용할 라인 수를 설정합니다.NUM 사용THREADS 자구 또는 OMP 호출SET_NUM_THREADS()는 이 값을 덮어쓸 수 있습니다.설정하지 않으면 기본값 1이 사용됩니다.value는 정수입니다.일반 프로그램과 호환하기 위해 PARALLEL 환경 변수 설정 효과 및 OMPNUM_THREADS의 효과는 동일합니다.그러나 이 두 환경 변수를 모두 다른 값으로 설정하면 라이브러리에서 오류 메시지가 발생합니다.예: setenv OMPNUM_THREADS 16
OMP_DYNAMIC
병렬 영역을 실행할 수 있는 스레드 수의 동적 조정을 사용하거나 사용하지 않습니다.설정하지 않으면 기본값 TRUE가 사용됩니다.값은 TRUE 또는 FALSE입니다.예: setenv OMPDYNAMIC FALSE
OMP_NESTED
네스트된 병렬 작업을 사용 또는 사용 안 함으로 설정합니다.값은 TRUE 또는 FALSE입니다.기본값은 FALSE입니다.예: setenv OMPNESTED FALSE
다른 다중 처리 환경 변수도 OpenMP 프로그램의 실행에 영향을 줄 수 있지만, 이것은 OpenMP 규범의 일부분이 아니다.다음 표는 그것들을 개괄하였다.
표 2–2 다중 처리 환경 변수
환경 변수
기능
SUNW_MP_WARN
OpenMP 런타임 라이브러리에서 경고 메시지를 제어합니다.TRUE로 설정하면 런타임 라이브러리에서 stderr에 경고 메시지를 보냅니다.FALSE로 설정하면 경고 메시지가 비활성화됩니다.기본값은 FALSE입니다.OpenMP가 실행될 때 라이브러리는 잘못된 끼워넣기와 잠금 해제 등 흔히 볼 수 있는 OpenMP 위반 행위를 검사할 수 있습니다.실행할 때 검사하면 프로그램 실행 비용이 증가합니다.정의된 행동을 수행하려면 3장을 참조하십시오.SUNWMP_WARN이 TRUE로 설정되면 런타임 라이브러리에서 stderr에 경고 메시지가 표시됩니다.프로그램이 경고 메시지를 받아들이기 위해 리셋 함수를 등록하면 실행 시 라이브러리에서도 경고 메시지를 보냅니다.프로그램에서 다음 함수를 호출하여 사용자 콜백 함수를 등록할 수 있습니다.
   int sunw_mp_register_warn (void (*func)(void *));

리셋 함수의 주소는sunw 에 매개 변수로 전달됩니다mp_register_warn().콜백 함수를 성공적으로 등록하면 이 함수는 0을, 등록에 실패하면 1을 반환합니다.만약 프로그램이 리셋 함수를 등록했다면libmtsk는 이 등록된 함수를 호출하여 오류 메시지를 포함하는 로컬 문자열에 바늘을 전달할 것입니다.리셋 함수에서 리셋하면 가리키는 메모리가 더 이상 유효하지 않습니다.예: setenv SUNWMP_WARN TRUE
SUNW_MP_THR_IDLE
OpenMP 프로그램의 빈 라인의 상태를 제어합니다. 이 라인들은 어떤 장벽에서 기다리거나 처리할 새로운 병렬 영역을 기다리고 있습니다.이 값을 SPIN, SLEEP, SLEEP(times), SLEEP(timems), SLEEP(timems), SLEEP(timemc)로 설정할 수 있다. 그 중에서 time는 정수이고 시간량을 지정한다. s, ms와 mc는 시간 단위(초, 밀리초와 미초)를 지정한다.SPIN은 유휴 스레드가 장벽에서 대기하거나 처리할 새 병렬 영역을 기다리는 동안 회전하도록 지정합니다.시간 매개 변수가 없는 SLEEP 는 유휴 스레드를 즉시 일시 중지하도록 지정합니다.시간 매개 변수가 있는 SLEEP는 스레드가 휴면 상태에 들어가기 전에 회전 대기 시간을 지정합니다.절약하지 않은 경우, 빈 라인은 일정 시간의 회전 기다림을 거친 후 휴면 상태로 들어간다.SLEEP, SLEEP(0), SLEEP(0s), SLEEP(0ms)와 SLEEP(0mc)는 모두 같은 효과이다.예:
setenv SUNW_MP_THR_IDLE SPIN setenv SUNW_MP_THR_IDLE SLEEP setenv SUNW_MP_THR_IDLE SLEEP(2s) setenv SUNW_MP_THR_IDLE SLEEP(20ms) setenv SUNW_MP_THR_IDLE SLEEP(150mc)

SUNW_MP_PROCBIND
환경 변수는 Solaris 시스템에서만 작동합니다.SUNW_MP_PROCBIND 환경 변수는 OpenMP 프로그램의 스레드를 실행 중인 시스템의 가상 프로세서에 연결하는 데 사용할 수 있습니다.프로세서 바인딩을 통해 성능을 향상시킬 수 있지만, 여러 개의 스레드를 같은 가상 프로세서에 바인딩하면 성능이 떨어진다.자세한 내용은 2.4 Solaris의 프로세서 바인딩을 참조하십시오.
SUNW_MP_MAX_POOL_THREADS
스레드 풀의 최대 크기를 지정합니다.스레드 풀은 OpenMP 런타임 라이브러리에서 만든 비사용자 스레드만 포함합니다.이것은 주 루틴이나 사용자 프로그램이 현저하게 만든 루틴을 포함하지 않습니다.이 환경 변수를 0으로 설정하면, 스레드 탱크가 비어 있고, 모든 병렬 영역이 한 스레드로 실행됩니다.지정하지 않으면 기본값 1023이 사용됩니다.자세한 내용은 4.2 중첩 병렬 제어 를 참조하십시오.
SUNW_MP_MAX_NESTED_LEVELS
활성 네스트된 병렬 영역의 최대 깊이를 지정합니다.활성 중첩 깊이가 이 환경 변수 값보다 큰 병렬 영역은 하나의 라인으로만 실행됩니다.병렬 영역이 OpenMP 병렬 영역(IF 자문의 값이false)이면 활성 영역으로 간주되지 않습니다.지정하지 않으면 기본값 4가 사용됩니다.자세한 내용은 4.2 중첩 병렬 제어 를 참조하십시오.
STACKSIZE
각 스레드의 스택 크기를 설정합니다.값은 킬로바이트 단위입니다.기본 스택 크기는 32비트 SPARC V8 및 x86 플랫폼에서 4Mb, 64비트 SPARC V9 및 x86 플랫폼에서 8Mb입니다.예: setenv STACKSIZE 8192는 스레드 스택 크기를 8MbSTACKSIZE 환경 변수로 설정하고 B(바이트 표시), K(천 바이트 표시), M(메가바이트 표시) 또는 G(천 바이트 표시)의 접미사를 받습니다.기본 단위는 킬로바이트입니다.
SUNW_MP_GUIDED_WEIGHT
GUIDED 스케줄링을 사용하는 루프에서 스레드에 할당된 블록의 크기를 결정하는 가중치 비율을 설정합니다.이 값은 양의 부동 소수점 숫자여야 하며 GUIDED 스케줄링을 사용하는 프로그램의 모든 주기에 적용됩니다.설정하지 않으면 기본값 2.0이 사용됩니다.

좋은 웹페이지 즐겨찾기