2012-02-13 1 views
1

왜 OpenMP는 컴파일러가 다음과 같은 경고를 제공합니다 내가이 코드를 컴파일 할 때 나는 섹션 안에 하나의 블록이

#include <stdio.h> 
#include <stdlib.h> 
#include <omp.h> 

int main (int argc, char *argv[]) 
{ 

int nthreads, tid; 

/* Fork a team of threads giving them their own copies of variables */ 
#pragma omp parallel private(tid) 
{ 

#pragma omp sections 
{ 


#pragma omp section 
{ 
printf("First section %d \n" , tid); 
} 

#pragma omp section 
{ 


#pragma omp single 
{ 
printf("Second Section block %d \n" , tid); 
} 

} 

} 

} /* All threads join master thread and disband */ 

printf("Outside parallel block \n"); 


} 

처럼 차단 경고를 않습니다

작업 공유 지역은 업무 공유, 중요, 주문 또는 마스터 지역 내에서 긴밀하게 중첩되지 않을 수도 있습니다.

왜 그럴까요?

답변

3

Openmp 병렬 영역이 중첩 된 openmp 섹션 영역 안에 중첩 된 openmp 단일 영역이 있기 때문에이 경고 메시지가 표시됩니다.

밀접하게 중첩 된 영역이라고합니다.

C에서 작업 공유 구성은 for, sections 및 single입니다.

자세한 내용은 OpenMP Specification 또는 Intel's Documentation on Improper nesting of OpenMP* constructs을 참조하십시오. 코드를하기 위해

깨끗하게 컴파일, 당신의 #pragma omp sections #pragma omp parallel sections 또는 #pragma omp parallel#pragma omp sections을 둘러싸을 교체하려고합니다.

자세한 내용과 예는 Guide into OpenMP: Easy multithreading programming for C++을 참조하십시오.

관련 문제