2.4.1 구조에 대 한

해당 에 대 한 지시문을 병렬로 연결 된 루프 반복 실행 된다는 지정에서 반복적인 작업 공유 구문을 식별 합니다.반복은 에 대 한 루프는 병렬 구문에 바인딩된 실행 팀에서 이미 존재 하는 스레드 간에 분산 됩니다.구문에는 에 대 한 구문은 다음과 같습니다.

#pragma omp for [clause[[,] clause] ... ] new-line
   for-loop

절에서 다음 중 하나입니다.

개인 (변수 목록)

firstprivate (변수 목록)

lastprivate (변수 목록)

reduction(operator : variable-list)

순서가 지정 된

schedule(kind, chunk_size)

에 nowait

에 대 한 지시문 배치 제한에 해당 하는 구조에서 에 대 한 루프.특히 해당 하는 에 대 한 루프 정식 모양에 있어야 합니다.

for (init-expr;var 논리 op bincr-expr)

  • expr 초기화
    다음 중 하나입니다.

    var = lb

    정수 형식 var = 파운드

  • expr incr
    다음 중 하나입니다.

    ++var

    var ++

    -- var

    var --

    var += incr

    var -= incr

    var = var + incr

    var = incr + var

    var = var - incr

  • var
    부호 있는 정수 변수입니다.이 변수가 공유 될 수 있는 경우 암시적으로 개인의 기간에 대 한 기입니다 있는 에 대 한.본문 내에서이 변수에 수정 하면 안은 에 대 한 문입니다.변수를 지정 하지 않으면 lastprivate, 루프를 결정 한 후 해당 값입니다.

  • 작업 논리
    다음 중 하나입니다.

    <

    <=

    >

    >=

  • lb, b, and incr
    고정 정수 식을 반복 합니다.이러한 식의 평가 동안 동기화가입니다.따라서 계산된 파생 작업이 확정 되지 않은 결과 생성 합니다.

정규 형식 루프 반복 횟수를 사용 하 여 루프의 시작 부분에서 계산 될 수 있습니다.값 형식에이 계산은 수행 됩니다 var, 정수 계열 홍보 후.특정 한 경우의 값은 b - 파운드 + incr 는 결과 형식에서 결정 되지 않습니다 나타낼 수 없습니다.추가로, if 논리 op 입니다 < 또는 < = incr expr 발생 합니다 var 루프의 각 반복에 증가 합니다.경우 논리 op 입니다 > 또는 > = incr expr 발생 합니다 var 루프의 각 반복에서 줄일 수 있습니다.

일정 절을 지정 하는 방법의 반복은 에 대 한 루프 팀 스레드 간에 분할 됩니다.프로그램의 정확성 어떤 스레드가 특정 반복 실행에 의존 해야 하지.값은 chunk_size지정 된 경우, 양수 값은 루프 고정 정수 식 이어야 합니다.이 식 계산 하는 동안 동기화가 됩니다.따라서 계산된 파생 작업이 확정 되지 않은 결과 생성 합니다.일정 종류 다음 중 하나가 될 수 있습니다.

표 2-1 일정종류

static

일정 (정적, chunk_size) 지정 반복을 지정 된 크기의 청크로 나뉩니다 chunk_size.스레드는 스레드 번호 순으로 라운드 로빈 방식으로 팀의 청크 정적으로 할당 됩니다.아니요 때 chunk_size 지정 반복 간격을 대략 같은 크기에 있는 각 스레드에 할당 한 덩어리를 청크로 구분 됩니다.

dynamic

일정 (동적, chunk_size) 지정 반복에 포함 된 각 청크를 시리즈로 나뉩니다 chunk_size 반복 합니다.각 청크 할당에 대해 대기 중인 스레드가 할당 됩니다.스레드 덩어리의 반복 실행 하 고 할당할 수 없는 청크 남을 때까지 그 다음 할당에 대 한 다음 기다립니다.할당 하는 마지막 청크 반복 수가 다를 수 있습니다.아니요 때 chunk_size 지정 하면 기본값은 1입니다.

문제 해결 도우미

일정 (안내, chunk_size) 지정 반복 청크 방식으로 크기를 줄여 스레드 할당 된.그 할당 된 덩어리의 반복 스레드가 완료 되 면 다른 청크 없음 남을 때까지 동적으로 할당 됩니다.에 있는 chunk_size 1 / 스레드 수 지정 하지 않은 반복 횟수가 약 각 덩어리의 크기입니다.이러한 크기 약 1로 엄청나게 줄어듭니다.에 chunk_size 값이 k 1 보다 큰 크기가 약을 엄청나게 감소 k, 마지막 청크 보다 적은 수 있습니다 제외 하 고 k 반복.아니요 때 chunk_size 지정 하면 기본값은 1입니다.

런타임(runtime)

schedule(runtime) 지정 된 관련 일정 런타임이 될 때까지 지연 되는 결정 합니다.일정 종류 및 청크 크기 선택할 수 실행할된 때 환경 변수를 설정 하 여 OMP_SCHEDULE.이 환경 변수를 설정 하지 않으면 일정 결과 구현 시 정의 됩니다.때 schedule(runtime) 지정 된 chunk_size 지정할 수 있어야 합니다.

명시적으로 정의 된 없는 경우에서 일정 절, 기본 일정 구현 시 정의 됩니다.

Openmp와 호환 프로그램은 올바른 실행을 위해 일정에 사용 되었습니다.프로그램 일정에 의존해 서는 안 종류 같은 스케줄의 구현에서 변형 된 수 있기 때문에, 위의 설명에 정확히 맞는 종류 통해 여러 컴파일러.설명 특정 상황에 맞게 일정을 선택 하려면 사용할 수 있습니다.

주문 이 절 있어야 때 주문 지시문을 바인딩해야 하는 에 대 한 생성.

끝에는 암시적 장애물입니다.는 에 대 한 하지 않으면 생성은 에 nowait 절이 지정 되어.

제한에는 에 대 한 지시어는 다음과 같습니다.

  • 에 대 한 루프는 구조화 된 블록을 하며, 또한 실행으로 종료 해야 하지는 브레이크 문입니다.

  • 값은 루프의 제어 식의의 에 대 한 관련 된 루프는 에 대 한 지시문은 팀의 모든 스레드에 대해 동일 해야.

  • 해당 에 대 한 루프 반복 변수는 부호 있는 정수 형식에 있어야 합니다.

  • 하나만 일정 절에 나타날 수 있는 에 대 한 지시문.

  • 단일 주문 절에 나타날 수 있습니다는 에 대 한 지시문입니다.

  • 단일 에 nowait 절에 나타날 수는 에 대 한 지시문입니다.

  • 지정 되지 않은 경우 또는 내 모든 면에 영향을 얼마나 자주 되는 chunk_size, 파운드, b, 또는 incr 식이 발생 합니다.

  • 값은 chunk_size 식 팀의 모든 스레드에 대해 동일 해야 합니다.

상호 참조:

  • 개인, firstprivate, lastprivate, 및 감소 절을 참조 하십시오. 2.7.2 섹션 25 페이지입니다.

  • OMP_SCHEDULE 환경 변수를 참조 하십시오 구역 4.1 48 페이지입니다.

  • 주문 만드는 자세한 내용은 섹션 2.6.6 22 페이지.

  • 부록 D, 93, 페이지 일정 절을 사용 하 여 자세한 정보를 제공 합니다.